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 漏洞利用链

  1. 任意文件删除漏洞:通过符号链接绕过对.git目录的直接删除限制
  2. 破坏仓库完整性:删除.git/HEAD等关键文件
  3. 命令执行:在上级目录放置恶意config文件,触发Git命令执行

3. 漏洞利用步骤

3.1 准备阶段

  1. 注册账号:Gogs系统需开放注册功能
  2. 添加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 构造恶意仓库

  1. 从GitHub克隆一个标准仓库
  2. 修改.git目录结构,确保包含必要文件
  3. 添加符号链接文件
  4. 将仓库push到Gogs

3.4 触发任意文件删除

  1. 通过Web界面尝试删除文件
  2. 拦截请求,修改URL指向.git/HEAD
    http://[target]/[user]/[repo]/_delete/[branch]/true_git_dir/HEAD
    

3.5 触发命令执行

  1. 在仓库中进行任意提交操作
  2. 后端执行Git命令时会使用恶意config
  3. 命令执行成功(虽然UI会显示错误)

4. 防御措施

  1. 更新Gogs版本:确保使用最新修复版本
  2. 符号链接处理:严格检查上传文件中的符号链接
  3. 文件删除限制:加强对.git目录的保护
  4. 权限控制:限制用户对关键目录的操作权限

5. 测试注意事项

  1. 系统要求:必须在Linux攻击机上进行测试
  2. 版本检测:可通过错误信息判断目标版本是否受影响
  3. UI反馈:成功利用会显示错误,但命令已执行

6. 技术要点总结

  1. Git机制利用:结合sshCommand和仓库识别机制
  2. 符号链接绕过:突破对.git目录的直接操作限制
  3. 漏洞链组合:文件删除+命令执行实现RCE
  4. 跨平台限制:Windows无法正确处理Linux符号链接

此漏洞巧妙结合了Git内部机制、符号链接特性和文件删除漏洞,形成了完整的利用链,展示了安全研究中对系统特性的深入理解和创造性利用。

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示例 : 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系统上执行 : 3.3 构造恶意仓库 从GitHub克隆一个标准仓库 修改 .git 目录结构,确保包含必要文件 添加符号链接文件 将仓库push到Gogs 3.4 触发任意文件删除 通过Web界面尝试删除文件 拦截请求,修改URL指向 .git/HEAD : 3.5 触发命令执行 在仓库中进行任意提交操作 后端执行Git命令时会使用恶意config 命令执行成功(虽然UI会显示错误) 4. 防御措施 更新Gogs版本 :确保使用最新修复版本 符号链接处理 :严格检查上传文件中的符号链接 文件删除限制 :加强对 .git 目录的保护 权限控制 :限制用户对关键目录的操作权限 5. 测试注意事项 系统要求 :必须在Linux攻击机上进行测试 版本检测 :可通过错误信息判断目标版本是否受影响 UI反馈 :成功利用会显示错误,但命令已执行 6. 技术要点总结 Git机制利用 :结合 sshCommand 和仓库识别机制 符号链接绕过 :突破对 .git 目录的直接操作限制 漏洞链组合 :文件删除+命令执行实现RCE 跨平台限制 :Windows无法正确处理Linux符号链接 此漏洞巧妙结合了Git内部机制、符号链接特性和文件删除漏洞,形成了完整的利用链,展示了安全研究中对系统特性的深入理解和创造性利用。