Gogs CVE-2025-8110 & CVE-2024-56731漏洞分析
字数 1322 2025-12-17 12:11:30

Gogs CVE-2025-8110 & CVE-2024-56731 漏洞分析教学文档

1. 环境搭建

1.1 Go环境安装

sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
vim /etc/profile
# 添加以下内容:
export PATH=$PATH:/usr/local/go/bin
# 使配置生效
source /etc/profile

1.2 PostgreSQL数据库配置

# 切换到postgres用户
sudo -i -u postgres psql

# 创建Gogs用户和数据库
CREATE USER gogs WITH PASSWORD 'gogs';
CREATE DATABASE gogs;

# 连接到gogs数据库并授权
\c gogs
GRANT ALL PRIVILEGES ON DATABASE gogs TO gogs;
GRANT USAGE ON SCHEMA public TO gogs;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO gogs;

1.3 远程调试环境配置

1.3.1 安装Delve调试器

go install github.com/go-delve/delve/cmd/dlv@latest

1.3.2 配置环境变量

export PATH=$PATH:$HOME/go/bin

1.3.3 构建可调试的Gogs版本

go build -gcflags="all=-N -l" -o gogs

1.3.4 启动Delve调试服务

dlv exec ./gogs web --headless --listen=:2345 --api-version=2 --accept-multiclient

参数说明:

  • --headless:无UI模式
  • --listen=:2345:在端口2345上监听远程调试连接
  • --api-version=2:Delve的VS Code插件使用API v2
  • --accept-multiclient:允许多个调试客户端连接

1.3.5 VS Code调试配置

安装dlv插件,配置launch.json文件,连接远程调试端口2345。

2. CVE-2024-56731 漏洞分析

2.1 pre-receive hook机制

  • 定义:pre-receive hook是Git钩子,在推送操作前进行检查或执行特定操作
  • 位置:位于Git仓库的.git/hooks/目录下
  • 触发条件:Git客户端执行git push命令推送到远程仓库时自动触发

2.2 漏洞复现步骤

2.2.1 创建仓库和符号链接

# 克隆仓库
git clone [仓库地址]

# 创建符号链接指向hooks/pre-receive脚本
ln -s [目标路径] [链接路径]

2.2.2 编辑文件并提交

  1. 创建test目录
  2. 添加payload文件
  3. 提交更改

2.2.3 触发漏洞

通过git push操作触发pre-receive hook执行,成功写入文件并执行命令。

3. CVE-2025-8110 漏洞分析

3.1 UpdateRepoFile函数分析

  • 入口函数:UpdateRepoFile
  • 关键操作
    1. 调用os.MkdirAll创建符号链接
    2. 调用os.WriteFile写入文件到指定路径

3.2 漏洞触发条件

  1. 攻击者能够控制文件路径
  2. 通过特定操作触发UpdateRepoFile函数
  3. 利用符号链接和文件写入操作实现任意文件写入

3.3 漏洞验证

编写验证脚本,成功执行命令证明漏洞存在。

4. 漏洞利用链分析

4.1 组合利用方式

  1. 利用CVE-2025-8110实现任意文件写入
  2. 通过写入恶意pre-receive hook脚本
  3. 利用CVE-2024-56731触发hook执行
  4. 实现远程代码执行

4.2 防护建议

  1. 及时更新Gogs到安全版本
  2. 严格控制文件上传和路径处理
  3. 监控pre-receive hook的执行
  4. 实施最小权限原则

5. 调试技巧

5.1 远程调试要点

  • 确保Delve服务正确启动并监听指定端口
  • 配置正确的API版本(v2)
  • 使用多客户端连接参数便于调试

5.2 漏洞分析工具

  • Delve调试器:用于Go程序调试
  • VS Code:集成调试环境
  • Git钩子监控工具:检测hook执行

6. 总结

本文详细分析了Gogs系统中两个重要漏洞:

  1. CVE-2024-56731:pre-receive hook不当执行漏洞
  2. CVE-2025-8110:任意文件写入漏洞

通过环境搭建、漏洞分析、复现步骤和防护建议的完整流程,为安全研究人员提供了全面的技术参考。建议用户及时更新系统并实施相应的安全防护措施。

Gogs CVE-2025-8110 & CVE-2024-56731 漏洞分析教学文档 1. 环境搭建 1.1 Go环境安装 1.2 PostgreSQL数据库配置 1.3 远程调试环境配置 1.3.1 安装Delve调试器 1.3.2 配置环境变量 1.3.3 构建可调试的Gogs版本 1.3.4 启动Delve调试服务 参数说明: --headless :无UI模式 --listen=:2345 :在端口2345上监听远程调试连接 --api-version=2 :Delve的VS Code插件使用API v2 --accept-multiclient :允许多个调试客户端连接 1.3.5 VS Code调试配置 安装dlv插件,配置launch.json文件,连接远程调试端口2345。 2. CVE-2024-56731 漏洞分析 2.1 pre-receive hook机制 定义 :pre-receive hook是Git钩子,在推送操作前进行检查或执行特定操作 位置 :位于Git仓库的 .git/hooks/ 目录下 触发条件 :Git客户端执行 git push 命令推送到远程仓库时自动触发 2.2 漏洞复现步骤 2.2.1 创建仓库和符号链接 2.2.2 编辑文件并提交 创建test目录 添加payload文件 提交更改 2.2.3 触发漏洞 通过git push操作触发pre-receive hook执行,成功写入文件并执行命令。 3. CVE-2025-8110 漏洞分析 3.1 UpdateRepoFile函数分析 入口函数 :UpdateRepoFile 关键操作 : 调用 os.MkdirAll 创建符号链接 调用 os.WriteFile 写入文件到指定路径 3.2 漏洞触发条件 攻击者能够控制文件路径 通过特定操作触发UpdateRepoFile函数 利用符号链接和文件写入操作实现任意文件写入 3.3 漏洞验证 编写验证脚本,成功执行命令证明漏洞存在。 4. 漏洞利用链分析 4.1 组合利用方式 利用CVE-2025-8110实现任意文件写入 通过写入恶意pre-receive hook脚本 利用CVE-2024-56731触发hook执行 实现远程代码执行 4.2 防护建议 及时更新Gogs到安全版本 严格控制文件上传和路径处理 监控pre-receive hook的执行 实施最小权限原则 5. 调试技巧 5.1 远程调试要点 确保Delve服务正确启动并监听指定端口 配置正确的API版本(v2) 使用多客户端连接参数便于调试 5.2 漏洞分析工具 Delve调试器:用于Go程序调试 VS Code:集成调试环境 Git钩子监控工具:检测hook执行 6. 总结 本文详细分析了Gogs系统中两个重要漏洞: CVE-2024-56731 :pre-receive hook不当执行漏洞 CVE-2025-8110 :任意文件写入漏洞 通过环境搭建、漏洞分析、复现步骤和防护建议的完整流程,为安全研究人员提供了全面的技术参考。建议用户及时更新系统并实施相应的安全防护措施。