2026年4月22日、Bitwarden公式CLIが94分間だけマルウェアに感染...
あなたは今朝、npm update しましたか?
もしそのリストに @bitwarden/cli があったなら、あなたのSSHキーは今頃どこかのサーバーにある。
大げさに聞こえるかもしれない。でもこれは2026年4月22日、実際に起きたことです。
Bitwarden はパスワードマネージャーの定番です。オープンソースで、企業5万社以上が使い、開発者やシステム管理者に広く信頼されています。そのCLIツール @bitwarden/cli は週間 78,000 ダウンロード。
そのパッケージの 2026.4.0 バージョンが、わずか 94分間だけ悪意あるコードに感染していました。
2026-04-22 (UTC)
─────────────────────────────────────────
22:39 @bitwarden/cli@2026.4.0 公開(マルウェア入り)
「Latest」タグ、自動でnpm updateする全プロジェクトに配信開始
↓
00:13 Bitwarden 検知・unpublish
─────────────────────────────────────────
合計 94分。
たった94分。されど94分。世界中で何千もの npm install / npm update が走るには十分すぎる時間でした。
これは過去の Shai-Hulud 攻撃に続く第三波——Shai-Hulud: The Third Coming と名付けられました。砂漠を支配する『DUNE』の砂虫から取られた名前です。
bw_setup.js(preinstall フック)npm install した瞬間に走ります。
bw1.js を起動Bun を使う理由は、Node.js のセキュリティツールでは検知されにくいから。プロの仕事です。
bw1.js(10MB の難読化ペイロード)ここからが本番。盗み出すリストが、過去のサプライチェーン攻撃と比べて桁違いに広い:
| カテゴリ | 盗まれるもの |
|---|---|
| SSH | ~/.ssh/id_* 秘密鍵 |
| クラウド | AWS / GCP / Azure 認証情報 |
| クラウドシークレット | AWS SSM、Azure Key Vault、GCP Secret Manager の中身 |
| npm | npm 認証トークン |
| Git | Git クレデンシャル |
| 環境変数 | .env ファイル |
| 🆕 AI開発ツール | ~/.claude.json(Claude Code 認証トークン) |
| 🆕 AI開発ツール | ~/.claude/mcp.json、~/.kiro/settings/mcp.json(MCP 設定) |
最後の2つ、注目してください。
Claude Code を使っている開発者の認証情報、MCP サーバーの接続情報まで取られる。
これは2025年までのサプライチェーン攻撃にはなかった視点です。AI時代のマルウェアは、AIツールの設定ファイルそのものを狙う。前回のシャドーAI記事で書いた懸念が、見事に的中しました。
ここが Shai-Hulud の最も怖い部分です。
普通のマルウェアは「盗んで、送って、終わり」。でも Shai-Hulud は違います。自己増殖します。
つまり、感染した開発者のGitHubアカウントで、知らない間に 「Shai-Hulud: The Third Coming」というリポジトリが公開されます。組織メンバーのトークンは暗号化されて秘匿される徹底ぶり。
C2サーバーは audit.checkmarx[.]cx/v1/telemetry(.cx はクリスマス島のTLD、Checkmarx社の名前を悪用)。フォールバックとして GitHub の commit 検索で代替ホスト名を取得する仕組みも組み込まれています。1つのドメインを潰しても止まらない。
ここを強調したい。
過去なら「@bitwarden/cli@2026.4.0 は危険、入れないで」と注意喚起すれば済んだ話。
でも今は:
npm install を勝手に実行するスクリプトを書くnpm update を毎日叩いている人間が「待った」をかける前に、AIが感染を広げる時代です。
94分の侵害ウィンドウの間、AIアシスタントが「最新版に更新しました」と報告した瞬間に、.env、SSH鍵、Claude Code トークン、MCP 設定が外部に流出します。
# 1. 該当バージョンが入っているか確認
npm ls -g @bitwarden/cli
npm ls @bitwarden/cli
# 2. 怪しいプロセスが動いていないか
ps aux | grep -i "bun\|bw1\|bw_setup"
# 3. 知らないGitHubリポジトリが作られていないか
gh repo list --sort created --limit 20
# 4. npm認証トークンを確認
npm token list
もし 2026.4.0 が見つかったら:
# 即座にアンインストール
npm uninstall -g @bitwarden/cli
npm uninstall @bitwarden/cli
# C2サーバーをホスト単位でブロック
echo "127.0.0.1 audit.checkmarx.cx" | sudo tee -a /etc/hosts
# その後、すべてのトークン・認証情報をローテーション
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh
Safe Chain には 48時間ルールがあります。公開から48時間以内のパッケージは自動的に1つ前のバージョンに差し替え。
Shai-Hulud も 94分の侵害ウィンドウだったので、48時間ルールがあれば防げていた。
package-lock.json をコミットする(1分)地味だけど効きます。lockファイルがあれば、npm ci は固定版しか入れない。チームで共有してください。
CLAUDE.md にこれを追記:
## 依存関係のルール
- package.json の依存バージョンを変更する前に、必ず確認を求めること
- npm install / npm update を自動実行しないこと
- 新しい依存パッケージは、公開から48時間以上経過しているか確認すること
これだけで、AI による自動感染リスクが大きく下がります。
# 悪い例(タグは攻撃者が差し替えられる)
- uses: checkmarx/ast-github-action@latest
# 良い例(コミットハッシュは変えられない)
- uses: checkmarx/ast-github-action@a1b2c3d4e5f6789...
今回の攻撃は外部 GitHub Action の侵害が起点でした。全アクションをハッシュで固定するだけで、同種の攻撃への耐性が劇的に上がります。
# 知らないリポジトリが作られていないかチェック
gh repo list --sort created --limit 20
# npm トークンを確認
npm token list
毎週金曜の業務終わりにでも、習慣にしてください。
| やること | 効果 | 時間 |
|---|---|---|
| Safe Chain を入れる | 48時間ルールで新規攻撃をブロック | 5分 |
| package-lock.json をコミット | バージョン固定 | 1分 |
| CLAUDE.md に依存ルール | AI による自動感染を防ぐ | 5分 |
| GitHub Actions をハッシュ固定 | CI/CD の侵害耐性 | 1時間 |
| GitHub アカウント定期確認 | 感染後に早く気づく | 週1分 |
94分。
たった94分の侵害ウィンドウで、@bitwarden/cli から SSH鍵・AWS認証情報・Claude Code トークン・MCP 設定まで全部持っていかれる時代になりました。
「完璧な対策」を待っていたら、次の94分が来ます。
**今日できることを、今日やる。**それだけで、来週の自分は今週より少し安全です。
そして、もう一度——あなたは今朝、npm update しましたか?
参考:
関連記事:
Aikido Community Japan
公開日: 2026/4/25
最終更新: 2026/4/25
セキュリティの最新情報をお届けします。