漏洞概述 漏洞名称: UploadRepoFiles writes outside repo working tree via committed parent sym 漏洞描述: 方法在检查符号链接时仅检查上传目标的叶子节点( )。 攻击者可以通过构造多部分上传,利用文件名中的反斜杠( )绕过 和 的检查,从而在仓库工作树之外创建文件。 该漏洞允许攻击者在 用户下执行任意命令,导致远程代码执行(RCE)。 影响范围 受影响版本: 修复版本: CVSS v3 基础指标: - 攻击向量: 网络 - 攻击复杂度: 低 - 攻击要求: 存在 - 用户交互: 无 - 特权要求: 低 - 受影响系统影响指标: - 机密性: 高 - 完整性: 高 - 可用性: 高 修复方案 1. 替换检查逻辑: 在 行,使用 替换现有的检查逻辑。 2. 提前检查: 在 之前,在 方法中检查 ,以防止预存在的符号链接组件导致目录创建在仓库之外。 3. 关闭符号链接跟随: 在 中打开 ,关闭符号链接跟随。 4. 拒绝包含反斜杠的文件名: 在 中,拒绝包含 或 的文件名,阻止浏览器路径组件从输入中传递。 POC 代码 其他可达目标(相同原语) 独立确认 影响 已认证的 RCE: 从一次写入中作为 gogs 运行时 UID 运行。链:种植符号链接(一次 git push)- 上传带有文件名的文件 - 提交 - 写入 - SSH 进入。 横向目标: gogs sqlite DB(重写 admin row)、裸仓库钩子脚本(在每次推送时由任何具有 权限的用户运行)。 持久性: 符号链接和密钥都幸存重启,移除攻击者的访问不会撤销 SSH 访问。 Linux/macOS 仅: Windows 主机不受影响,因为两个独立原因( 分隔符处理、 核心 默认)。