記事一覧に戻る
vulnerability2026年4月25日14分で読めます

あなたは今朝、npm update しましたか?——Shai-Hulud事件が突きつける、開発者の「当たり前」の危うさ

2026年4月22日、Bitwarden公式CLIが94分間だけマルウェアに感染...

npmサプライチェーン攻撃Shai-HuludBitwardenClaude CodeMCPSafe Chainマルウェアセキュリティインシデント

あなたは今朝、npm update しましたか?——Shai-Hulud事件が突きつける、開発者の「当たり前」の危うさ


あなたは今朝、npm update しましたか?

もしそのリストに @bitwarden/cli があったなら、あなたのSSHキーは今頃どこかのサーバーにある。

大げさに聞こえるかもしれない。でもこれは2026年4月22日、実際に起きたことです。


「信頼できるパッケージ」が牙を剥いた94分間

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』の砂虫から取られた名前です。


攻撃の中身——AI時代仕様の「全部持っていきます」

Stage 1: bw_setup.js(preinstall フック)

npm install した瞬間に走ります。

  1. OS とアーキテクチャを判定
  2. 正規の Bun ランタイムをダウンロード(信頼を装う)
  3. 第2ステージ bw1.js を起動

Bun を使う理由は、Node.js のセキュリティツールでは検知されにくいから。プロの仕事です。

Stage 2: bw1.js(10MB の難読化ペイロード)

ここからが本番。盗み出すリストが、過去のサプライチェーン攻撃と比べて桁違いに広い:

カテゴリ盗まれるもの
SSH~/.ssh/id_* 秘密鍵
クラウドAWS / GCP / Azure 認証情報
クラウドシークレットAWS SSM、Azure Key Vault、GCP Secret Manager の中身
npmnpm 認証トークン
GitGit クレデンシャル
環境変数.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 は違います。自己増殖します。

  1. 感染マシンから盗んだ GitHub トークンを使う
  2. 被害者自身のGitHubアカウントで、新しいパブリックリポジトリを作る
  3. そこに盗んだ認証情報を公開コミットとして投稿する
  4. 他の感染マシンが、このリポから追加の認証情報を読み取る
  5. 連鎖が拡がる

つまり、感染した開発者のGitHubアカウントで、知らない間に 「Shai-Hulud: The Third Coming」というリポジトリが公開されます。組織メンバーのトークンは暗号化されて秘匿される徹底ぶり。

C2サーバーは audit.checkmarx[.]cx/v1/telemetry(.cx はクリスマス島のTLD、Checkmarx社の名前を悪用)。フォールバックとして GitHub の commit 検索で代替ホスト名を取得する仕組みも組み込まれています。1つのドメインを潰しても止まらない。


🤖 AI時代だからこそ、怖い理由

ここを強調したい。

過去なら「@bitwarden/cli@2026.4.0 は危険、入れないで」と注意喚起すれば済んだ話。

でも今は:

  • Claude Code が「依存関係を最新にしましょうか?」と提案してくる
  • GitHub Copilot が npm install を勝手に実行するスクリプトを書く
  • **Cursor が「最新の Bitwarden CLI を使いましょう」**と提案する
  • CI/CD が 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

# その後、すべてのトークン・認証情報をローテーション

🛡️ 今日から始める5つの対策

1. Safe Chain を入れる(5分)

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時間ルールがあれば防げていた。

2. package-lock.json をコミットする(1分)

地味だけど効きます。lockファイルがあれば、npm ci は固定版しか入れない。チームで共有してください。

3. Claude Code に依存変更ルールを書く(5分)

CLAUDE.md にこれを追記:

## 依存関係のルール
- package.json の依存バージョンを変更する前に、必ず確認を求めること
- npm install / npm update を自動実行しないこと
- 新しい依存パッケージは、公開から48時間以上経過しているか確認すること

これだけで、AI による自動感染リスクが大きく下がります。

4. GitHub Actions をコミットハッシュで固定する(1時間)

# 悪い例(タグは攻撃者が差し替えられる)
- uses: checkmarx/ast-github-action@latest

# 良い例(コミットハッシュは変えられない)
- uses: checkmarx/ast-github-action@a1b2c3d4e5f6789...

今回の攻撃は外部 GitHub Action の侵害が起点でした。全アクションをハッシュで固定するだけで、同種の攻撃への耐性が劇的に上がります。

5. 自分のGitHubアカウントを定期確認する(週1分)

# 知らないリポジトリが作られていないかチェック
gh repo list --sort created --limit 20

# npm トークンを確認
npm token list

毎週金曜の業務終わりにでも、習慣にしてください。


まとめ——94分が示す現実

やること効果時間
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 しましたか?


参考:

関連記事:

キーワード

  • npm
  • サプライチェーン攻撃
  • Shai-Hulud
  • Bitwarden
  • Claude Code
  • MCP
  • Safe Chain
  • マルウェア
  • セキュリティインシデント
A

Aikido Community Japan

公開日: 2026/4/25

最終更新: 2026/4/25

シェア:

ニュースを購読

セキュリティの最新情報をお届けします。

Aikido Community Japan からのお知らせの受信に同意します。詳しくはプライバシーポリシーをご確認ください。