世界を動かす技術を、日本語で。

NPMのdebugおよびchalkパッケージが侵害されました

2025年9月9日原文(aikido.dev)

概要

  • 2025年9月8日、 npmの人気パッケージ18種 に悪意あるコードが含まれるアップデートが公開
  • これらのパッケージは 週20億回以上ダウンロード されている
  • 悪意あるコードは Web3/暗号資産の操作を乗っ取り、送金先を書き換え
  • ユーザーに気付かれずに 資金や承認が攻撃者に転送
  • Aikido safe-chain などの安全対策の重要性

npm人気パッケージ大量感染事件の概要

  • 2025年9月8日13:16 UTC、 Aikido intel feed がnpm上の異常なパッケージ更新を検知
  • 対象となったパッケージは以下の通り
    • backslash (週26万DL)
    • chalk-template (週390万DL)
    • supports-hyperlinks (週1,920万DL)
    • has-ansi (週1,210万DL)
    • simple-swizzle (週2,626万DL)
    • color-string (週2,748万DL)
    • error-ex (週4,717万DL)
    • color-name (週1億9,171万DL)
    • is-arrayish (週7,380万DL)
    • slice-ansi (週5,980万DL)
    • color-convert (週1億9,350万DL)
    • wrap-ansi (週1億9,799万DL)
    • ansi-regex (週2億4,364万DL)
    • supports-color (週2億8,710万DL)
    • strip-ansi (週2億6,117万DL)
    • chalk (週2億9,999万DL)
    • debug (週3億5,760万DL)
    • ansi-styles (週3億7,141万DL)
  • 合計で 週20億回以上のダウンロード数、広範囲に影響

攻撃の詳細

  • 該当パッケージの index.js など主要ファイルに 難読化された悪意あるコード を追加
    • 例: is-arrayish のindex.jsが改ざん
  • このコードは Webブラウザ内で実行 される
    • ユーザーが暗号資産やWeb3関連の操作を行う際に発動
    • walletの操作や送金先アドレスを攻撃者のものに書き換え
    • 資金や承認が気付かれずに盗み取られる

悪意あるコードの挙動

  • window.ethereum が存在する場合、アカウント取得APIを呼び出し
  • アカウントが存在すれば runmask 等の関数で乗っ取り処理
  • 送金先や承認先のアドレスを 攻撃者の管理するアドレスへ上書き
  • 多数の アドレスリスト(BTC, ETH, 他) がコード内に埋め込まれている

影響範囲

  • 影響を受けたパッケージは Node.js/JavaScriptエコシステムの基盤的存在
    • 多くのプロジェクトやWebサービスが間接的に依存
  • Web3/暗号資産関連のサービス利用者 が特に危険
  • 被害は 資金流出や不正承認 など、直接的な金銭被害に直結

被害を防ぐための対策

  • Aikido safe-chain などの 依存パッケージの安全性検証ツール の活用
  • パッケージの 更新前に公式リポジトリやコード差分の確認
  • npm install時の自動スキャンや監視ツール の導入
  • 依存パッケージのロックファイル(package-lock.json等)の厳守
  • 怪しい挙動や不審なアップデートを検知した場合は 即時利用停止と報告

総括

  • npmエコシステムの信頼性 が大きく揺らぐ重大事件
  • 自動化された監視・スキャン体制 の構築が今後さらに重要
  • ユーザー自身によるセキュリティ意識の向上 も不可欠

Hackerたちの意見

こんにちは、やられちゃったよ。みんなごめん、すごく恥ずかしい。詳しい情報はここね: - https://github.com/chalk/chalk/issues/656 - https://github.com/debug-js/debug/issues/1005#issuecomment-3... 影響を受けたパッケージ(少なくとも俺が知ってるのは): - ansi-styles@6.2.2 - debug@4.4.2(9月8日 18:09 CESTに引き上げられたみたい) - chalk@5.6.1 - supports-color@10.2.1 - strip-ansi@7.1.1 - ansi-regex@6.2.1 - wrap-ansi@9.0.1 - color-convert@3.1.1 - color-name@2.0.1 - is-arrayish@0.3.3 - slice-ansi@7.1.1 - color@5.0.1 - color-string@2.1.1 - simple-swizzle@0.2.3 - supports-hyperlinks@4.1.1 - has-ansi@6.0.1 - chalk-template@1.1.1 - backslash@0.2.1 なんかターゲット攻撃っぽい感じがする。編集期限が切れるまでこのコメントを更新し続けるつもり。 --- Chalkは公開されてるけど、他のはまだ危険な状態(9月8日 17:50 CEST)。NPMからはまだ返事が来てない。俺のNPMアカウントは完全にアクセス不能で、パスワード再設定も機能しない。今は待つしかない。メールはnpmjsのサポートから来たけど、一見すると正当なものに見えた。言い訳するつもりはないけど、長い一週間で、パニックな朝だったから、やることリストの一つを片付けようとしてたんだ。普段なら直接サイトに行くところを、リンクをクリックしちゃったのが間違いだった(モバイルだったから)。影響を受けてるのはNPMだけ。上の/debug-jsリンクに更新を投稿する予定。また、本当にごめん。

誰にでも起こりうることだし、迅速に対応してくれてありがとう。

バカな質問でごめんけど、「2FAリセットメール」についてもう少し詳しく教えてもらえる?みんなが何をしないべきか知りたいんだ。

フィッシングメールには何が書いてあって、クリックしてログインしちゃったの?

誰にでも起こりうることだよね。すぐに反応してくれてありがとう!!

迅速かつ率直に対応してくれてありがとう!

みんなが感謝してるのに同意したい。すぐに認めてくれてありがとう。大学の時に酔っ払ってフィッシングにあったことがあって(かなり前だけど)、誰にでも起こりうることだよね。ただ、NPMが返事をするのが遅いのはちょっと驚きだな。それが攻撃をより儲かるものにするだけのように思える。

sindresorhus から: 依存関係ツリーにマルウェアが含まれているか確認するには、以下を実行してみて: rg -u --max-columns=80 _0x112fa8 ripgrep が必要だよ: brew install rg https://github.com/chalk/chalk/issues/656#issuecomment-32668...

警告してくれてありがとう。ドメインを削除してもらうために、porkbun に悪用メールを送ったよ。

よっ、npm の誰かが simple-swizzle@0.2.3 を今すぐにでも公開解除しなきゃダメだ。まだアクティブに侵害されてるから。

あなたのせいじゃないよ。問題を解決するために投稿してくれてありがとう。誰にでも起こり得ることだからね。だからこそ、AI モデルを使って防御を強化するべきなんだ。もしこのコメントを読んでいる人がそのフィッシングメールのソースを見て怪しいと思ったら、AI モデルもそう思えるはずだよ --- おそらくローカルのモデルでもね。こういうことを検出するために、すべてのメールをプライバシーを守るモデルに通すべきだよ。古い脆弱性スキャナーのファミリーはもう機能してない。

npmエコシステムの外から見ると、このパッケージのリストには驚かされる。なんでJSの人たちはちょっとしたことでも他の人のnpmモジュールをインポートするの?

Hacker Newsで議論の続きを見る