一个针对 Gitea
diffpatchGit 钩子远程代码执行漏洞的直接、单目标验证工具。
本仓库包含专注的 AfterDark 验证器:一个脚本、一个目标、一次运行。没有发现、侦察、验证或其他子命令。
本项目仅用于授权的安全测试、防御性验证、研究和教育。请仅在您拥有或已获得明确书面许可的系统上使用。
作者和贡献者不对滥用、损害、服务中断、数据丢失或法律后果负责。您有责任遵守适用的法律、合同、交战规则和披露要求。
这是一个活跃的 RCE 概念验证。它会创建账户、创建私有仓库、写入合同标记,并以 Gitea 操作系统用户身份执行命令。请谨慎对待。🛡️
CVE-2026-60004 影响 Gitea 的仓库 diffpatch 工作流。具有仓库写入权限的攻击者可以提交精心构造的补丁内容,从而安装并触发 Git 钩子,导致以 Gitea 服务账户身份执行命令。
| 项目 | 详情 |
|---|
| 产品 | Gitea |
| 受影响版本 | >= 1.17.0, < 1.27.1 |
| 已修复版本 | 1.27.1 |
| 影响 | 以 Gitea 操作系统用户身份远程执行命令 |
| 上游公告 | GHSA-rcr6-4jqh-j84m |
Forgejo 及其他分支需要手动进行实现审查,不会自动视为受影响。
每次运行执行一个固定的工作流:
diffpatch 安装并触发精心构造的 post-index-change 钩子。id。该工具仅接受单个目标。它没有目标列表、通配符、批量扫描或被动发现模式。
PATH 中可用的 Git该脚本仅使用 Python 标准库。无需 pip install。
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-RCE-PoC.git
cd CVE-2026-60004-Gitea-RCE-PoC
python3 scanner.py --help
python3 scanner.py \
--contract-number ENG-2026-001 \
--username audit-eng-2026-001 \
--password 'use-a-unique-disposable-password' \
https://gitea.example
也提供短选项:
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
https://gitea.example
🚨 密码在命令行中提供,并显示在最终结果面板中。请仅使用唯一的一次性测试凭据。请注意,命令行参数可能会保留在 shell 历史记录中,或暂时对本地进程检查工具可见。
默认命令为 id。可以使用 --cmd 提供范围严格限定的自定义命令:
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
--cmd 'uname -a' \
https://gitea.example
自定义命令故意没有超时。验证器会一直等待远程命令退出,因此除非交战规则明确要求,否则请避免交互式或长时间运行的命令。
默认情况下,每次运行写入以下路径之下:
afterdark-results/<contract>/<UTC timestamp>/
您可以选择不同的根目录或确切的运行目录:
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
--results-root ./engagement-evidence \
https://gitea.example
python3 scanner.py \
-c ENG-2026-001 \
-u audit-eng-2026-001 \
-p 'use-a-unique-disposable-password' \
--output-dir ./engagement-evidence/run-01 \
https://gitea.example
每次运行创建私有 0600 文件,并拒绝覆盖现有结果:
confirmation.json — 目标、版本结果、账户名称、时间戳、命令、返回代码和捕获的工件confirmation.command-output.txt — 完整的远程命令输出证据可能包含敏感的参与信息。请勿将其提交到 Git。附带的 .gitignore 排除了默认结果路径和常见证据文件名。
验证器不会自动删除服务端工件。评估结束后,授权管理员应:
afterdark-* 仓库/tmp/gitea-validation-<contract>/client.txt1.27.1 或更高版本成功的结果证明以 Gitea 服务账户身份执行了命令。这本身并不证明 root 访问权限、持久化、横向移动或完全的主机沦陷。
id测试在不发起网络请求的情况下演练解析和 PoC 构造:
python3 -m unittest discover -s tests -v
欢迎使验证器更安全、更可靠或更易于清理的改进。请勿提交真实目标详情、凭据、私有证据或破坏性载荷。
有关本工具漏洞的信息,请遵循 SECURITY.md。
为谨慎、受合同约束的安全验证而构建。🫖🛡️