急拡大するサプライチェーン攻撃 ― Bun 偽装マルウェアが JavaScript 界隈を揺らす
ここ最近、JavaScript の開発者コミュニティで大きな話題になっているのが、
「Bun のセットアップを装ったマルウェア」 による大規模な感染です。
調査機関の報告によると、感染した NPM パッケージは 1,000 件を超え、
GitHub 上では 2 万件以上のリポジトリ で不審なコードの混入が確認されています。
短時間でここまで拡大した背景には、
“自己増殖型” の挙動を持つ特殊なマルウェア が存在していることが分かっています。
仕組みはシンプルなのに強力 ― 「Bun のインストール」を装う
今回問題となったパッケージには、インストール時に自動実行される以下のようなスクリプトが含まれていました。
"preinstall": "node setup_bun.js"
パッと見ると「Bun のセットアップだな」と思ってしまうのですが、
実際には 難読化された不正スクリプトの呼び出し になっています。
このスクリプトが行うことは主に 3 つです:
- PC や Git 上の 環境変数・アクセスキーの収集
- 不正な JavaScript ファイルを ローカル環境に常駐
- 盗んだトークンを使って 他の NPM パッケージへ感染を拡散
特に最後の「勝手に他のパッケージを再公開して感染させる」という動作が、
今回の“爆発的な拡散”の原因になっています。
GitHub Actions にも忍び込む ― CI/CD まで汚染される
より厄介なのは、感染が ローカル環境だけにとどまらない という点です。
感染したプロジェクトでは、以下のような
“見覚えのない GitHub Actions の YAML ファイル” が生成されていました。
.github/workflows/update_formatter_XXXX.yml
このワークフローは、
ビルド時に秘密情報を収集し、外部へ送信する役割を持っています。
つまり、
- 開発 PC
- Git リポジトリ
- CI/CD(GitHub Actions)
の 三段階で情報が抜かれる可能性 があるということです。
これは近年のサプライチェーン攻撃の中でも特に深刻なケースだと警告されています。
なぜ今回の件が “歴史的規模” と呼ばれているのか
今回の事件が大きな注目を集めている理由は、単に感染数が多いからではありません。
- 感染パッケージ:1,000以上
- 感染リポジトリ:27,000以上
- 拡散速度:数時間で指数関数的に増殖
- 標的:あらゆる JavaScript 開発者
さらに、NPM や GitHub といった “ソフトウェア供給の基盤” そのものが狙われています。
これは、個人開発者だけではなく企業のプロジェクトにも
影響が波及する可能性があるという点で非常に危険です。
私たちが今すぐできる対策
以下は、今回のような攻撃に対して 最低限やっておくべき対策 です。
1. 疑わしい NPM パッケージを全面チェック
package.json / package-lock.json の依存関係を確認。
2. キャッシュをクリアして再インストール
npm cache clean --force
rm -rf node_modules
npm install
3. すべての Secrets をローテーション
NPM トークン、GitHub トークン、AWS/GCP/Azure など。
4. GitHub Actions の監査
.github/workflows 内に不審なファイルがないかチェック。
5. 依存関係を最小化し、自動更新をやめる
便利な反面、攻撃の侵入口が増えます。
まとめ:便利さに依存しすぎる開発スタイルの“揺り戻し”
開発者にとって NPM は欠かせない存在ですが、
今回の件は 「便利さとリスクはセット」 であることを改めて突きつけた事件と言えます。
- 何を入れているのか
- いつ更新されたのか
- 誰が管理しているのか
このあたりを意識せずにパッケージを入れ続けていると、
今回のような “供給網まるごと感染” の危険性が高まります。
これを機に、依存管理や CI のセキュリティを
一度見直してみる価値は大いにあるはずです。
参考資料
Fake Bun runtime infects over 1,000 NPM packages and 27,000 Github repositories with malware in just a few hoursThe news blog specialized in Japanese culture, odd news, gadgets and all other funny stuffs. Updated everyday.


