【ITニュース解説】Hackers hijack npm packages with 2 billion weekly downloads in supply chain attack
2025年09月09日に「BleepingComputer」が公開したITニュース「Hackers hijack npm packages with 2 billion weekly downloads in supply chain attack」について初心者にもわかりやすく解説しています。
ITニュース概要
攻撃者が、週20億回以上ダウンロードされる人気のnpmパッケージにマルウェアを注入した。開発者のアカウントがフィッシング攻撃で乗っ取られたのが原因だ。これはソフトウェアの部品を汚染して被害を広げる「サプライチェーン攻撃」の一種である。
ITニュース解説
ソフトウェア開発の世界で、開発者が利用する基本的なツールが悪用され、広範囲に影響を及ぼすセキュリティインシデントが発生した。これは「サプライチェーン攻撃」と呼ばれる手法によるもので、週に合計で20億回以上もダウンロードされる非常に人気の高いプログラム部品が標的となった。この事件は、現代のソフトウェア開発が持つ構造的なリスクを浮き彫りにするものであり、システムエンジニアを目指す者にとって重要な教訓を含んでいる。
この事件を理解するためには、まず「npm」と「パッケージ」という概念を知る必要がある。npm(Node Package Manager)は、プログラミング言語JavaScriptの実行環境であるNode.jsで利用されるパッケージ管理システムだ。ソフトウェア開発、特にウェブアプリケーションの開発では、必要な機能をすべて一から自分で作ることは稀であり、多くの場合、他の開発者が作成して公開している便利な機能の集合体、すなわち「パッケージ」を組み合わせて利用する。npmは、このパッケージを簡単に探し、自分のプロジェクトに導入(インストール)し、管理するためのツールである。世界中の開発者が作成した無数のパッケージがnpmの公開リポジトリに登録されており、開発者はこれらを利用することで、車輪の再発明を避けて効率的に開発を進めることができる。
今回の攻撃は「サプライチェーン攻撃」に分類される。製造業におけるサプライチェーン(供給網)が、部品の調達から加工、組み立て、販売までの一連の流れを指すように、ITにおけるサプライチェーンは、ソフトウェアが完成してユーザーに届くまでの開発プロセス全体を指す。サプライチェーン攻撃とは、最終的な製品であるアプリケーションそのものを直接狙うのではなく、その製品を構成する部品、つまり開発過程で利用されるライブラリやツールに悪意のあるコードを仕込む攻撃手法である。部品が汚染されれば、その部品を利用して作られるすべての製品が影響を受けることになる。今回の事件では、多くの開発者が信頼して利用するnpmパッケージがその「部品」にあたる。
事件の経緯は次の通りである。まず、攻撃者は特定の人気npmパッケージを管理する開発者(メンテナンス担当者)のアカウントを乗っ取ることを計画した。そのために「フィッシング攻撃」を仕掛けた。フィッシング攻撃とは、偽のウェブサイトやメールを使って標的を騙し、アカウントのIDやパスワードといった認証情報を盗み出す手口である。この攻撃によってメンテナンス担当者のアカウント情報を窃取した攻撃者は、そのアカウントに不正にログインし、正規の管理者になりすました。そして、乗っ取った権限を悪用し、自身が管理する非常に人気の高い複数のパッケージに、マルウェアとして機能する悪意のあるコードを密かに埋め込んだ。その後、この汚染されたパッケージを新しいバージョンとしてnpmの公開リポジトリにアップロードした。
この攻撃が極めて深刻なのは、標的となったパッケージが世界中の開発者に広く利用されていた点にある。開発者たちは、npmからパッケージをインストールする際、それが信頼できるものだと信じている。そのため、悪意のあるコードが仕込まれているとは知らずに、汚染された新しいバージョンを自身のプロジェクトに導入してしまった。その結果、マルウェアは個々の開発者のコンピュータだけでなく、その開発者が開発しているアプリケーションやサービスにも組み込まれ、被害が連鎖的に拡大する事態となった。一つのパッケージが汚染されただけで、それを利用する数え切れないほどのソフトウェアプロジェクト、ひいてはその先のユーザーにまで脅威が及ぶ可能性がある。これは、開発者間の信頼関係を基盤とするオープンソースのエコシステム全体を揺るがす深刻な問題である。
この事件から、システムエンジニアを目指す者は多くの教訓を学ぶことができる。第一に、自身が開発するソフトウェアがどのような外部のパッケージに依存しているか、その「依存関係」を正確に把握し、管理することの重要性である。利用しているパッケージに脆弱性や悪意のあるコードが含まれていないか、定期的にチェックする習慣が求められる。第二に、意図しないパッケージの更新を防ぐ仕組みの活用である。package-lock.jsonやyarn.lockといったロックファイルを使えば、プロジェクトで利用するパッケージのバージョンを固定できる。これにより、開発者の知らないうちに汚染された最新バージョンが自動的にインストールされるリスクを大幅に低減できる。第三に、基本的なセキュリティ対策の徹底である。今回の事件の発端は、メンテナンス担当者のアカウントが乗っ取られたことであった。もし、アカウントに多要素認証(MFA)が設定されていれば、パスワードが盗まれたとしても不正ログインを防げた可能性が高い。開発者自身が、自らのアカウントを堅牢に保護することは、自身だけでなくコミュニティ全体を守るための責務と言える。ソフトウェア開発の効率性を支えるエコシステムの利便性を享受する一方で、その裏に潜むリスクを常に認識し、セキュリティを意識した開発を心がけることが、すべてのエンジニアに求められている。