Claude Code GitHub Actionsの脆弱性によりリポジトリ侵害が可能に

AnthropicのAI搭載CI/CD統合機能であるClaude Code GitHub Actionsのワークフローに、深刻なサプライチェーン脆弱性が発見されました。この脆弱性が悪用されると、Anthropic自身のリポジトリを含む、同機能を使用するあらゆるリポジトリが侵害される恐れがありました。

この脆弱性はGMO Flatt SecurityのセキュリティリサーチャーであるRyotaK(@ryotkak)氏によって報告され、Claude Code GitHub Actions v1.0.94でパッチが適用されています。

Claude Code GitHub Actionsは2つの動作モードをサポートしています。「タグモード」はイシューやプルリクエストのコメントでユーザーが@claudeをメンションした際に起動し、「エージェントモード」はイシューのトリアージや重複排除といった自動タスク向けにあらかじめ設定されたプロンプトによって起動します。

プロンプトインジェクション攻撃を防ぐため、このワークフローはリポジトリへの書き込みまたは管理者アクセス権を持つユーザーのみに実行を制限しており、checkWritePermissions関数によって実装されていると、Flattは述べています。

しかし同関数は、実際の権限に関係なく、あらゆるGitHub Appアクターのチェックを無条件で通過させていました。この設計上の前提が、実際には危険な結果をもたらしました。

GitHub Appはすべてのパブリックリポジトリに対して暗黙の読み取りアクセス権を持っており、対象リポジトリに明示的にインストールされていなくても、インストールトークンを使用してあらゆるパブリックリポジトリにイシューやプルリクエストを作成できます。

攻撃者はこれを悪用し、悪意のあるGitHub Appを作成して自分のリポジトリにインストールし、そのインストールトークンを使って標的となるパブリックリポジトリにイシューやプルリクエストを開くことができました。

アクター名が[bot]で終わるため、checkWritePermissionstrueを返し、ワークフローは攻撃者が完全にコントロールするコンテンツの処理を続行しました。

タグモードには追加のcheckHumanActorチェックが存在していましたが、発見時点ではエージェントモードにはこの保護機能がまったく備わっていませんでした。

権限チェックが回避されると、攻撃者は細工されたプロンプトインジェクションのペイロードをワークフローに送り込むことが可能になります。エラーメッセージを模した悪意あるイシューの説明文を使うことで、Claude Codeに埋め込まれたコマンドを実行させることができました。

Claude Codeはcatheadなどの一部のBashコマンドを明示的な承認なしに許可しているため、攻撃者は/proc/self/environ——現在のプロセスの環境変数(CI/CDシークレットを含む)を公開するLinuxの疑似ファイル——を読み取ることができました。

これらのシークレットの中でも特に重要だったのがACTIONS_ID_TOKEN_REQUEST_TOKENACTIONS_ID_TOKEN_REQUEST_URLです。Claude Code GitHub ActionsはGitHubへの認証にOpenID Connect(OIDC)メカニズムを使用しており、Anthropicのバックエンド(https://api.anthropic.com/api/github/github-app-token-exchange)を介してOIDCトークンと特権を持つClaude GitHub Appインストールトークンを交換します。

これらの環境変数を流出させた攻撃者は、トークン交換プロセス全体を再現し、リポジトリのコンテンツ、イシュー、プルリクエスト、ワークフローファイルへの書き込みアクセスを付与するインストールトークンを入手できました。

anthropics/claude-code-actionリポジトリ自体にも同様のエージェントモードワークフローが存在していたため、攻撃が成功すれば、悪意あるコードをアクションのソースコードに直接プッシュし、それに依存するすべてのダウンストリームリポジトリへ侵害を伝播させることが可能でした。まさに典型的なサプライチェーン攻撃のシナリオです。

また別途、RyotaK氏はAnthropicの公式サンプルのイシュートリアージワークフローに危険な設定ミスを発見しましたallowed_non_write_users: "*"という設定が使用されており、あらゆる外部ユーザーがワークフローをトリガーできる状態になっていました。

許可的なトリアージワークフローとデフォルトのタグモードワークフローを組み合わせることで、攻撃者は信頼されていない外部コントリビューターからリポジトリの完全侵害へと権限を昇格させることが可能でした。まずissues: writeアクセス権を持つGITHUB_TOKENを取得し、次に信頼されたユーザーのイシューを編集してペイロードを注入すれば、タグモードワークフローがそれを完全なid-token: write権限で処理するという手順です。

AnthropicはエージェントモードにcheckHumanActorの呼び出しを追加することで権限バイパスに対処し、デフォルトでGitHub Appがワークフローをトリガーできないようにしました。

その他の修正として、ワークフロー実行サマリーの無効化、子プロセスからの環境変数の削除、トリガー後のイシュー編集の無視、URLベースの情報流出を防ぐカスタムghコマンドラッパーの実装なども実施されました。

AnthropicはこれらのCVSS v4.0スコアを7.8と評価し、バグバウンティプログラムを通じてRyotaK氏に4,800ドルを授与しました。

Claude Code GitHub Actionsを使用している組織は、allowed_non_write_usersの使用状況について設定を直ちに監査し、侵害の兆候がないかワークフロー実行ログを確認するとともに、信頼されていない入力を処理するワークフローに公開されている権限とシークレットを制限することを強くお勧めします。

翻訳元: https://cyberpress.org/claude-code-github-actions-flaw/

ソース: cyberpress.org