Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Self-Replicating Worm Hits 180+ npm Packages to Steal Credentials in Latest Supply Chain Attack

2025年09月16日に「The Hacker News」が公開したITニュース「Self-Replicating Worm Hits 180+ npm Packages to Steal Credentials in Latest Supply Chain Attack」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

npmパッケージを狙ったサプライチェーン攻撃が発生した。自己増殖するワームが40以上のパッケージに感染し、認証情報を盗む。パッケージが改ざんされ、悪質なスクリプトが挿入されて再公開されることで被害が拡大する。

ITニュース解説

今回のニュースは、私たちが日々使っているソフトウェアの「材料」とも言える部分が狙われた、非常に巧妙なサイバー攻撃についてだ。システムエンジニアを目指す皆さんは、将来的にソフトウェア開発に深く関わることになるだろう。その時、このような攻撃がどのようにして発生し、どのような影響をもたらすのかを理解しておくことは、非常に重要になる。

まず、今回の攻撃の中心となった「npm」について説明しよう。npmは「Node Package Manager」の略で、JavaScriptのプログラム部品(パッケージ)を管理するためのツールだ。プログラミングでは、ゼロからすべてを作るのではなく、すでに誰かが作って公開してくれている便利な部品を組み合わせて使うことが一般的だ。npmは、そのような部品を簡単に見つけて、自分のプロジェクトに組み込んだり、バージョンを管理したりするのに欠かせない存在だ。世界中の開発者が、npmに自分の作ったパッケージを登録し、他の開発者がそれを利用している。これにより、ソフトウェア開発の効率は飛躍的に向上する。

今回の攻撃は「ソフトウェアサプライチェーン攻撃」と呼ばれるものだ。サプライチェーンとは、製品が消費者の手に届くまでの「供給の連鎖」を意味する。例えば、車を作るには、エンジン部品、タイヤ、電子部品など、様々なサプライヤーから部品を調達して組み立てる。ソフトウェア開発も同じで、私たちが普段使うアプリやシステムは、多数のオープンソースソフトウェアの部品(npmパッケージもその一つだ)を組み合わせて作られている。サプライチェーン攻撃とは、この「部品」のどこかに悪意のあるコードを忍び込ませ、最終的にその部品を使うソフトウェア全体を侵害しようとする攻撃のことだ。もし、車のエンジン部品に不具合があれば、そのエンジンを搭載した車すべてに影響が出るように、ソフトウェアの部品に悪意のあるコードが混入すれば、それを使っているすべてのソフトウェアが危険にさらされることになる。

今回の攻撃では、npmのレジストリ、つまりnpmパッケージが登録されている「中央の倉庫」のような場所が標的となった。サイバーセキュリティの研究者たちが発見したところによると、40以上のnpmパッケージがこの攻撃によって侵害された。これらのパッケージは、それぞれ異なる開発者(メンテナー)によって管理されていたものだ。攻撃の巧妙な点は、その「自己増殖」の仕組みにある。まるでコンピュータウイルスのように、一度感染したパッケージが、他のパッケージに感染を広げていく機能を持っていたのだ。

具体的に何が起こったのか、その詳細を見ていこう。侵害されたnpmパッケージの内部には、「NpmModule.updatePackage」という不審な関数が組み込まれていた。この関数は、以下のような悪意のある一連の動作を実行する。

  1. パッケージのtarballをダウンロード: 攻撃を受けたパッケージが、まず自分のコードの中にある他のパッケージや、自分が更新するはずのターゲットパッケージの「tarball」をダウンロードする。tarballとは、パッケージの中身をまとめた圧縮ファイルのことだ。
  2. package.jsonの変更: 次に、ダウンロードしたパッケージの「package.json」ファイルを変更する。package.jsonは、パッケージの名前、バージョン、依存関係、実行スクリプトなど、そのパッケージの基本的な情報を定義している「設計図」のようなファイルだ。このファイルを変更することで、パッケージの振る舞いを不正に操作できるようになる。
  3. ローカルスクリプト(bundle.js)を注入: そして、最も重要な悪意のあるステップとして、「bundle.js」という名前の不審なスクリプトを、ターゲットパッケージのコード内にこっそりと組み込む。このbundle.jsが、ユーザーの認証情報(IDやパスワードなど)を盗み出すための具体的な命令を含んでいたと考えられている。
  4. アーカイブを再パック: 悪意のあるコードを注入し、package.jsonを変更した後、元のパッケージをもう一度圧縮し直し、「アーカイブ」を作成する。外見上は元のパッケージと変わらないように見せかけるためだ。
  5. 再公開: 最後に、改ざんされたパッケージをnpmレジストリに「再公開」する。これにより、この改ざんされたパッケージが正式なものとして認識され、他の開発者がこのパッケージをインストールすると、知らず知らずのうちに悪意のあるコードが実行されてしまう。そして、この再公開されたパッケージもまた、同じ手順で他のパッケージに感染を広げていく。

このような仕組みによって、攻撃はまるでワームのように自律的に拡散していった。あるパッケージが悪意あるコードを含んだバージョンとして公開されると、それをインストールしたユーザーや、そのパッケージを依存している別のパッケージが次々と感染していくという連鎖反応が起こる。そして、この攻撃の最終的な目的は、ユーザーの認証情報を盗み出すことにある。開発者の認証情報が盗まれれば、さらに多くのパッケージを改ざんしたり、企業のシステムに不正にアクセスしたりする道が開かれてしまう。

この攻撃が非常に危険なのは、開発者が信頼しているはずの「パッケージ」が悪用された点だ。多くの開発者は、npmの公式レジストリにあるパッケージは安全だと信じて利用している。しかし、もしそのパッケージ自体が悪意のあるコードを含んでいたら、開発者は気づかないうちにマルウェアを自分のプロジェクトに組み込んでしまうことになる。そして、そのプロジェクトから作られたソフトウェアを使うエンドユーザーもまた、危険にさらされる。これは、現代のソフトウェア開発において、信頼の基盤が揺るがされる事態と言えるだろう。

システムエンジニアを目指す皆さんがこのニュースから学ぶべきことは多い。まず、ソフトウェアの部品を選ぶ際には、その信頼性を慎重に評価する必要があるということだ。開発者が誰であるか、コミュニティでの評判はどうか、コードが定期的に監査されているかなど、多角的にチェックする習慣をつけることが大切だ。また、セキュリティに関する最新情報を常に追いかけ、脆弱性や攻撃の手法について理解を深める努力も欠かせない。自分の書くコードだけでなく、利用するツールやライブラリにも目を向け、サプライチェーン全体のセキュリティ意識を高めることが、将来的に安全なシステムを構築するための第一歩となる。今回の事件は、ソフトウェア開発におけるセキュリティがいかに複雑で、多層的な対策が必要であるかを改めて示している。

関連コンテンツ

関連IT用語