Xdezen/CVE-2025-8110

GitHub: Xdezen/CVE-2025-8110

针对 Gogs 0.13.3 及更早版本中 CVE-2025-8110 任意文件写入导致 RCE 漏洞的 Python PoC 利用脚本。

Stars: 0 | Forks: 0

# Gogs 任意文件写入导致 RCE (CVE-2025-8110) - 仅供教育用途的漏洞利用 本仓库包含一个 Python 编写的概念验证 (PoC) 脚本,用于演示和分析自托管 Git 服务 **Gogs**(0.13.3 及更早版本)中注册为 **CVE-2025-8110** 的漏洞。 ## ⚠️ 免责声明 ## 什么是 CVE-2025-8110? **CVE-2025-8110** 是一个严重的**任意文件写入**漏洞,由于在处理通过 Gogs 的 `PutContents` API 传入的符号链接 (*symlinks*) 时验证不足而引发。 ### 影响机制 经过身份验证的攻击者可以: 1. 创建一个本地 Git 仓库,其中包含一个指向仓库文件夹外部敏感文件(例如,服务器自身的 `.git/config` 配置文件)的符号链接。 2. 将 (*push*) 此仓库上传到 Gogs 服务器。 3. 利用 Gogs API 修改该符号链接文件。由于 API 不会验证目标是否为快捷方式,底层操作系统会跟踪该链接,并以运行 Gogs 的权限覆盖系统文件。 4. 如果 Gogs 服务以 `root` 身份运行,则可以通过将所需的命令注入 Git 配置文件的 `sshCommand` 属性中,将文件写入升级为**远程代码执行 (RCE)**。 ## 代码说明 (`exploit.py`) 该脚本利用有效的凭据和事先在 Gogs Web 界面中手动生成的 API Token,使整个漏洞利用过程自动化: ``` ┌──────────────────────────────────────────────┐ │ Máquina del Atacante (Kali) │ └──────────────────────┬───────────────────────┘ │ (1) Crea Repositorio │ (3) Sube Symlink (.git/config) Malicioso vía API │ vía git push ▼ ┌──────────────────────────────────────────────┐ │ Túnel SSH Local (puerto 8080) │ └──────────────────────┬───────────────────────┘ │ ▼ ┌──────────────────────────────────────────────┐ │ Servidor Víctima Gogs │ │ (Puerto 3001) │ └──────────────────────┬───────────────────────┘ │ │ (4) API PUT "contents" │ Sigue Symlink y escribe │ "sshCommand" en .git/config ▼ ┌──────────────────────────────────────────────┐ │ Ejecución del Payload como ROOT │ └──────────────────────────────────────────────┘ ``` ### 脚本的主要组件: 1. **`create_malicious_repo`**:使用提供的访问令牌进行身份验证,向 Gogs API (`/api/v1/user/repos`) 发送 `POST` 请求,从而动态生成随机名称并创建一个新仓库。 2. **`upload_malicious_symlink`**: - 将新创建的仓库克隆到本地临时文件夹 `/tmp/`。 - 在攻击者的本地机器上创建一个指向 `.git/config`(服务器的 Git 配置文件)的符号链接。 - 执行提交 (*commit*),并通过系统命令 (`git push`) 将更改推回服务器。 3. **`exploit`**:利用 Git 的 `sshCommand` 属性中的注入技巧定义负载 (payload)。通过 API 更新内容时,Gogs 将被迫覆盖服务器上的 `.git/config` 文件。当触发 Git 流程的最后一步时,Gogs 系统会执行终端命令(Bash 反向 shell),从而将连接返回到你的 Netcat 监听器。 ## 实验环境使用指南 (HTB - Silentium) ### 前置条件 在运行脚本之前,请确保在 Git 中配置了全局身份信息,以避免在自动提交时出现错误: ``` git config --global user.email "estudiante@seguridad.local" git config --global user.name "estudiante" ### 用法:python3 exploit.py -u (http://127.0.0.1:8080) -lh -lp 4446 ```
标签:CISA项目, PoC, Python, Web报告查看器, 安全, 无后门, 暴力破解, 网络安全研究, 超时处理, 逆向工具