Sysdig Threat Research Team(TRT)は、最も人気のあるGitHub Action CI/CDセキュリティツールの1つであるCVE-2025-32955,(現在は修正済み)のHarden-Runnerに存在する脆弱性を発見しました。この脆弱性を悪用すると、攻撃者はHarden-Runnerのdisable-sudoセキュリティ機構をバイパスでき、特定の条件下で継続的インテグレーション/継続的デリバリー(CI/CD)パイプライン内で実質的に検知を回避できます。このリスクを軽減するため、ユーザーには最新バージョンへの更新を強く推奨します。
このCVEには、CVSS v3.1の基本スコア6.0が割り当てられています。
初期の脆弱性発見の経緯と、このセキュリティ脆弱性の影響(他のCI/CDセキュリティ製品にも影響し得る)をよりよく理解するために、Sysdig TRTの調査結果を見ていきましょう。
Harden-Runnerの概要
Harden-Runnerは、実行中ジョブの環境を強化することでGitHub Actionワークフローのセキュリティを向上させる、TypeScriptで記述されたオープンソースのGitHub Actionです。特にオープンソースやパブリックリポジトリにおいて重要となる、信頼できないワークフローの悪用からこれらのランナーを防御者が保護するのを支援することを目的としています。Harden-Runnerは非常に簡単に利用できるため、多数のパブリック/非パブリックリポジトリで急速に採用された理由でもあります。ユーザーは、保護したいジョブに以下のように初期ステップを追加することでHarden-Runnerを使い始められます。
steps:
- uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1with:
egress-policy: audit
GitHubホスト型ランナーを使用する場合、各ジョブはエフェメラルな仮想マシン(VM)上で実行されます。VM内のrunnerプロセスは、ワークフローファイルに宣言されたすべてのステップを実行する責任を負い、ユーザーはソフトウェアのビルド、テスト、リリース、その他のタスクを実行できます。
コミュニティ版のHarden-Runner GitHub Actionは、実行時の可視性を提供するGoアプリケーションであるstep-security agentをインストールします。ジョブのステップを処理するVM内にこのコンポーネントをインストールすることで、ユーザーは多様な機能にアクセスできます。本記事およびこのアクションの採用者の双方に関連する最も重要な機能は次のとおりです。
- IPまたはDNSドメイン名に基づくネットワークのエグレス(送信)トラフィックの監査またはブロック
- 保護対象ジョブVM内のLinux
runnerユーザーアカウントに対するsudoアクセスの無効化
あなたのGitHub Actionsは安全ですか?
最近のtj-actions/changed-filesの侵害(CVE-2025-30066)はセキュリティコミュニティに衝撃を与え、数千のリポジトリのCI/CDシークレットがパブリックログに露出しました。この発見についてはStepSecurityに感謝しなければなりません。この攻撃は、Harden-Runner GitHub Actionが提供する異常検知機能によって発見されました。これはサプライチェーン攻撃から保護するために用いられる、広く採用されているセキュリティ対策です。
セキュリティの世界では、あらゆるものの妥当性を疑うよう教えられます。その精神に則り、シンプルな問いを立てましょう。このセキュリティソリューションはどれほど有効なのでしょうか? 追加のセキュリティ層を提供するのか、それとも熟練した攻撃者にとって、適用しているセキュリティポリシーを容易に回避できるのでしょうか? これらの問いに答え、私たちが見つけたバイパスを掘り下げることで、GitHub Actions上で動作するCI/CDワークフローを保護するための、より強固なセキュリティ対策の提供につながることを期待します。
CVE-2025-32955: Harden-Runnerのdisable-sudo機能のバイパス
GitHub Actionsの性質上、攻撃者はさまざまな方法でジョブを実行しているVM内でコード実行を得ることができます。Sysdig TRTは、Harden-Runnerの耐性を監査するため、コミュニティ版StepSecurity agentのオープンソースコードを調査しました。特に、IPおよびDNSドメインへの接続の検知と防止がどのように実装されているかを理解しようとしました。さらに、エージェントがLinux runnerユーザーアカウント(ジョブのステップを処理するrunnerアプリケーションを実行しているのと同じユーザー)に対するsudoアクセスをどのように無効化しているかも確認しました。
前者について、TRTはIPの監査とブロックがIPtablesルールによって実施されていることを確認しました。これはファイアウォールルールを実装する従来の方法で、多くの技術がこれを活用しています。ご覧のとおり、いくつかのルールがここで設定されています。
一方、DNSの監視とブロックはカスタムDNSプロキシサーバーで処理され、dnsproxy.goファイル内で初期化されます。サーバーは別のgoroutineで実行され、受信するDNSリクエストを待ち受けます。VM内プロセスのすべてのDNSクエリをリダイレクトするため、エージェントはsystemd-resolvedサービスを停止し、DNS解決にローカルIPアドレスを使用するよう/etc/resolv.confファイルを書き換えます。元の設定は/tmp/resolved.confにバックアップされ、その後サービスが再起動されます。再起動後、サービスは新しい設定を読み込み、エージェントはシステム内で行われるDNSクエリを監視できるようになり、設定に応じてそれらをブロックできる可能性があります。
最後に、disable-sudoポリシーの実装については、エージェントがLinux runnerユーザーが使用するsudoersファイルをaccount to/tmp/runnerへ移動することに限定しているのが分かります。sudoersファイルはsudoが実行されるたびに読み込まれ、ユーザーが昇格権限で実行できるコマンドを取得するために使用されます。GitHubホスト型ランナーの場合、Linux runnerユーザーアカウントは、デフォルトの/etc/sudoers.d/runnerファイルに記載されているとおり、任意のコマンドを実行できます。この場所からファイルを移動することは、このユーザーのsudoを無効化することを意味します。
GitHubホスト型VMの設定をさらに深掘りすると、Linux runnerユーザーアカウントがdockerグループに所属していることに気づきました。これは、root相当のユーザーであることを意味します。このグループのメンバーであることで、ユーザーはDockerソケットを介してホスト上の特権プロセスであるDockerデーモンと通信できます。これにより、特権rootコンテナの実行やホストのファイルシステム全体をコンテナにマウントするなど、特権的な操作が可能になります。rootアクセスを防ぐためにsudoを無効化することは、不十分なセキュリティ対策であることが判明しました。なお、Linux runnerユーザーアカウントはDockerグループに属している必要があり、これはユーザーが変更できません。これは、正当なユーザーが実行したいアクションが、他の理由に加えて、コンテナである可能性もあるためです。
以上を踏まえると、disable-sudoをバイパスするために、攻撃者は次のコマンドを実行するだけで済みます。
# ホストのファイルシステムをマウントした特権コンテナを使用してsudoersファイルを復元する with host filesystem mounted
docker run --rm --privileged -v /:/host ubuntu bash -c "cp /host/tmp/runner /host/etc/sudoers.d/runner"
これらのコマンドの実行後、攻撃者はrunner内でsudoを使用してrootユーザーとしての操作を続行できます。これは、エージェントと同等の権限レベルでコマンドを実行できることを意味し、Harden-Runnerに検知されることなく、あらゆるセキュリティ機構を無効化するためにネットワーク設定を復元できることになります。
影響と緩和策
CVE-2025-32955にはCVSS v3.1の基本スコア6.0が割り当てられています。
この脆弱性により、Harden-Runner GitHub Actionの完全性と可用性が影響を受けます。
- 完全性: 脆弱性を悪用して
runner内でsudoアクセスを取得することで、攻撃者はファイルやネットワーク設定を変更し、セキュリティ機構を制御された形で無効化でき、結果としてシステムの完全性が損なわれます。 - 可用性: sudoアクセスにより、攻撃者はセキュリティ機構や監視プロセスを妨害または干渉でき、検知されることなくそれらを無効化する可能性があります。
CVE-2025-32955は、2025年4月21日にリリースされたHarder-Runnerバージョンv2.12.0で修正されています。このセキュリティリスクを軽減するため、同バージョン以上への更新を強く推奨します。
結論
サプライチェーン攻撃および関連する脅威は、現代のセキュリティチームと開発者にとって最優先事項であり、攻撃者にとっても急速に好まれる戦術になりつつあります。CVE-2025-32955を悪用することで、攻撃者はGitHub ActionsのCI/CD環境で最も広く採用されているツールの1つであるHarden-Runnerを使用するワークフロー内で、検知されず、ほぼ無制限に活動できる可能性があります。エージェントのdisable-sudoセキュリティ機構をバイパスすることで、攻撃者は権限を昇格し、セキュリティ制御を無効化でき、発見されるまで攻撃を妨げられることなく継続できます。
開示タイムライン
2025年1月20日 — Sysdig TRTがStepSecurityにセキュリティ問題を報告
2025年1月21日 — StepSecurityが報告された問題を確認
2025年4月21日 — StepSecurityがセキュリティ問題を修正するバージョンv2.12.0をリリース
2025年4月21日 — GitHub Security Advisory(GHSA)を通じて公開開示
翻訳元: https://www.sysdig.com/blog/security-mechanism-bypass-in-harden-runner-github-action