GitPython 命令注入漏洞总结 漏洞概述 GitPython 存在命令注入漏洞。虽然 GitPython 默认阻止了危险的 Git 选项(如 和 ),但攻击者可以通过传递 Python 关键字参数(kwarg)来绕过此检查。 技术细节: 1. 验证机制缺陷:GitPython 在将 Python 关键字参数转换为 Git 命令行标志之前,会检查原始关键字名称是否安全。 2. 绕过方式:由于 Python 关键字使用下划线(如 ),而 Git 标志使用连字符(如 ),攻击者可以使用下划线形式的参数。 3. 执行流程: 检查阶段: 不在黑名单中,通过检查。 转换阶段: 被转换为 。 结果:最终执行了被禁止的 Git 命令,导致任意命令执行。 影响范围 受影响版本:GitPython >= 3.1.30 受影响函数: , , , 风险场景: 允许用户配置仓库导入、同步、镜像、拉取或推送行为的 Web 应用。 接受用户提供的“额外 Git 选项”字典的系统。 CI/CD 系统、工作器、自动化机器人或内部工具,如果它们从不受信任的集成设置或作业定义(yaml, json 等)构建 GitPython 调用。 潜在后果:SSH 密钥/凭证泄露、仓库/构建产物篡改、横向移动、工作器/服务进程完全控制。 修复方案 修复版本**:>= 3.1.47 概念验证代码 (PoC)