漏洞概述 Gogs v0.14.3 版本中存在多个安全漏洞,涉及身份验证、权限控制、跨站脚本(XSS)、服务器端请求伪造(SSRF)等问题。 影响范围 身份验证绕过:反向代理认证头被任何远程地址信任,允许用户冒充。 权限控制问题: - 组织团队和成员管理操作接受 GET 请求,允许登录用户通过 crafted 链接添加攻击者到组织团队。 - 缺少授权检查,允许任何人下载属于私有仓库的附件。 - 只读 Git HTTP 访问可能与仓库推送中的写访问混淆。 - 组织元数据和团队列表端点无需认证即可访问。 跨站脚本(XSS): - 在 Jupyter Notebook 预览中通过 Markdown 链接存储 XSS。 - 在里程碑下拉菜单中通过 crafted 里程碑名称存储 XSS。 - 在 Markdown 单元格中通过 raw HTML 存储 XSS。 服务器端请求伪造(SSRF): - 通过 HTTP 重定向和 stale host 验证在存储的镜像 URL 中 SSRF。 - 通过 pull request 变基合并与 crafted 分支名称 SSRF。 其他安全问题: - 任意文件写入:通过 crafted 上传文件名绕过目录符号链接。 - 远程代码执行:通过 API 中的组织名称遍历。 - SSH 握手问题:内置 SSH 服务器不再丢弃未完成握手的连接。 修复方案 身份验证绕过:仅信任来自特定地址的反向代理认证头。 权限控制问题: - 组织团队和成员管理操作仅接受 POST 请求。 - 添加授权检查,限制私有仓库附件的下载。 - 明确区分只读和写访问权限。 - 对组织元数据和团队列表端点进行认证。 跨站脚本(XSS): - 对 Jupyter Notebook 预览中的 Markdown 链接进行转义。 - 对里程碑下拉菜单中的 crafted 里程碑名称进行转义。 - 对 Markdown 单元格中的 raw HTML 进行转义。 服务器端请求伪造(SSRF): - 对存储的镜像 URL 进行严格的 host 验证。 - 对 pull request 变基合并中的 crafted 分支名称进行验证。 其他安全问题: - 对上传文件名进行严格验证,防止任意文件写入。 - 对 API 中的组织名称遍历进行限制。 - 改进 SSH 握手处理,丢弃未完成握手的连接。 代码块 无 POC 代码或利用代码。