CVE-2026-42284GitPython是一个用于与Git仓库交互的Python库。在3.1.47版本之前,`_clone()`方法对`multi_options`参数的验证机制存在逻辑缺陷。攻击者可以利用此缺陷注入恶意的Git配置参数(例如`core.hooksPath`),从而在仓库克隆操作期间触发任意代码执行。该漏洞已在3.1.47版本中修复。
该漏洞的根本原因在于GitPython的`_clone()`函数对`multi_options`参数的处理逻辑存在不一致性。验证阶段,代码检查原始列表元素是否以允许的选项(如`--branch`)开头。然而,在执行阶段,代码先将`multi_options`列表通过空格拼接成字符串,随后使用`shlex.split()`进行重新分割。这种处理方式允许攻击者将多个参数注入到一个看似合法的参数字符串中。例如,传入`"--branch main --config core.hooksPath=/x"`,验证时仅检查前缀合法,但在分割后变成了四个独立的参数`["--branch", "main", "--config", "core.hooksPath=/x"]`。随后,Git在执行克隆操作时会解析隐藏的`--config`参数,将`core.hooksPath`指向攻击者控制的路径,进而触发恶意钩子脚本,实现远程代码执行。