ハクソク

世界を動かす技術を、日本語で。

Bitwarden CLIが進行中のCheckmarxサプライチェーンキャンペーンで侵害される

概要

  • Bitwarden CLIのnpmパッケージがサプライチェーン攻撃で改ざんされた事例
  • 悪意あるコードはbw1.jsに含まれ、GitHub ActionsのCI/CDパイプラインが侵害経路
  • 資格情報の窃取やnpmリポジトリの再侵害など多彩な攻撃手法
  • 影響範囲はCLIのnpmパッケージのみで、他のBitwarden製品には波及なし
  • 企業・開発者は即時の対策と被害調査が推奨される

Bitwarden CLI npmパッケージ改ざん事件の概要

  • Bitwarden CLIのnpmパッケージ(@bitwarden/cli2026.4.0)がサプライチェーン攻撃で改ざん
  • 悪意あるコードはbw1.jsファイルに格納
  • GitHub ActionsのCI/CDパイプラインが侵害され、攻撃者によるコード挿入
  • Bitwardenは世界で1,000万以上のユーザーと5万以上の企業に利用される主要パスワードマネージャー

攻撃の特徴と技術的詳細

  • 攻撃はCheckmarxキャンペーンと同じGitHub Actions経由のサプライチェーン手法を踏襲
  • 同一のC2エンドポイント(audit.checkmarx[.]cx/v1/telemetry)を利用
  • PythonメモリスクレイピングスクリプトやGitHub Actions Runner.Workerを標的
  • 資格情報収集:GitHubトークン、AWS/Azure/GCPクラウド認証情報、npm設定、SSH鍵、Claude/MCP設定ファイル
  • GitHub経由の情報流出:被害者アカウントでDune風名称の公開リポジトリ作成、コミットメッセージにトークン埋込
  • npmトークン窃取によるパッケージ再公開やpreinstallフックのインジェクション
  • ロシア語ロケールの場合はサイレント終了(キルスイッチ実装)
  • Bun v1.3.13インタプリタをGitHubリリースからダウンロードして実行
  • シェルプロファイル改ざん(~/.bashrc、~/.zshrcへのペイロード注入)
  • 明示的なマルウェアブランド(Shai-Hulud、Butlerian Jihad等のDuneモチーフ)

攻撃者・マルウェアの特徴

  • Checkmarx事件と同じインフラを共有しつつ、異なる運用シグネチャや思想的主張を強調
  • TeamPCPと@pcpcatsアカウントがCheckmarx事件を主張、今回のペイロードはより思想的
  • Shai-Huludや"Butlerian Jihad"など、Dune由来のキーワードやコミットメッセージ
  • 分派グループまたはキャンペーンの進化の可能性

推奨される対応策

  • 影響を受けた**@bitwarden/cli2026.4.0を開発環境・ビルド環境から即時削除**
  • すべての資格情報のローテーション(GitHubトークン、npmトークン、クラウド認証情報、SSH鍵、CI/CDシークレット等)
  • GitHubリポジトリの監査:不審な公開リポジトリやワークフローファイル、Dune風名称(atreides, fremen, harkonnen等)を確認
  • npmパッケージの監査:不正な公開、バージョン変更、インストールフック追加の有無
  • クラウド環境の監査:不審な認証情報アクセス、トークン利用履歴、新規発行の確認
  • エンドポイント・ランナーの調査
    • 不審な外部接続(audit[.]checkmarx[.]cx)
    • Bunの不慣れな実行
    • .npmrc、.git-credentials、.env、クラウド認証ストアへのアクセス
    • /tmp/tmp.987654321.lockファイルやシェルプロファイル改ざん
  • GitHub Actionsの確認
    • 承認されていないワークフローや一時ブランチでの作成
    • format-results.txt等のアーティファクト生成・ダウンロード履歴
  • 長期的対策
    • トークンスコープの最小化
    • 短命な認証情報の利用
    • パッケージ公開権限の厳格化
    • GitHub Actions権限の強化と不要なアーティファクトアクセスの無効化
    • 新規公開リポジトリ・ワークフロー変更の監視体制構築

IOC(インジケータ)

  • 悪性パッケージ:@bitwarden/cli2026.4.0
  • ネットワーク指標
    • 94[.]154[.]172[.]43
    • https://audit.checkmarx[.]cx/v1/telemetry
  • ファイルシステム指標
    • /tmp/tmp.987654321.lock
    • /tmp/tmp<Unix Epoch Timestamp>/package-updated.tgz

