見出し画像

週1億DLのライブラリに毒が仕込まれた 2026年春の現実

最近、npm install が怖くなった。

AIにコードを書いてもらって、「じゃあこのライブラリも入れておいて」とお願いする。そんな日常が、実は情報漏洩の入口になっているかもしれない、と知ったから。

2026年の春、週1億回ダウンロードされていた超有名ライブラリに「毒」が仕込まれた。ターゲットは特別な人じゃない。普通に npm install した人たち全員だった。

AIでコードを書いている人、特にバイブコーダーと呼ばれるような「AIに任せながらアプリを作っている人」には、ぜひ読んでほしい。


1. そもそも「ライブラリ」ってなんだっけ

まず前提から整理させてほしい。

プログラムを作るとき、全部を一から書くことはほとんどない。誰かが作った便利な部品を組み合わせて、アプリを作るのが普通だ。

この「部品」のことをライブラリとかパッケージと呼ぶ。

たとえば、日時を扱う処理、ファイルの読み書き、API との通信、画像の変換……こういった機能は、自分で書かなくても誰かが公開しているライブラリを使えば一瞬で実装できる。

JavaScript(Node.js)なら npm install パッケージ名、Python なら pip install パッケージ名 というコマンドを打てば、インターネットから自動でダウンロードして使えるようになる仕組みだ。

AIにコードを書いてもらうと、たいてい「このライブラリを使います」と言いながら npm install ○○ を実行してくれる。何気なくやっているこの操作が、今回の話の核心になる。

2. 「インストール」が「コード実行」である件

ここが一番伝えたいところだ。

npm install axios と打った瞬間、あなたはソフトウェアをダウンロードしているだけじゃない。

npmパッケージには「インストールしたときに自動実行されるスクリプト」を仕込める仕組みがある。postinstall というものがそれで、たとえば「インストール後に設定ファイルを自動生成する」といった正当な用途で使われる機能だ。

でもこれを悪用すると、インストールと同時にマルウェアが動く。

ユーザーがやったのは npm install の一行だけ。でも裏では、攻撃者が仕込んだコードが実行されて、パソコンの中のAPIキーや認証トークンが外部に送信される……そういうことが起きる。

アプリのインストールで「このアプリは連絡先にアクセスします」と許可を求められるのと似た話だけど、ライブラリのインストールにはそういった確認画面が存在しない。黙って実行される。

ダウンロード=コード実行

この認識を持っていた人が、世の中にどれだけいるだろう。私はつい最近まで知らなかった。

3. サプライチェーン攻撃とは何か 食品業界で例えると

「サプライチェーン攻撃」という言葉が出てきたので、噛み砕いて説明する。

スーパーで売られている食品を想像してほしい。

あなたはそのスーパーを信頼して食品を買う。スーパーは仕入れ先の卸業者を信頼している。卸業者は農家や工場を信頼している。

このとき、農家の段階で農薬が混入されたとしたら、スーパーにとっても、そこで買うあなたにとっても防ぎようがない。

ソフトウェアの世界でも同じことが起きる。

あなたが使うアプリは → あるライブラリを使っていて → そのライブラリは別のライブラリを使っていて → さらにその奥のどこかに毒が仕込まれている。

自分が直接使っているライブラリだけじゃなく、そのライブラリが依存している部品の部品の部品……まで含めて、全部が攻撃対象になる。これがサプライチェーン攻撃だ。

有名で、大企業が使っていて、何百万人もダウンロードしているライブラリでも、それを作っている人のアカウントが乗っ取られたら、次のバージョンに毒を仕込まれてしまう。

4. 2026年春に何が起きたか

これは「理論上の話」じゃない。

2026年の春、実際にこんなことが起きた。

※ 以下の情報は執筆時点のものです。数字等は公式のセキュリティアドバイザリで最新情報をご確認ください。

axios が感染した

axios というライブラリをご存じだろうか。

HTTPリクエスト(外部のAPIと通信する処理)を簡単に書けるライブラリで、週に1億回以上ダウンロードされている。Webアプリを作っている人なら、ほぼ全員使ったことがあると言っても過言じゃないくらい定番だ。

そのaxiosのメンテナー(管理者)のアカウントが乗っ取られ、新しいバージョンに plain-crypto-js という見慣れない依存ライブラリが追加された。そのライブラリの postinstall スクリプトが、インストール時にマルウェアを実行する。

普通に npm install axios をしただけで、知らない間に感染していた可能性がある。

LiteLLMが感染した

LiteLLM はAIのAPIを統一インターフェースで扱えるライブラリで、AIを使ったアプリを作っている人に特に人気がある(月9500万ダウンロード)。

こちらはPythonのライブラリで、Pythonが起動するたびに自動で読み込まれる .pth ファイルというものに、base64でエンコードされた(=わかりにくく隠された)悪意あるコードが仕込まれていた。

インストールした瞬間ではなく、次にPythonを起動した瞬間からコードが実行されるという巧妙な仕組みだ。

@tanstackが感染した

React を使っている人に馴染み深い @tanstack 系のパッケージ群(週1270万ダウンロード)も侵害された。

