漏洞总结:Git 参数注入漏洞 (CVE-2026-3515) 漏洞概述 漏洞名称:Git Argument Injection via Reference Field in GitHubRepository Block in prefecthq/prefect CVE ID:CVE-2026-3515 严重程度:高危 (High 8.5) 受影响版本:3.6.18 漏洞类型:CWE-88: Argument Injection 修复状态:已修复 (Awaiting fix) 发现者:optimus-fulcria 描述: 在 代码库中, 块在构建 命令时,将用户可控的 字段与 进行字符串拼接。随后,该命令字符串被 解析。攻击者可以通过在 字段中注入空格,使 将其拆分为多个参数,从而注入任意的 git 命令行选项。 影响范围 该漏洞允许攻击者(能够配置 GitHubRepository 块的较低权限用户)在 Prefect 部署中执行以下操作: 1. SSRF:将 git clone 流量重定向到攻击者控制的 HTTP 代理,从而访问内部网络资源。 2. 凭证窃取:当 GitHub 凭证配置在块上时,克隆 URL 中包含 token。通过路由流量到恶意代理,攻击者可以拦截并窃取 GitHub 访问 token。 3. 远程代码执行 (RCE):对于基于 SSH 的仓库 URL,注入 会导致在初始化 SSH 连接时执行任意命令,从而在 worker 基础设施上获得代码执行权限。 修复方案 状态:页面显示状态为 "Awaiting fix"(等待修复)。 建议: 升级 到修复后的版本。 在修复前,避免在 字段中使用不可信的用户输入。 参考代码中的安全模式:使用列表构建命令参数,而不是字符串拼接。例如: 。 代码片段提取 1. 漏洞代码 (Vulnerable Code) 位于 中的 和 函数: 2. 安全模式示例 (Safe Pattern) 页面中提供的 GitLab/BitBucket 安全构建方式: 3. 概念验证代码 (Proof of Concept) 4. 利用步骤 (To exploit in Prefect) 1. 通过 Prefect API 或 UI 创建一个 块。 2. 将 设置为一个有效的仓库(例如 )。 3. 将 设置为恶意值,例如 。 4. 当该块在部署的 pull 步骤中使用时,注入的 选项会导致 git 流量通过攻击者的代理路由。 5. 如果该块配置了 GitHub 凭证,则 URL 中的 token 会通过代理被外泄。