Harden-Runner 安全漏洞:利用Docker组权限绕过'sudo禁用'策略

本文详细披露了CVE-2025-32955漏洞,即GitHub Actions的Harden-Runner工具中"disable-sudo"策略可被绕过的安全问题。攻击者利用runner用户的docker组权限,可通过特权容器或访问宿主机文件系统重新获得root权限。

Harden-Runner 允许绕过“disable-sudo”策略 · CVE-2025-32955 · GitHub Advisory Database

漏洞详情

actions / step-security/harden-runner (GitHub Actions)

受影响版本

= 0.12.0, < 2.12.0

已修复版本 2.12.0

描述

摘要 Harden-Runner 包含一个名为 disable-sudo 的策略选项,用于防止 GitHub Actions runner 用户使用 sudo。此功能通过从 sudoers 文件中移除 runner 用户来实现。然而,此控制措施可以被绕过,因为 runner 用户是 docker 组的成员,可以与 Docker 守护进程交互以启动特权容器或访问宿主机文件系统。这使得攻击者能够重新获得 root 访问权限或恢复 sudoers 文件,从而有效地绕过了限制。

攻击者要绕过此控制,首先需要有能力在 runner 上运行其恶意代码(例如,通过类似于 tj-actions 的供应链攻击或利用 Pwn Request 漏洞)。此漏洞已在 Harden-Runner 版本 v2.12.0 中修复。

影响 攻击者如果有能力在配置了 disable-sudo: true 的 runner 上运行其恶意代码,则可以利用 Docker 将权限提升至 root,从而破坏预期的安全控制。

受影响配置

  • 使用 disable-sudo: true 的 Harden-Runner 配置,在 GitHub 托管的 runner 或临时的自托管基于 VM 的 runner 上。
  • 此问题不适用于基于 Kubernetes 的 Actions Runner Controller (ARC) Harden-Runner。

缓解措施 / 修复 此漏洞已在 Harden-Runner 版本 v2.12.0 中修复。用户应迁移到更强的 disable-sudo-and-containers 策略。此设置:

  • 禁用 sudo 访问,
  • 移除对 dockerd 和 containerd 套接字的访问,
  • 从 runner 中完全卸载 Docker,从而阻止基于容器的权限提升路径。

其他改进

  • disable-sudo 选项将在未来被弃用,因为它本身不足以限制权限提升。
  • Harden-Runner 现在包含检测功能,以对试图绕过 disable-sudo 策略的行为发出警报。

致谢 由 @loresuso 和 @darryk10 报告。我们感谢他们与我们合作以减轻此漏洞的影响。

参考

严重性

中等 CVSS 总体得分:6.0 / 10

CVSS v3 基础指标

  • 攻击向量 (AV):本地 (L)
  • 攻击复杂度 (AC):低 (L)
  • 所需权限 (PR):高 (H)
  • 用户交互 (UI):无 (N)
  • 范围 (S):未更改 (U)
  • 机密性影响 (C):无 (N)
  • 完整性影响 (I):高 (H)
  • 可用性影响 (A):高 (H)

CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:H

EPSS 分数 0.017% (第 3 百分位数)

弱点

  • CWE-250: 以不必要的特权执行 产品在高于所需最低权限级别的级别执行操作,这会创建新的弱点或放大其他弱点的后果。

  • CWE-268: 权限链 两种不同的权限、角色、能力或权利可以以某种方式组合,使得实体能够执行在没有该组合的情况下不被允许的不安全操作。

  • CWE-272: 最小权限原则违反 执行诸如 chroot() 等操作所需提升的权限级别应在操作执行后立即撤销。

标识符

  • CVE ID: CVE-2025-32955
  • GHSA ID: GHSA-mxr3-8whj-j74r

源代码 step-security/harden-runner

报告者

  • loresuso
  • darryk10
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计