Hackers Target 61 GitHub Repositories With Command Injection Attacks to Steal CI/CD Secrets
2026/11/02 CyberSecurityNews — GitHub の 61件の公開リポジトリを標的とする、組織的なコマンド・インジェクション攻撃を仕掛けた攻撃者の目的は、自動化された開発システムからのデータの窃取にある。2026年9月1日に確認された 83件の悪意の Issue/Pull Request/コメントを特定した Radware の研究者は、2つの GitHub Actions ワークフロー内で、挿入されたコマンドが実行された証拠を確認した。この調査結果は、日常的なプロジェクトの議論が、ソフトウェアのビルドシステムへの侵入経路になり得ることである。

Radware の調査によると、約 43分間に 77件の悪意のある投稿が確認され、その後の 2分間で 6件が投稿された。攻撃対象として挙げられるのは、Google LangExtract/Trivy/Brave Browser/MLflow/ToolJet/PX4-Autopilot などである。ただし、攻撃対象に含まれていたことで、すべてのプロジェクトが侵害されたことを意味するわけではない。
ユーザーが制御できるテキストを、シェルスクリプトに直接挿入するワークフローが、この攻撃では悪用された。GitHub Actions は、Issue の作成/Pull Request の送信/コメントの投稿に応じて処理を自動実行できる。これらの処理には、タイトルの確認/ラベルの割り当て/通知の送信などが含まれる。
攻撃者が 61件の GitHub リポジトリを標的に
攻撃者は、これらの投稿内容に、$() で記述される Bash のコマンド置換式を挿入した。脆弱なワークフローがこのテキストを実行可能なシェルコードに挿入すると、Bash は埋め込まれた式を通常の文字列ではなくコマンドとして処理した。挿入されたタイトルをダブルクォーテーションで囲んでも、コマンドの実行は防止できなかった。
ペイロードは env コマンドを実行して環境変数を収集し、その出力を Base64 でエンコードした後に、改行文字を削除し、curl を使用して HTTP POST リクエストの送信を試みた。
確認されたすべてのペイロードは、ポート 8443 の “54.205.16[.]142” を送信先として指定しており、試行ごとに異なる収集用識別子が使用されていた。ポート番号が 8443 であるにもかかわらず、通信には HTTPS ではなく HTTP が使用されていた。
リスクの程度は、各ジョブがアクセスできる情報に応じて異なる。環境変数には、サービストークン/デプロイ用の認証情報/内部設定などが含まれている可能性がある。
GitHub Actions の Secrets は、すべてのワークフローで自動的に利用できるわけではない。そのため、コマンドの実行が確認されたことだけでは、機密性の高い認証情報が窃取されたことの証明にはならない。

PX4-Autopilot では、ドキュメントの修正を装う Pull Request のタイトルにペイロードが含まれていた。タイトルを確認するワークフローは、このタイトルを Python を呼び出す Bash コマンドに挿入した。ログにはコマンド置換に関する警告が記録され、悪意の式が GIF89a で始まる内容に置き換わったことが確認された。
Snouzy/workout-cool では、攻撃者の指定したタイトルを、Issue の通知ワークフローが Bash の変数代入式に直接挿入した。該当する行に関連する警告により、コマンド置換が実行されたことが確認された。その後の Discord へのリクエストは、リクエスト本文に不正な JSON が含まれていたことで失敗した。ただし、この失敗はデータ窃取の成功を証明するものではない。
Secrets の窃取/リポジトリへの書き込み権限の取得/ソースコードの変更/リリース成果物の侵害について、Radware は確認していない。また、研究者は、攻撃に関与した一部のアカウントが乗っ取られた可能性を示す兆候も発見した。その中には、悪意の Issue を作成したことを、アカウント所有者が公に否定した事例も含まれる。
これらの調査結果は、以前に報告された GhostAction による認証情報の窃取 と tj-actions を悪用したサプライチェーン攻撃に関する情報を補完するものである。これらのインシデントでは異なる侵入経路が使用されたが、いずれも CI/CD 環境の Secrets を危険にさらした。

リポジトリの管理者に必要なのは、信頼できないタイトルをシェルスクリプトのソースコードに直接挿入するのではなく、環境変数を介して渡すことである。また、eval の使用を避け、ワークフローに付与する権限を制限する必要がある。
コマンドの実行を示す証拠を発見したチームにとって必要なことは、アクセス可能だった Secrets の確認/漏洩した可能性のある認証情報の変更/監査ログの調査/予期しない外部通信に対する調査の実施である。挿入されたコマンドによる被害を軽減するために、通知ジョブと特権を持つリリース用ワークフローを分離することが推奨される。
この記事は、 CI/CD 開発プラットフォームである GitHub Actions の自動化処理を狙った一斉攻撃と、その防御策について解説するものです。外部入力値に対する検証不足や不適切なシェルコード挿入が背景に存在します。影響として、ビルド環境内での不正コマンド実行/認証情報の外部漏えい/開発パイプラインの汚染が生じる恐れがあります。対応策として、入力データの環境変数経由での処理/アクセス権限の厳格化/漏えいした可能性のある資格情報の刷新が求められます。


You must be logged in to post a comment.