npmパッケージnode-ipcへの認証情報窃取コードの混入
- カテゴリ
- マルウェア
StepSecurityの2026年5月14日の報告によると、npmパッケージnode-ipc〔注1〕の不正な3つの版に、CommonJSで読み込むと認証情報を集めて外部へ送る難読化されたコードが入っていた[2]。3版は、それまでこのパッケージの版を出していない保守者アカウントatiertantから公開された[2]。npmのレジストリの記録では、3版は版の一覧から消え、公開時刻だけが残っている[1]。
報告の内容
StepSecurityは、自社のStepSecurity AI Package Analystでnode-ipcの複数の不正な版を検知したと報告した[2]。3版は同一の80KBの難読化されたコードを含み、コードはCommonJSのバンドルnode-ipc.cjsの最後のmodule.exportsの後に即時実行関数として追加されていた[2]。ESMの入口には手が加えられず、侵害はCommonJSのバンドルだけだった[2、11]。
Datadogの報告では、コードはnpmのライフサイクルのスクリプトでは動かず、require("node-ipc")などでCommonJSの入口を読み込んだときに動く[4]。StepSecurityは、package.jsonにpreinstall・install・postinstallのスクリプトは無いと説明した[2]。読み込まれたコードは、環境変数__ntwが無ければ__ntw=1を付けた自身の複製を切り離した子プロセスとして起動し、親のアプリは通常どおり動き続ける[2]。
集める認証情報の範囲
StepSecurityは、コードが90種を超える〔注2〕認証情報を集め、gzipで圧縮してAzureの基盤を装う攻撃者のサーバーへ送り出すと説明した[2]。対象はAWS・Azure・GCP・SSH鍵・Kubernetesのトークン・GitHub CLIの設定・Claude AIとKiro IDEの設定・Terraformの状態・データベースのパスワード・シェルの履歴などである[2]。
Datadogの報告によると、集めたファイルは1件あたりおよそ4MiBを上限にアーカイブに入れる[4]。macOSのキーチェーン、Firefoxの鍵のデータベース、Linuxのキーリング、KWallet、Microsoft TeamsのLevelDBのファイルも対象にしている[4]。SafeDepは、対象の.claude.json・.claude/mcp.json・.kiro/settings/mcp.jsonを、MCPサーバーの認証情報やAPIキーを含みうるAIのコーディングツールの設定ファイルと説明した[5]。
12.0.1の実行条件
StepSecurityの報告では、12.0.1だけは主モジュールのパスのSHA-256が埋め込みの値と一致する環境でだけ動き、ほかの環境では何もしない[2]。9.xの2版にはこの条件が無く、読み込んだどの環境でもコード全体が動く[2]。StepSecurityは、攻撃者は標的の事業か開発者を知っており、その入口のパスのハッシュを公開前に計算したと評価した[2]。9.xの正規の系列にはnode-ipc.cjsが無く、攻撃者は12.xのパッケージの構造を写して9.xの版を作った[2]。
DNSを使う送出の経路
StepSecurityとChainguardは、sh.azurestaticprovider.netへのHTTPS POSTとDNS TXTの問い合わせの2経路で送り出すと説明した[2、11]。Datadogは、指令と制御(C2)の経路はHTTPではなくDNSで、443番ポートはHTTPSではなく標準外のポートのDNSだとした[4]。盗んだデータは問い合わせの名前そのものに符号化され、DNSの応答を要しない[4]。
StepSecurityによると、DNSの経路は1.1.1.1(予備は8.8.8.8)でC2のIPアドレスを引いた後、リゾルバをそのIPアドレスに向けて問い合わせるため、公開のDNSの記録にbt.node.jsの問い合わせは現れない[2]。azurestaticprovider.netはMicrosoftのドメインではない[2]。Datadogの環境では、5月14日にsh.azurestaticprovider.netの名前が37.16.75.69に解決された[4]。解析したときにC2の基盤は稼働していたと、Upwindは報告した[3]。
時系列
| 日付 | 主体 | 内容 | 資料 |
|---|---|---|---|
| 2024年 | riaevangelist | 12.0.0を公開した | [1] |
| 2026年 | - | azurestaticprovider.netがNICENICで登録された(時刻は協定世界時) | [3] |
| 2026年 | - | 12.0.1・9.2.3・9.1.6がnpmに公開された(時刻は協定世界時) | [1] |
| 2026年 | StepSecurity・Upwind・Datadog・SafeDep・Chainguard・Semgrep | 分析を公開した | [2、3、4、5、11、12] |
| 2026年 | OSV | MAL-2026-3744を公開した(時刻は協定世界時) | [8] |
| 2026年 | Snyk | 報告とアドバイザリSNYK-JS-NODEIPC-16697063を公開した | [6、7] |
| 2026年 | - | GitHub Advisory DatabaseのGHSA-pvh2-rg5g-69v7の記録がOSVに取り込まれた | [8] |
| 2026年 | riaevangelist | 14.0.0を公開した | [1] |
根拠と範囲
StepSecurityは、今回の攻撃はCI/CDパイプラインの乗っ取りではなく、侵害されたか不正な保守者アカウントによるものだとした[2]。StepSecurityの評価では、atiertantの認証情報が新たに侵害されたか、この公開のためにアカウントが保守者に加えられたかのどちらかである[2]。SafeDepは、atiertantを元の作者と並ぶ共同保守者で、ほかに約20のパッケージを保守するアカウントと説明した[5]。SafeDepの見方では、3版の出方は保守者の不正ではなく認証情報の侵害を示す型である[5]。
Upwindの調査と各社の留保
Upwindは、マルウェアやCIの侵害ではなく、期限切れの保守者のメールのドメインの乗っ取りが起点だと強く示唆されるとした[3]。Upwindの調査では、ドメインatlantis-software.netは期限切れとなり、5月7日に攻撃者がNamecheapで再登録した[3]。攻撃者はNamecheap PrivateEmailでメールの基盤を設定して元の保守者の受信箱を事実上手に入れ、npmの正規のパスワード再設定の手順でアカウントを奪えたとUpwindは説明した[3]。3版には対応するGitのタグもGitHubのコミットも無く、不正なnode-ipc.cjsは公開リポジトリのどこにも無かった[3]。
The Hacker Newsは、Permiso SecurityのCTOのXの投稿として、このドメインが2025年1月10日に期限切れとなっていたと報じた[9]。Snykは、ドメインの再登録は根本原因の手がかりで、完全な証明ではないとした[6]。Snykは同じ報告で、正規の保守者アカウントの悪用が関わった可能性を挙げ、それはnpmのレジストリそのものの侵害が必要なかったことを示すとした[6]。
2022年の別の事象では、作者が10.1.1・10.1.2に悪性のコードを入れ、10.1.3でそのコードを除いた[10]。この事象の記録はCVE-2022-23812である[10]。StepSecurityは、2022年の事象は別の攻撃で、行為者も別だとした[2]。
関係者の対応
Semgrepは、不正な版が約2時間入手できる状態だったと報告した[12]。レジストリの記録では、保守者はriaevangelistの1アカウントだけで、latestのタグは14.0.0を指している[1]。
StepSecurityは、9.xの利用者には9.2.1、12.xの利用者には12.0.0に固定するよう勧めた[2]。3版のどれかを入れた環境については、その時点の認証情報・トークン・秘密情報をすべて漏れたものとみなし、送出の確認を待たずに交換するよう求めている[2]。GitHubはOSVに取り込まれた記録で、この版を入れた計算機は完全に侵害されたとみなし、別の計算機から秘密情報と鍵を直ちに交換するよう求めた[8]。
未公表の事項
- atiertantのアカウントが使われた経路についての作者とnpmの説明
- 3版がダウンロード・実行された環境の数と、送出の成否
- 攻撃者と帰属
- 12.0.1の実行条件のハッシュが指す事業・開発者
- npmのレジストリから3版を消した日時と、消した主体
注
出典
当事者
- [1]GitHub, Inc.『node-ipc のパッケージ記録(レジストリ API の JSON)』(2014年2月22日公開、2026年8月24日更新)
調査・観測
- [2]StepSecurity, Inc.『Active Supply Chain Attack: Malicious node-ipc Versions Published to npm』(2026年5月14日公開)
- [3]Upwind Security『The Supply Chain Strikes Again: Credential-Stealing Malware Hidden in node-ipc』(2026年5月14日公開、2026年7月10日更新)
- [4]Datadog, Inc.『Backdoored node-ipc npm releases steal developer credentials through DNS queries』(2026年5月14日公開)
- [5]SafeDep『Compromised node-ipc on npm: Credential Stealer via DNS Exfiltration』(2026年5月14日公開)
- [6]Snyk Ltd.『Malicious node-ipc versions published to npm in suspected maintainer account compromise』(2026年5月15日公開)
- [7]Snyk Ltd.『Embedded Malicious Code Affecting node-ipc package(SNYK-JS-NODEIPC-16697063)』(2026年5月15日公開)
- [8]OSV『MAL-2026-3744: Malicious code in node-ipc (npm)』(2026年5月14日公開、2026年5月29日更新)
- [11]Chainguard, Inc.『Node-ipc compromised: Credential stealer targets package with 500k+ weekly downloads』(2026年5月14日公開)
- [12]Semgrep, Inc.『Not Your IPC, but node-ipc: npm Hit Again with Supply Chain Attack (But This Time It's Not a Worm)』(2026年5月14日公開)
報道機関
- [9]The Hacker News『Stealer Backdoor Found in 3 Node-IPC Versions Targeting Developer Secrets』(2026年5月14日公開)
背景資料
- [10]OSV『GHSA-97m3-w2cp-4xx6: Embedded Malicious Code in node-ipc(CVE-2022-23812)』(2022年3月16日公開)
更新記録
- 2026年5月21日:公開した。
- 2026年5月29日:OSVの記録の5月29日の更新(出典8)で取り込まれたGitHub Advisory Databaseの記録を、「時系列」と「関係者の対応」に加えた。
- 2026年7月10日:Upwind Securityの報告の7月10日の更新版(出典3)で、保守者のメールのドメインの説明を「根拠と範囲」に、C2の基盤の稼働の報告を「報告の内容」に改めた。
- 2026年8月24日:npmのレジストリの記録の8月24日の更新(出典1)で、14.0.0の公開を「時系列」に加え、リードの最後の文と「関係者の対応」のレジストリの記録の説明を改めた。
