开源自托管Git服务 Gogs 正面临一次严重安全危机。一项CVSS评分高达9.4的远程代码执行(RCE)漏洞被披露后,项目维护团队在两个多月内几乎没有任何公开进展,而攻击代码已经被集成进 Metasploit,使漏洞利用门槛大幅降低。

这意味着,只要拥有普通认证账户,攻击者就可能在默认配置的Gogs服务器上获得系统级执行权限,进一步窃取凭据、MFA密钥,甚至篡改代码仓库,发动供应链攻击。

漏洞细节

该漏洞由 Jonah Burgess 发现,并于今年3月17日通过GitHub安全公告渠道提交给Gogs团队。

问题出现在Gogs处理Pull Request合并流程的Merge()函数中。当仓库启用了“Rebase before merging(合并前变基)”功能时,PR目标分支名称会被直接传递给git rebase命令,但代码没有使用--来区分参数和分支名,也没有对输入进行充分过滤。

Gogs
Gogs

攻击者因此可以创建恶意分支名,例如:

--exec=touch${IFS}/tmp/rce_proof

Git会把它解释成--exec参数而不是分支名称,从而执行任意系统命令。

由于漏洞位于Git命令调用层面,因此影响:

  • Linux
  • Windows
  • macOS

以及各种安装方式部署的Gogs实例。

研究人员还特别开发了跨平台利用模块,能够根据目标系统自动调整攻击载荷。

更令人担忧的是:无人修复

根据Burgess披露的信息,Gogs维护者曾在3月28日确认收到报告,但此后一直没有回应。

在长达两个多月的协调披露期间:

  • 未提供修复计划
  • 未回复状态更新请求
  • 未申请延长披露时间
  • GitHub安全公告页面长期无人处理

由于官方补丁迟迟未出现,Rapid7团队已自行提交修复Pull Request,目前仍等待审核。

与此同时,Gogs的重要赞助商 DigitalOcean 也没有公开回应相关问题。

风险有多大?

攻击成功后,攻击者可能:

  • 获取服务器控制权
  • 读取数据库内容
  • 窃取用户密码哈希
  • 窃取MFA密钥
  • 修改源代码仓库
  • 向下游用户投放恶意代码
  • 实施供应链攻击

对于面向互联网开放注册的Gogs实例来说,风险尤其突出,因为攻击者甚至不需要管理员权限。

临时缓解措施

在官方补丁发布前,研究人员建议管理员立即采取以下措施:

1. 关闭公开注册

修改app.ini

DISABLE_REGISTRATION = true

防止陌生用户创建账户。

2. 禁止普通用户创建仓库

MAX_CREATION_LIMIT = 0

这样可以阻断最简单的攻击路径——攻击者自行创建开启Rebase功能的新仓库。

不过需要注意,这并不能完全消除风险。如果攻击者已经拥有现有仓库的写权限,仍然可能利用该漏洞发动攻击。

影响与启示

这起事件再次暴露出部分开源项目面临的维护困境:软件仍被广泛使用,但维护资源不足,导致严重安全漏洞长时间无人处理。当公开利用代码已经出现而补丁尚未发布时,防守方往往会陷入被动。

对于仍在使用Gogs的组织而言,现在最重要的不是等待补丁,而是立即检查实例配置、限制用户权限,并密切关注项目后续修复进展。特别是允许外部用户注册或协作的Gogs服务器,应视为高风险目标并优先采取防护措施。