Forgejo 16.0.4修复关键RCE漏洞:模板变量展开可致任意数据泄露

AI 画家正在创作中

自托管Git平台Forgejo于9月10日紧急发布16.0.4版本,修复一个被评为"关键"级别的远程代码执行漏洞。该漏洞存在于模板仓库生成新仓库的流程中:Forgejo克隆模板仓库、移除.git文件夹、对.forgejo/template目录中列出的文件进行变量模板展开、然后初始化新git仓库的过程中,变量展开步骤可被恶意用户利用,导致服务器端任意文件内容被泄露。任何拥有仓库创建权限的用户均可能触发此漏洞,而Forgejo默认配置下所有注册用户均拥有创建仓库的权限。

漏洞成因与修复方案

漏洞的技术根因在于模板变量展开发生在.git文件夹移除之后、新仓库初始化之前的时间窗口内。攻击者通过在模板仓库的特定文件中注入特殊变量语法,可以使Forgejo服务器在生成新仓库时读取并返回Forgejo进程可访问的任意文件内容。这意味着托管在同一实例上的其他仓库、配置文件、甚至系统敏感文件均存在被读取的风险。对于开放注册的公共Forgejo实例(包括Codeberg等知名社区),该漏洞的影响范围尤其广泛。

修复方案是在变量展开完成后、git仓库初始化之前,再次移除目录中可能残留的.git文件夹,阻断变量展开对git仓库结构的干扰路径。Forgejo安全团队同时审查了整个模板生成流水线,确认此时间窗口是唯一可被利用的攻击面。修复已通过PR14300和PR14301两个补丁合入代码库,并在16.0.4版本中发布。受影响版本为Forgejo16.0.3及以下所有支持版本,升级至16.0.4是唯一彻底的修复措施。对于无法立即升级的实例,关闭开放注册可将攻击面收窄至已有账号用户,但不能完全消除风险,因为任何拥有仓库创建权限的账号均可触发该漏洞。Codeberg自身在漏洞披露前已完成升级,作为全球最大的Forgejo公共实例,其快速响应为其他公共实例运营者树立了应急处理的参考样板。

自托管Git平台的安全治理挑战

这一事件凸显了自托管代码平台面临的安全治理难题。Forgejo作为Gitea的社区分叉,以去中心化和用户自主控制为核心价值,但开放注册的设计直接扩大了攻击面。Forgejo安全团队建议所有自托管实例运营者立即升级至16.0.4版本,并在Codeberg安全公告仓库订阅后续安全通知。对于无法立即升级的实例,关闭开放注册是降低风险的临时缓解措施。

更广泛的背景是,自托管基础设施正成为攻击者的重点目标。Forgejo、Gitea等平台的实例数量在过去两年快速增长,但许多小型实例的运营者缺乏专业的安全运维能力,版本更新往往滞后数周甚至数月。此次漏洞的公开披露方式(在版本发布时即公开详细技术说明)也引发了社区对"先升级后披露"与"同步披露"策略的讨论。对于任何面向多用户的Forgejo实例,升级至16.0.4是当前最高优先级的运维任务。