npm installは博打まじりの祈りになった

【読むのに約 3 分】

Mastraのnpmパッケージが改ざんされ、悪性の依存パッケージが混入したという記事を見た。GMO Flatt Security Blogの記事によると、mastraおよび@mastra/*の複数パッケージに、easy-day-jsという悪性パッケージが注入されていたらしい。

easy-day-jsはpostinstall hookでC2サーバーからペイロードを取得して実行する。つまり、npm installしただけで、開発環境ローカル上で攻撃者が作ったコードが動く。

ああいやだいやだ。

実は自前AIエージェントを作るときに、Mastraを使うかどうか少し迷った。結局使わずに自前で実装したのだけど、もし使っていたらもろに踏んでいた可能性がある。そう考えると、ちょっと背中が冷える。

もちろん、これはAI開発だけの問題ではない。npmのpostinstallが危ない、依存パッケージが危ない、開発環境が危ない、という話は最近多い。便利な仕組みは、悪意ある人間にとっても便利なのだ。

ただ、Mastraは今のAI開発ブームの中でかなり狙われやすいものなんじゃないだろうか。ちょっとカスタムした自前のAIエージェントを作ってみようという人が触りそうで、導入も速く、周辺パッケージも多い。今まさに人が集まっている場所に、ちゃんと罠が置かれた感じがある。嫌な意味で筋がいい。

昔は、Macはウイルスに狙われにくくて楽だよね、とか、Linuxサーバーはまあ大丈夫でしょ、みたいな空気があった。少なくともWindowsよりは安全そう、みたいな雑な安心感があった。

でも今は違う。開発者のMacやLinux環境こそ、ものすごくおいしい獲物になっている。

ローカルには.envがある。SSH鍵がある。GitHubの認証情報がある。npmのトークンがある。AWSやGCPの認証情報がある。OpenAI、Anthropic、Google、その他いろいろなAI系APIキーもある。SlackやMCPのトークンもあるかもしれない。

つまり開発環境は、作業場所であると同時に、認証情報の保管庫でもある。そこにnpm install一発で知らないコードが走る。考えれば考えるほど、だいぶ嫌な仕組みである。

AI系APIキーを盗まれたら、そのキーを使って高価なモデルを叩かれまくる可能性がある。並列で回されたら、短時間で何十万円、何百万円という請求になってもおかしくない。自分が寝ている間に、自分の財布で誰かがAIを全力疾走させる。

AWSやGCPのキーを取られたら、さらに話が大きくなる。GPUインスタンスを大量に立てられて高額請求が発生するかもしれない。ストレージやDBの中身を抜かれるかもしれない。CI/CDや既存のサーバーを経由して、さらに別の認証情報を取られるかもしれない。

そのクラウド環境を踏み台にして、他のサーバーやサービスへの攻撃に使われる可能性もある。そうなると、お金だけの問題では済まなくなるかもしれない。ログ上は自分のアカウントから攻撃が出ている。こちらは被害者なのに、外から見ると加害者に見える。

ちゃんと調べれば、踏み台にされた側だと分かるのかもしれない。でも、本当にすんなりそう扱ってもらえるのか、という不安はある。日本のサイバー犯罪捜査に対して全幅の信頼を置いていない。少なくとも、事情説明に時間を取られる未来はかなり想像できる。

そして今はAIエージェントコーディングの時代でもある。これがまた少し怖い。

人間が一つ一つ依存関係やdiffを見ながら作業しているなら、まだ「なんか知らないパッケージ増えてない?」と気づく機会がある。もちろん人間も普通に見落とす。だが、少なくとも自分の手で作業している感覚はある。

一方で、AIエージェントに「このライブラリを入れて動くようにして」と頼むと、依存パッケージの追加や設定変更が流れ作業になりやすい。動いた。テストも通った。じゃあよし。そうなりがちだ。

細かいpackage.jsonの変化や、postinstall hookの存在や、そこから先の依存パッケージまで、人間がちゃんと見続けるのはかなり難しい。AIが便利になればなるほど、細かい作業を見ないまま受け入れる範囲が広がる。そこに悪性パッケージが混ざると、発見がさらに遅れそうな気がする。

AIエージェントを作るために入れたパッケージで、先に自分の開発環境が誰かのエージェントになってしまう。

うまいことを言ったかな?

npm installは昔から便利だったし、今も便利だ。これなしで現代のJavaScript開発をやるのはつらい。だから使わない、という話にはならない。

ただ、昔よりも開発環境に入っている鍵は増えた。鍵の価値も上がった。AI APIキーのように、盗まれた瞬間に高額請求へ直結するものも増えた。クラウド権限のように、盗まれたあと自分の環境が攻撃インフラになるものもある。

そのうえで、AIエージェントが細かい変更をどんどん処理してくれる。便利だ。とても便利だ。便利すぎて、見えないところが増える。

npm installは、博打まじりの祈りになった。

いや、昔から少し博打だったのかもしれない。ただ最近は、祈る対象と負けたときの金額が増えた。請求書が燃えませんように。クラウドが踏み台になりませんように。AIエージェントが変なものを入れていませんように。

危険が危ない。

View as Markdown · Open in Claude · Open in ChatGPT

npm installは博打まじりの祈りになった