本文の内容は、2025年4月22日に Lorenzo Susini が投稿したブログ(https://sysdig.com/blog/security-mechanism-bypass-in-harden-runner-github-action/)を元に日本語に翻訳・再構成した内容となっております。
Sysdig脅威リサーチチーム(TRT)は、GitHub ActionsのCI/CDセキュリティツールとして非常に広く利用されているHarden-Runner に存在する脆弱性 CVE-2025-32955 を発見しました。この脆弱性はすでに修正されています。この脆弱性を悪用すると、攻撃者はHarden-Runnerの disable-sudo
セキュリティ機構を回避し、特定の条件下でCI/CDパイプライン内での検知を免れることが可能となります。このリスクを軽減するため、ユーザーは最新バージョンへのアップデートを強く推奨します。
この CVE にはCVSS v3.1ベース スコア6.0が割り当てられています。
他のCI/CDセキュリティ製品にも影響を及ぼす可能性があるこのセキュリティ脆弱性の最初の発見とその影響をより深く理解するために、Sysdig脅威リサーチチーム(TRT)の調査結果を見ていきましょう。
Harden-Runnerの概要
Harden-Runnerは、TypeScriptで記述されたオープンソースのGitHub Actionであり、実行中のジョブの環境を強化することでGitHub Actionのワークフローのセキュリティを向上させるものです。その目的は、特にオープンソースや公開リポジトリにおいて、信頼できないワークフローによる悪用からこれらの Runner を守るために、防御側を支援することにあります。
Harden-Runnerは非常に簡単に使用できるため、公開・非公開を問わず多数のリポジトリで急速に採用されました。ユーザーは保護したいジョブに以下のような初期ステップを追加するだけで、Harden-Runnerを導入できます。
steps:
- uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
with:
egress-policy: audit
GitHubホストの Runner を使用する場合、各ジョブは一時的な仮想マシン(VM)上で実行されます。VM内のRunnerプロセスは、ワークフローファイルで宣言されたすべてのステップの実行を担当し、これによりユーザーはソフトウェアのビルド、テスト、リリース、および追加タスクの実行が可能になります。
コミュニティレベルのHarden-Runner GitHub Actionは、ランタイムの可視性を提供するGoアプリケーションであるstep-securityエージェントをインストールします。ジョブのステップを処理するVM内にこのコンポーネントをインストールすることで、ユーザーは様々な機能にアクセスできるようになります。この記事とこのアクションを採用するユーザーの両方に関連する最も重要な機能は次のとおりです。
- IP または DNS ドメイン名に基づいてネットワーク出力トラフィックを監査またはブロックする
- 保護されたジョブの仮想マシン内において、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は、コミュニティレベルのStepSecurityエージェントのオープンソースコードを検査し、Harden-Runnerの耐障害性を監査しました。特に、IPアドレスとDNSドメインへの接続の検出と防止がどのように実装されているかを把握しようとしました。さらに、エージェントが sudo
Linuxrunner
ユーザーアカウント(ジョブのステップを処理するランナーアプリケーションを実行しているユーザーと同じ)のアクセスを無効にする方法も確認しました。
TRTはまず、IP監査とブロックがIPtablesルールを用いて行われていることを確認しました。これはファイアウォールルールを実装するための従来の方法であり、多くのテクノロジーで活用されています。ご覧のとおり、ここではいくつかのルールが設定されています。
一方で、DNSの監視およびブロックは、dnsproxy.go
ファイルで初期化されるカスタムDNSプロキシサーバーによって処理されます。このサーバーは別スレッド(goroutine)で実行され、受信するDNSリクエストを待ち受けます。仮想マシン内のプロセスによるすべてのDNSクエリをリダイレクトするために、エージェントは systemd-resolved
サービスを停止し、/etc/resolv.conf
ファイルをローカルIPアドレスを使うように書き換えます。元の設定は /tmp/resolved.conf
にバックアップされ、その後サービスは再起動されます。再起動によりサービスは新しい設定を読み込み、これによりエージェントはシステム内で発生するすべてのDNSクエリを監視し、設定次第ではそれらをブロックすることが可能となります。
最後に、disable-sudo
ポリシーの実装についてですが、エージェントはLinux Runner ユーザーアカウントが使用する sudoers
ファイルを /tmp/runner
に移動することに限定しています。sudoers
ファイルは sudo
が実行されるたびに読み込まれ、ユーザーが昇格した権限で実行できるコマンドを判断するために使用されます。
GitHubホスト Runnner の場合、デフォルトの /etc/sudoers.d/runner
ファイルに記載されているとおり、Linux Runnner ユーザーアカウントは任意のコマンドを実行できるようになっています。このファイルを元の場所から移動することで、このユーザーに対する sudo
の利用を無効化することができます。
GitHub でホストされている VM の構成を詳しく調べたところ、Linux Runner
ユーザー アカウントがdocker
グループに属していることに気付きました。これは、ルートと同等の権限を持つユーザーであることを意味します。このグループのメンバーであるユーザーは、Docker ソケットを介してホスト上の特権プロセスである Docker デーモンと通信できます。これにより、特権ルート コンテナの実行やホスト ファイル システム全体のコンテナへのマウントなど、特権アクティビティを実行できます。sudo
ルート アクセスを防止するために無効にすることは、セキュリティ対策として不十分であることが判明しました。Linux Runner
ユーザー アカウントは Docker グループに属している必要があり、ユーザーがこれを変更できないことに注意する必要があります。これは、正当なユーザーが実行したいアクションがコンテナに対して実行される可能性もあるためです。
すべてを踏まえると、disable-sudo
を回避するために攻撃者は、単に以下のコマンドを実行するだけで済みます。
# Restore the sudoers file using a privileged container with host filesystem mounted
docker run --rm --privileged -v /:/host ubuntu bash -c "cp /host/tmp/runner /host/etc/sudoers.d/runner"
これらのコマンドを実行した後、攻撃者は Runnner 内で 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を悪用することで、攻撃者はHarden-Runnerを使用するワークフロー内で、ほとんど検知されず、ほぼ制限のない状態で行動を続けることが可能になります。
GitHub ActionsのCI/CD環境で広く採用されているこのツールにおいて、エージェントのdisable-sudo
セキュリティ機構を回避することで、攻撃者は権限を昇格させ、セキュリティ制御を無効化できるようになります。その結果、攻撃は発見されるまで妨げられることなく継続される可能性があります。
開示タイムライン
2025年1月20日 – Sysdig TRTがStepSecurityにセキュリティ問題を報告
2025年1月21日 – StepSecurityは報告された問題を認めた
2025年4月21日 – StepSecurityはセキュリティ問題を修正したバージョンv2.12.0をリリースしました。
2025年4月21日 — GitHubセキュリティアドバイザリ(GHSA)による公開