Trusted Source
数日前、axiosが汚染された。週間7000万ダウンロードのHTTPクライアント。北朝鮮の攻撃グループがメンテナーにTelegramで接触し、暗号通貨企業CEOのディープフェイク動画で信用させ、トロイの木馬を踏ませてnpmアカウントを奪った。悪意あるバージョンが公開されていたのは約3時間。その3時間で、RATが世界中の開発マシンに配布された。
npmのサプライチェーンが壊れたのは、これが初めてではない。
2016年、left-padという11行のパッケージが消えた。npm社との揉め事に怒った作者が、自分の全パッケージを引き上げた。文字列の左側をスペースで埋めるだけの関数。それに依存していたBabelが壊れ、Babelに依存していたReactが壊れ、Reactに依存していた無数のプロジェクトが壊れた。攻撃ですらない。ひとりの開発者が自分のコードを持って帰っただけだ。
2018年にはevent-streamのメンテナーが燃え尽きた。そこに善意を装った人物が現れ、引き継ぎを申し出た。メンテナーは喜んでpublish権限を渡した。数ヶ月後、Bitcoinウォレットの秘密鍵を盗むコードが静かに注入されていた。
以後、npmのサプライチェーントラブルは定期的に起きている。外からはアカウント乗っ取りによるマルウェア配布。内からは、無償労働に疲れた作者自身がパッケージを破壊する抗議。脅威の性質はまるで違うが、根っこにあるのは同じ構造だ。数千万のプロジェクトが、個人が管理するパッケージに依存している。その個人が騙されるか、怒るかすれば、依存ツリーの末端まで毒が回る。
npmの依存文化を一方的に批判する気はない。小さな関数を共有する仕組みは合理的だし、あの生産性はこの構造なしには成り立たない。ただ、node_modulesの中身をすべて読んでいる開発者はいない。npm installを叩くたびに、わたしたちは見知らぬ誰かを信用している。
axiosの件で新しかったのは、ディープフェイクだ。event-streamの頃は「いい人のふりをする」で十分だった。8年後、攻撃者はAIで実在する人間の映像を偽造し、国家の支援を受けてメンテナーひとりを狙い撃ちにした。信用の偽造コストが、劇的に下がっている。