この攻撃が特に注目されたのは、セキュリティ認証(SLSA ビルドレベル3)を通過した悪意あるパッケージが初めて登場したからだ。

「認証を受けているから安全」という判断基準すら崩れはじめている。

5. バイブコーダーが特に危ない理由

AIを使ってコードを書く人、いわゆる「バイブコーダー」が今、特にリスクにさらされていると思う。

理由はシンプルで、インストールの頻度と速度が上がっているからだ。

従来の開発では、ライブラリを1つ追加するにも「本当に必要か」「代替はないか」「メンテナンスは続いているか」とある程度考える時間があった。

でも、AIがさらっとコードを書いて「このライブラリを使います」と言ってくれると、そのまま npm install する。そのライブラリがどれくらい古くて、誰がメンテしていて、最近どんな変更があったか、確認する機会がどんどん減っていく。

さらに問題なのは、AIが提案するコードは「動くかどうか」を優先している点だ。セキュリティ的に安全かどうかは、また別の話になる。

攻撃者もこの流れを把握している。新しいバージョンをリリースしてから、自動化されたシステムが取り込むまでの速度を狙っている。悪意あるバージョンを公開して、世界中の npm install が走るまでの時間は、場合によっては数時間しかない。

人間が確認するより速く、悪意あるコードが広がる時代になっている。

6. 今日から意識すること(難しくない)

技術的な詳細は省くけど、考え方として3つ押さえてほしい。

① 新しいバージョンは7日待つ

出たばかりのバージョンはリスクが高い。

攻撃者は「公開直後の数時間〜数日」を狙う。コミュニティが問題を発見して報告し、レジストリが削除するまでに数日かかるからだ。

逆に言えば、7日間誰も騒いでいないバージョンは、それだけ多くの目でチェックされたということになる。

「最新バージョン」より「7日経過済みの安定バージョン」の方が安全、という発想を持っておいてほしい。

実はパッケージマネージャーの pnpm の最新バージョン(11系)は、この「一定期間が経過するまで新バージョンを使わない」設定をデフォルトで持つようになった。世界的にこの考え方が広まっていることの証左だと思う。

② --ignore-scripts を意識する

先ほど説明した postinstall などのスクリプト自動実行は、オプションで無効にできる。

npm install の代わりに npm ci --ignore-scripts を使うと、インストール時のスクリプト自動実行を止められる。

AIにインストールコマンドを書いてもらうとき、このオプションを付けるよう指示するだけで、防御力がかなり上がる。

「AIに任せているから大丈夫」ではなく、「AIに正しい指示を出せているか」の方が大事だと最近思う。

③ AIへの指示にセキュリティルールを追加する

Claude Code や Cursor を使っている人なら、プロジェクトの設定ファイル(CLAUDE.md や .cursorrules)にセキュリティのルールを書いておける。

たとえば

  • 新しいパッケージを入れる前に必ずユーザーに確認する

  • ignore-scripts オプションを使う

  • 出回って7日未満のパッケージは使わない

といった指示を書いておくと、AIがコードを書く際の行動に制約をかけられる。

完璧ではないし、万能でもないけど、何も書かないよりずっと安全だ。

④ ライブラリの「素性」を確認する習慣

AIが「このライブラリを使います」と言ったとき、一度立ち止まって確認してみてほしいことがある。

  • 週ごとのダウンロード数は多いか(多いほど多くの目でチェックされている)

  • GitHubのスター数はあるか(コミュニティに支持されているか)

  • 最後のコミットはいつか(メンテが止まっていないか)

  • リリースしたのはいつか(出たばかりじゃないか)

npm のパッケージページ(npmjs.com)を見れば、ダウンロード数やリポジトリへのリンクはすぐ確認できる。10秒のチェックが、大きなリスクを防ぐことがある。

7. 結局、誰を信頼するか問題

サプライチェーン攻撃の本質は、「信頼していたものが裏切った」という体験だと思う。

有名ライブラリを使うのは、誰かが作ったものを信頼するということ。その信頼の連鎖がどこかで切れたとき、被害はあっという間に広がる。

AIが「このライブラリを使います」と言ったとき、AIも誰かが作ったコードを信頼して提案している。その連鎖の末端に、あなたのパソコンがある。

怖いな、と思った。でも同時に、これは新しい時代の「リテラシー」だとも感じた。

包丁の使い方を知らずに料理しないように、ライブラリのインストールを知らずにバイブコーディングしない。そういう常識が、これから当たり前になっていくんじゃないかと思っている。

難しいことを全部知る必要はない。でも「インストール=コード実行」という一点だけ、頭に入れておいてほしい。

知っているだけで、リスクは大きく変わる。

バイブコーディング、楽しいですよね。私もそっち側の人間です。

AIにお願いして、エラーに絶望して、なんとか動いたときの達成感が好きで続けている。だからこそ、その楽しさを守るために知っておきたいなと思って書きました。

「自分も気にしたことなかった」という方、スキで教えてください。

いいなと思ったら応援しよう!