npmパッケージnode-ipcへの認証情報窃取コードの混入

カテゴリ
マルウェア
目次
  1. 報告の内容
    1. 集める認証情報の範囲
    2. 12.0.1の実行条件
    3. DNSを使う送出の経路
  2. 時系列
  3. 根拠と範囲
    1. Upwindの調査と各社の留保
  4. 関係者の対応
  5. 未公表の事項
  6. 注
  7. 出典
  8. 更新記録
  9. 関連記事

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年8月12日riaevangelist12.0.0を公開した⁠[1]
2026年5月14日7時26分-azurestaticprovider.netがNICENICで登録された(時刻は協定世界時)⁠[3]
2026年5月14日14時25分〜14日14時26分-12.0.1・9.2.3・9.1.6がnpmに公開された(時刻は協定世界時)⁠[1]
2026年5月14日StepSecurity・Upwind・Datadog・SafeDep・Chainguard・Semgrep分析を公開した⁠[2、3、4、5、11、12]
2026年5月14日16時53分OSVMAL-2026-3744を公開した(時刻は協定世界時)⁠[8]
2026年5月15日Snyk報告とアドバイザリSNYK-JS-NODEIPC-16697063を公開した⁠[6、7]
2026年5月29日-GitHub Advisory DatabaseのGHSA-pvh2-rg5g-69v7の記録がOSVに取り込まれた⁠[8]
2026年8月24日riaevangelist14.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]。

  • Snykはアドバイザリで、CVSS 4.0の値を9.3(critical)とし、攻撃の試みか成功の報告があるとしてExploit MaturityをAttackedにした⁠[7]。
  • Snykは報告で、根本原因の調査は続いているとした⁠[6]。
  • Chainguardは、自社の顧客は影響を受けなかったとし、不正な版を遮断の一覧に加えた⁠[11]。
  • Semgrepは、アドバイザリと検出の規則を用意した⁠[12]。

目次へ

未公表の事項

  • atiertantのアカウントが使われた経路についての作者とnpmの説明
  • 3版がダウンロード・実行された環境の数と、送出の成否
  • 攻撃者と帰属
  • 12.0.1の実行条件のハッシュが指す事業・開発者
  • npmのレジストリから3版を消した日時と、消した主体

注

  • 〔注1〕週あたりのダウンロード数を、StepSecurityは1,000万回超とした⁠[2]。SafeDepは82万2,000回、Chainguardは50万回超とした⁠[5、11]。
  • 〔注2〕SafeDepは、対象を100種を超える機密ファイルとした⁠[5]。対象のパスの型はLinuxで113、macOSで127とした⁠[5]。

出典

当事者

調査・観測

報道機関

背景資料

更新記録

  • 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の公開を「時系列」に加え、リードの最後の文と「関係者の対応」のレジストリの記録の説明を改めた。

目次へ