Gogs最新RCE分析与利用详情
字数 1256 2025-09-01 11:26:17
Gogs最新RCE漏洞分析与利用教学文档
1. Gogs系统简介
Gogs(Go Git Service)是一款用Go语言编写的轻量级、开源的Git仓库托管系统,设计目标是让搭建和维护Git服务变得简单、快速,同时提供类似GitHub的功能。
核心功能
- 仓库管理:创建、克隆、推送或拉取Git仓库
- 用户认证:支持本地账号、LDAP、OAuth等
- Web界面交互:仓库管理、代码浏览、Issue跟踪等
- Git协议处理:处理git clone、push等请求
- 后端服务:用户管理、权限控制、通知、Wiki等
2. 漏洞原理分析
2.1 Git命令执行机制
Git本身可以通过配置实现命令执行:
.git/config文件中的[core]部分可以配置sshCommand- 当Git执行操作时,会解析并执行
sshCommand中的命令
恶意config示例:
[core]
sshCommand = "echo test > /tmp/test"
2.2 Git仓库识别机制
Git通过检查特定文件来判断目录是否为标准仓库:
- 当
.git目录下的关键文件(如HEAD)被删除时 - Git会向上级目录寻找符合仓库标准的目录
- 如果上级目录符合标准,会使用该目录的config配置
2.3 漏洞利用链
- 任意文件删除漏洞:通过符号链接绕过对
.git目录的直接删除限制 - 破坏仓库完整性:删除
.git/HEAD等关键文件 - 命令执行:在上级目录放置恶意config文件,触发Git命令执行
3. 漏洞利用步骤
3.1 准备阶段
- 注册账号:Gogs系统需开放注册功能
- 添加SSH公钥:将攻击机的
id_rsa.pub添加到Gogs账户
3.2 创建符号链接
必须在Linux系统上执行:
mkdir test_repo
cd test_repo
ln -s /path/to/original/.git true_git_dir
3.3 构造恶意仓库
- 从GitHub克隆一个标准仓库
- 修改
.git目录结构,确保包含必要文件 - 添加符号链接文件
- 将仓库push到Gogs
3.4 触发任意文件删除
- 通过Web界面尝试删除文件
- 拦截请求,修改URL指向
.git/HEAD:http://[target]/[user]/[repo]/_delete/[branch]/true_git_dir/HEAD
3.5 触发命令执行
- 在仓库中进行任意提交操作
- 后端执行Git命令时会使用恶意config
- 命令执行成功(虽然UI会显示错误)
4. 防御措施
- 更新Gogs版本:确保使用最新修复版本
- 符号链接处理:严格检查上传文件中的符号链接
- 文件删除限制:加强对
.git目录的保护 - 权限控制:限制用户对关键目录的操作权限
5. 测试注意事项
- 系统要求:必须在Linux攻击机上进行测试
- 版本检测:可通过错误信息判断目标版本是否受影响
- UI反馈:成功利用会显示错误,但命令已执行
6. 技术要点总结
- Git机制利用:结合
sshCommand和仓库识别机制 - 符号链接绕过:突破对
.git目录的直接操作限制 - 漏洞链组合:文件删除+命令执行实现RCE
- 跨平台限制:Windows无法正确处理Linux符号链接
此漏洞巧妙结合了Git内部机制、符号链接特性和文件删除漏洞,形成了完整的利用链,展示了安全研究中对系统特性的深入理解和创造性利用。