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

【ITニュース解説】“I Got Pwned”: npm maintainer of Chalk & Debug speaks on the massive supply-chain attack

2025年09月13日に「Reddit /r/programming」が公開したITニュース「“I Got Pwned”: npm maintainer of Chalk & Debug speaks on the massive supply-chain attack」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

npm有名ライブラリのメンテナーがフィッシングによりMFA(TOTP)を突破され、サプライチェーン攻撃を受けた。悪意あるパッケージは広範囲に及んだが実害はなかった。フィッシング耐性のあるFIDO2/U2F利用、エコシステム側の対応改善、インシデント発生時の透明な情報開示の重要性を訴える。

ITニュース解説

人気のあるJavaScriptのパッケージ管理ツール「npm」で、大規模なサプライチェーン攻撃が発生した事件があった。この事件では、「Chalk」や「Debug」といった非常に多くの開発者に利用されているオープンソースプロジェクトの管理者(メンテナー)であるJosh氏のアカウントが乗っ取られた。

この攻撃は、非常に巧妙なフィッシング詐欺によって行われた。攻撃者は、npmのログイン画面そっくりの偽サイトを用意し、Josh氏をそこに誘導した。Josh氏が偽サイトでユーザー名とパスワードを入力した際、同時に設定していた多要素認証(MFA)のワンタイムパスワードも奪われてしまった。Josh氏は、時間とともに変わるワンタイムパスワード(TOTP)方式のMFAを設定していたが、この方式は「中間者攻撃(Man-in-the-Middle)」と呼ばれる方法で簡単に突破されてしまうことがある。偽サイトは、Josh氏からパスワードとTOTPを受け取ると、それをすぐに本物のnpmサイトに転送して認証を完了させ、彼のセッションを乗っ取ったのだ。Josh氏は、この経験から、フィッシング攻撃に強い「FIDO2/U2F」のような認証方法を使っていなかったことが、自身最大の技術的な失敗だったと後に語っている。このようなフィッシング耐性のあるMFAは、物理的なデバイスを用いるなどして、入力された情報が本物のサイトに送られているか、あるいは特定のドメインからのアクセスであるかを検証するため、偽サイトに情報を入力しても認証が成立しない仕組みになっている。

攻撃者によってJosh氏のアカウントが乗っ取られた結果、「debug」や「chalk」、「error-ex」といった人気パッケージが悪意のあるコードに改ざんされた。セキュリティ研究者が最初にこの異常を発見した時、彼らはJavaScriptエコシステム全体に甚大な影響が及ぶことを直感したという。その懸念は現実となり、後の調査で、世界中のクラウド環境の99%が、少なくとも1つの影響を受けたパッケージを使用していたことが判明した。これは、企業が利用するサーバー、開発者のパソコン、そしてソフトウェア開発の自動化プロセス(CI/CD)など、ありとあらゆる場所で、この悪意あるパッケージが実行される可能性があったことを意味する。もし攻撃者のコードが有害なものであれば、データ窃盗、システム破壊、あるいはさらなる攻撃の足がかりとなるなど、計り知れない損害を引き起こす恐れがあった。

幸いにも、この攻撃で配布された悪意あるコードは、目立った有害な動作をしなかった。これが「九死に一生を得た」と表現される所以である。攻撃コードは、わずか2時間の間に250万回もダウンロードされ、Wiz社の分析によれば、分析対象のクラウド環境の10%で、このマルウェアが実際に検出されたという。もし攻撃者がより悪質な意図を持っていたとしたら、その被害は想像を絶するものになっていただろう。今回の件は、攻撃者の手際が悪かったために最悪の事態を免れただけであり、「セキュリティが勝利した」とは決して言えないとJosh氏は強調している。

今回の事件では、npmレジストリを運営する側の対応にも問題があったことが明らかになった。Josh氏のアカウントが乗っ取られ、悪意のあるパッケージが公開されている間、npmの対応は極めて遅く、緊急事態に対する適切なプロセスが機能していなかった。また、これほど多くのユーザーに利用されているにもかかわらず、フィッシング耐性のあるMFA(U2Fなど)の利用を促すような予防的な対策が十分に講じられていなかった点も指摘された。アカウントが乗っ取られたJosh氏には、公開されている問い合わせフォームからチケットを送信すること以外に、緊急時に直接連絡を取る手段がなかったという。これは、オープンソースエコシステムの健全性を維持するためには、プラットフォーム提供者側が、セキュリティ対策や緊急対応プロセスの改善に、より一層力を入れる必要があることを示唆している。

この苦い経験から、Josh氏は他の開発者に向けて重要な教訓を共有した。それは、もし問題が発生したら、オープンに、そして正直に、透明性を持って対応することだという。オープンソースの世界では、脆弱性(人間的な意味での弱さ)を認め、迅速に情報を公開することが、結果として多くの開発者の時間とお金を節約することにつながる。今回のJosh氏の対応は、彼自身がフィッシングに遭ってしまったという事実にもかかわらず、誠実かつ透明性のある情報公開を行ったことで、インターネットコミュニティから広く支持された。この事件は、技術的なセキュリティ対策だけでなく、人間的な対応の重要性も浮き彫りにしたと言えるだろう。

関連コンテンツ

関連IT用語