Alardiians/gitea-CVE-2026-28699

GitHub: Alardiians/gitea-CVE-2026-28699

该项目提供了 CVE-2026-28699(Gitea OAuth2 scope 绕过)的完整漏洞分析文档与可自动复现的 PoC 实验环境。

Stars: 1 | Forks: 0

# CVE-2026-28699:通过 HTTP Basic Auth 绕过 Gitea OAuth2 Scope 当 Gitea OAuth2 访问令牌的 scope 仅限于 `read:user` 时,如果将其作为 `Authorization: Basic base64(:x-oauth-basic)` 发送,而不是作为 Bearer 令牌发送,它就可以执行完整的写入操作。对于通过 Basic auth 提供的任何令牌,scope 检查都会被跳过。 受影响版本:`<= 1.26.1`。已在 `1.26.2` 中修复。 安全通告:[GHSA-9r5x-wg6m-x2rc](https://github.com/go-gitea/gitea/security/advisories/GHSA-9r5x-wg6m-x2rc)。CWE-863。严重程度:高。 完整分析:[WRITEUP.md](WRITEUP.md) ## 快速开始 ``` pip install -r requirements.txt # requests python fetch_binaries.py # pulls vulnerable 1.26.1 + patched 1.26.2 for your OS python poc.py 1.26.1 # vulnerable: Basic-auth write succeeds (scope bypassed) python poc.py 1.26.2 # patched: Basic-auth write blocked (403) ``` `poc.py` 会在系统临时目录中通过 SQLite 启动一个临时的 Gitea,运行 OAuth2 authorization-code 流程以生成一个仅限 `read:user` 的令牌,然后分别通过 Bearer 和 Basic 调用写入 endpoint 并输出验证结果。设置 `POC_DEBUG=1` 可以查看认证流程的步骤。 ### 预期输出 存在漏洞的 `1.26.1` 版本: ``` [Bearer] PATCH /api/v1/user/settings -> HTTP 403 (blocked) [Basic ] PATCH /api/v1/user/settings -> HTTP 200 (ALLOWED -- scope BYPASSED) >>> VULNERABLE: read:user token performed a write via Basic auth. ``` 已修复的 `1.26.2` 版本: ``` [Bearer] PATCH /api/v1/user/settings -> HTTP 403 (blocked) [Basic ] PATCH /api/v1/user/settings -> HTTP 403 (blocked) >>> PATCHED: scope enforced on both Bearer and Basic. ``` ## 一表看懂根本原因 | 认证方式 | `IsApiToken` | `ApiTokenScope` | 是否强制执行 scope? | |---|---|---|---| | 通过 Bearer 的 OAuth2 令牌 | `true` | 已设置 | 是 | | 通过 Basic 的 OAuth2 令牌 | `true` | 缺失 | 否 (fails open) | | Personal access token | `true` | 已设置 | 是 | `services/auth/basic.go` 为 OAuth2 令牌设置了 `IsApiToken`,但没有设置 `ApiTokenScope`。`tokenRequiresScopes` middleware 在 scope 缺失时会提前返回,因此没有任何内容被检查。1.26.2 版本的修复添加了缺失的 `store.GetData()["ApiTokenScope"] = accessTokenScope`。 ## 文件 | 文件 | 用途 | |---|---| | [`WRITEUP.md`](WRITEUP.md) | 根本原因分析、影响、修复和检测方案 | | `fetch_binaries.py` | 为您的 OS/arch 下载 1.26.1 / 1.26.2 二进制文件 | | `poc.py` | 配置 Gitea,生成 `read:user` 令牌,对比测试 Bearer 与 Basic | | `requirements.txt` | `requests` | ## 仅限授权使用 仅用于教育和授权的安全测试:您自己的实验室、CTF 和 HTB 机器,以及范围内的漏洞赏金目标。该 PoC 会运行自己一次性的 Gitea,请勿将其指向您不拥有的任何目标。
标签:Gitea, OAuth2, Python, StruQ, 无后门, 漏洞复现环境, 越权漏洞, 逆向工具