2025年9月8日13:00 UTC頃、JavaScriptパッケージ管理システムnpmで史上最大規模の供給チェーン攻撃が発生した。
攻撃者はオープンソース開発者Josh Junon(通称Qix-)のアカウントを9月4日に登録されたフィッシングドメイン「npmjs.help」を使用して乗っ取った。
攻撃により、debug(週間357.6百万ダウンロード)、chalk(300百万)、ansi-styles(371.4百万)、supports-color(287.1百万)、strip-ansi(261.2百万)、ansi-regex(243.6百万)、wrap-ansi(198百万)、color-convert(193.5百万)、error-ex(47.2百万)を含む18個の主要パッケージが侵害された。
これらのパッケージの合計ダウンロード数は週間26億を超える。注入された悪意のあるコードは、Bitcoin、Ethereum、Solana、Tron、Litecoin、Bitcoin Cashなど複数の暗号通貨ウォレットアドレスの置換と、MetaMaskやPhantomなどのブラウザ拡張機能を通じた取引ハイジャックを実行した。
Aikido Securityが13:16 UTCの最初の悪意のあるパッケージ公開から5分以内に攻撃を検出し、14:16 UTCに公開警告を発した。
【編集部解説】
今回のnpmサプライチェーン攻撃は、単なる技術的な侵害事案を超えて、現代のソフトウェア開発における根本的な脆弱性を浮き彫りにしました。週間26億を超えるダウンロード数を持つパッケージが一度に侵害されたという規模の大きさもさることながら、この事件が示すのは「信頼」という概念の危うさです。
最も注目すべきは、攻撃の起点がフィッシングメールという古典的な手法だったことです。Josh Junonは二要素認証を設定していたにもかかわらず、9月4日に登録された「npmjs.help」という巧妙に偽装されたサポートドメインからのメールに騙されてしまいました。これは、現在の認証システムが根本的にフィッシング攻撃に対して脆弱であることを示しています。
この攻撃が特に悪質だったのは、JavaScriptエコシステムの基盤となるユーティリティパッケージを標的としたことです。chalk、debug、ansi-stylesなどは、直接的には地味な機能を提供するパッケージですが、数え切れないほどのプロジェクトで間接的に使用されています。攻撃者はこの「推移的依存関係」の仕組みを悪用し、最小限の労力で最大限の影響を与えることに成功しました。
注入されたマルウェアの技術的洗練度も注目に値します。コードはブラウザ環境でのみ動作するよう設計されており、サーバーサイドのNode.js環境では検出を回避するため実行されませんでした。これにより、多くのCI/CDパイプラインでの自動検査をすり抜けることができました。しかし皮肉なことに、この回避技術自体が検出の手がかりとなり、ビルドエラーから攻撃が発覚する結果となりました。
暗号通貨を標的とした点も現代の脅威の特徴を表しています。従来のマルウェアが個人情報の窃取やシステム破壊を目的としていたのに対し、この攻撃は明確に経済的利益を追求していました。幸い、Arkhamの調査によると実際の被害額は約503ドルに留まりましたが、これは迅速な対応によるところが大きく、もし発見が遅れていれば被害は甚大になっていた可能性があります。
一方で、オープンソースコミュニティの迅速な対応は称賛に値します。Aikido Securityが13:16 UTCの最初の悪意のあるパッケージ公開から5分以内に検出し、約2時間後には対策が開始されました。Josh Junon自身も、恥を忍んで即座に状況を公開し、透明性の高い対応を取りました。これは、オープンソースエコシステムの自浄作用の強さを物語っています。
この事件は、2025年がサプライチェーン攻撃の「エピデミック」年であることも示しています。ReversingLabsの調査では、2024年の暗号通貨関連攻撃23件中14件(61%)がnpmを標的としており、過去3年間でサプライチェーン攻撃が742%増加しています。今回の攻撃は、この増加傾向の延長線上にある事件と言えるでしょう。
最終的に、この事件が示すのは、現代のソフトウェア開発における「相互依存」の現実です。単一の開発者のアカウント侵害が、世界中の何百万ものアプリケーションに影響を与える可能性がある以上、セキュリティは個人の責任を超えた、エコシステム全体の課題となっています。今こそ、技術的な対策と人的な教育の両面から、より強固な供給チェーンセキュリティの構築に取り組む時なのです。
【用語解説】
npm(Node Package Manager)
JavaScript/Node.jsのパッケージ管理システム。世界最大のソフトウェアレジストリで、200万を超えるパッケージが登録されている。開発者がライブラリやツールを簡単に共有・利用できる仕組みを提供する。
供給チェーン攻撃(サプライチェーン攻撃)
ソフトウェアの開発・配布プロセスを悪用して、正当なソフトウェアに悪意のあるコードを混入させる攻撃手法。標的となる組織を直接狙わず、その組織が使用するソフトウェア提供者を経由して攻撃する。
フィッシング攻撃
正当な組織や人物になりすましたメールやウェブサイトを使用して、ユーザーの認証情報や個人情報を詐取する攻撃手法。今回は9月4日に登録された偽の「npmjs.help」ドメインが使用された。
二要素認証(2FA)
パスワードに加えて追加の認証要素(SMSコード、アプリ生成コードなど)を要求するセキュリティ機能。しかし、フィッシング攻撃により迂回される可能性がある。
推移的依存関係
あるパッケージが依存する別のパッケージが、さらに他のパッケージに依存している関係。開発者が直接インストールしていないパッケージでも、間接的に利用されることになる。
CI/CD(継続的インテグレーション/継続的デリバリー)
ソフトウェアの開発からデプロイまでを自動化するプラクティス。コードの変更が自動的にテスト・ビルド・デプロイされる仕組み。
【参考リンク】
npm公式サイト(外部)
世界最大のJavaScriptパッケージレジストリ。1700万人以上の開発者が利用し、200万を超えるパッケージが登録されている。
Aikido Security(外部)
ベルギー発のオールインワンセキュリティプラットフォーム。今回の攻撃を最初に検出したセキュリティ企業。
Josh JunonのGitHubプロファイル(外部)
今回攻撃を受けた開発者。chalk、debugなど人気パッケージのメンテナーとして活動している。
Node.js公式サイト(外部)
JavaScriptのランタイム環境。npmはNode.jsと一緒にインストールされる標準のパッケージマネージャー。
【参考記事】
The Great NPM Heist – September 2025(外部)
CheckPointによる攻撃の詳細分析。技術的な攻撃手法とマルウェアの動作メカニズムについて包括的に解説。
Open Source Community Thwarts Massive npm Supply(外部)
情報セキュリティマガジンによる速報記事。Josh Junonの貢献実績と影響を受けた主要パッケージの詳細を報告。
npm debug and chalk packages compromised(外部)
攻撃を最初に検出したAikido Securityによる公式レポート。検出から5分以内での警告発信の経緯を詳述。
18 Popular Code Packages Hacked, Rigged to Steal Crypto(外部)
セキュリティジャーナリストBrian Krebsによる分析記事。攻撃の背景にある暗号通貨盗難の動機を考察。
【編集部後記】
今回のnpm攻撃で最も印象深かったのは、Josh Junonさんがアカウント侵害後に「とても恥ずかしい」と素直に謝罪されたことでした。どんなに熟練した開発者でも、疲れている時にフィッシングメールに騙されてしまう現実を目の当たりにしています。幸い実際の被害額は503ドル程度に留まりましたが、これは迅速な対応があってこその結果でした。
みなさんは普段、依存関係の更新をどのように管理されていますか?自動更新の便利さと、こうしたリスクのバランスをどう取るべきか、一緒に考えてみませんか?また、過去3年間で742%も増加しているサプライチェーン攻撃に対して、どのような新しい防御策が必要だと思われますか?SNSでぜひお聞かせください。私たちも皆様と一緒に学んでいきたいと思います。