まとめ

  • Bitwarden CLI npmパッケージの改ざんは、サプライチェーン攻撃の深刻な実例
  • 資格情報流出・CI/CD環境侵害のリスクを強く認識し、即時の対応・監査が必須
  • 思想的主張を帯びた新たな攻撃傾向にも警戒が必要

Hackerたちの意見

BitwardenのCLIで本当に最悪な体験をしたんだ。`bw list`を実行したら、パスワードの名前だけが出ると思ってたのに、驚くことに、パスワードや現在のTOTPコードまで全部リストされちゃった。それだけじゃなくて、なんでか分からないけど、サーバーにSSHで入ってtmuxを開いたら、weechatのIRCクライアントのテキスト入力フィールドの履歴に、bwコマンドの内容が全部アクセスできる状態になってたんだ。どうしてこんなことが起こったのか全く分からないけど、かなり恐ろしかった。問題はtmuxとweechatのセッションを跨いで続いて、サーバーを再起動しないと解決しなかった。その後すぐにbw CLIプログラムを削除したし、もう二度とインストールするつもりはないよ。ghosttyを使ってるけど、関係あるかな。
うわ、すごいね。weechatにbwcliの拡張機能ってあるの?ちなみに、今までBWにCLIがあるなんて知らなかったよ。私はローカルでKeePassを使ってる。
CLIを使おうと思ったときは効率的だと思ったけど、結局JavaScriptだって気づいた。
最初のコメントが実際の話題とは関係ない文句ってのが面白いよね。
CLIは使ったことないけど、ブラウザのプラグインは使ってるよ。それが侵害されたら大変なことになるね。どうやって防げばいいんだろう?古い、試してみたバージョンを使う?自分の幸福がそんな秘密に依存してるなんて、ちょっと奇妙だね。
統合ポイントが増えると、妥協のリスクも上がるよね。だから、パスワードマネージャーのデスクトップブラウザ拡張は使わないことにしてる。パスワードマネージャーが人気になり始めた頃、ブラウザ統合にセキュリティの問題があったやつがあったから、そういうのは完全に避けることにした。iOSでは統合に対してはもう少し安心感があるから使ってるけど、やっぱり警戒はしてる。
デスクトップやウェブボールトを直接使った方がいいよ。ブラウザのプラグインは使わない方がいい。
すべてのサービスでパスワードにhunter2を使うべきだよ。このパスワードは絶対にクラックされないから、他の人には**って表示されるだけなんだ。俺のパスワードは*****だよ。ほら、アスタリスクで表示されるから、共有しても全然安全だよ。試してみて!... Scnr •́ ‿ , •̀
どこでもクールダウンが必要だよ、デフォルトでね。開発用パッケージマネージャー、OSのパッケージマネージャー、ブラウザの拡張機能。スタンドアロンアプリの自動更新でも実装すべきだよ。Socketみたいな企業に悪意のある更新を検出する時間を与えよう。彼らは得意だけど、みんなが公開された直後にパッケージをダウンロードし続けるのは無意味だから。
> 「どうやって防げるの?」私の大切なデジタル資産、メールとBitwardenアカウントは、常に身につけているYubikeyで守られてる(もう一つは別の場所に保管)。こんな設定を強くおすすめするよ。そんなに手間じゃないし(Yubikeyは家の鍵と一緒に持ってるだけ)。タイトルを読んでちょっと怖くなったけど、パラノイアにならない程度に安全を確保するように頑張ってる。
KeePassユーザーはストレスフリーな生活を続けてるね。自分のインフラでKeePassを使ってるおかげで、ここ5年だけでもいくつかのセキュリティ侵害を回避できたよ。
パスワードを自分のインフラとスマホからアクセスできるようにしたいんだけど、KeePassでどうやって実現してるの?無理だと思ってたけど、正直、そこまで深く調べたことはないんだ。
それは自分でインフラを維持できるHacker Newsのユーザーにはいいけど、「ストレスフリー」って言うなら、普通のユーザーにはちょっと厳しいかな…。
> KeePassユーザーはストレスフリーな生活を続けている。 https://cyberpress.org/hackers-exploit-keepass-password-mana...
KeePassでできないことの一つは、クラウドにバックアップする方法なんだよね。バックアップを暗号化したら、そのパスワードはどこに保存するの?クラウドプロバイダーのパスワードはどこに保存するの?
まあ、単一ファイル、みたいな感じだけど、実際にはどうやって同期するの?コンフリクトはどう解決するの?オフラインの間に二つのデバイスがパスワードを追加したら、オンラインになった時どうなるの?
JavaScriptでCLIを書く?いや、いらないね。
これはTypeScriptで、公式のBitwardenクライアントは全部それで書かれてるはずだよ。俺は公式CLIがリリースされる前にPythonとRustでバージョンを書いたことがあるんだ。今はhttps://github.com/doy/rbwを使った方がいいよ、ずっとメンテされてるし(もうBitwardenは使ってないから)。
> ロシアのロケールキルスイッチ:システムロケールが「ru」で始まると静かに終了する。Intl.DateTimeFormat().resolvedOptions().localeや環境変数LC_ALL、LC_MESSAGES、LANGUAGE、LANGをチェックする。 なんて大胆で、同時に臆病なんだろう…
一番最悪なのは、それが「本物」なのかただの偽旗なのかも分からないことだね。
「勇気の本質は慎重さにある」「自分の足元に向けては指を向けるな」「ロシアのルーレットは観客として楽しむのが一番」みたいな言葉が当てはまりそうだね。
それは決定的な証拠じゃないよね。Vault7のリークで、NSAやCIAが意図的にこういう痕跡を残して、どの国がやったのかを混乱させるってことが分かったと思う。他の国家の行為者も同じことをしてるだろうし、特に「クレイジー」な手法ってわけでもないよ。
ああ、そうだね、みんなnpm publishのGitHub CIジョブでロケールを設定するからね。明らかなミスリードだけど、国家の関与があったことがすごく分かりやすくなるね。
他国からの脅迫臭がするね…。
https://github.com/doy/rbw はBitwarden CLIのRustの代替品だよ。RustのエコシステムはNPMの方向に進んでるけど(非常に大きくて深い依存関係の木)、JavaScriptに比べて依存関係の中で信頼する著者はずっと少なくて済む。
これとvaultwardenを組み合わせると、素晴らしい自己ホスティング可能なRust版のBitwardenになるよ。これで一周したって感じだね!
まあ… https://github.com/doy/rbw/blob/main/Cargo.toml#L16 まだたくさんの依存関係を引っ張ってるね。少なくとも、ピン留めはされてるけど。
だからこそBW CLIは使わないんだ。CLIトークンにはpassかgopassを使って、プライベートなgitリポジトリで同期させるのがいいよ。パスワードマネージャーは別のデスクトップアプリとして使って、自動更新はオフにしておくべき。
一つのコマンドでCloudflareに自己ホストできるプロジェクトに取り組んでるんだ。そこに秘密やパスワードを保存できるやつ。Dopplerに似たCLIがあるよ。https://github.com/remorses/sigillo
npm/pnpm/yarn/bun/uv(それをサポートしているもの全て)で最小リリース年齢を設定するより良い方法知ってる人いる?.npmrcでmin-release-age=7を設定すれば、約19時間前に公開された悪意のある@bitwarden/cli 2026.4.0をダウンロードした334人の不運な人たちを守れたはずだよ(https://www.npmjs.com/package/@bitwarden/cli?activeTab=versi...を見て「非推奨バージョンを表示」を選択してみて)。悪意のあるaxios(@1.14.1と@0.30.4、約3時間以内に削除)、ua-parser-js(数時間)、node-ipc(数日)も同じ話。event-streamには役立たなかったけど(2ヶ月以上放置されてた)、全てを勝ち取るのは無理だよね。いくつかの例(https://news.ycombinator.com/item?id=47513932に感謝): ~/.npmrc min-release-age=7 # 日 ~/Library/Preferences/pnpm/rc minimum-release-age=10080 # 分 ~/.bunfig.toml [install] minimumReleaseAge = 604800 # 秒 # npmとは関係ないけど、ついでに… ~/.config/uv/uv.toml exclude-newer = "7 days" 追記: 自分の設定をチェックして修正を適用するシンプルなツールを探してたんだけど、見つからなくて驚いた。だから、オープンソースで無料のものをリリースしたよ(MITライセンスとか)。一クリックで修正できる便利さがあれば、みんなが実際に使う可能性が高くなるからね。興味がある人はプロフィールにリンクがあるよ。
[遅延]