IPBUF安全漏洞报告
English
CVE-2026-42215 CVSS 8.8 高危

CVE-2026-42215 GitPython 任意命令执行漏洞

披露日期: 2026-05-07

漏洞信息

漏洞编号
CVE-2026-42215
漏洞类型
远程代码执行 (RCE)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GitPython

相关标签

RCE代码执行GitPython参数注入Python库漏洞

漏洞概述

GitPython是一个用于与Git仓库交互的Python库。在3.1.30至3.1.47之前的版本中存在安全绕过漏洞。尽管该库默认阻止了危险的Git选项,但攻击者可以通过特定的Python kwargs绕过安全检查。如果应用将攻击者控制的参数传递给特定函数,可能导致任意命令执行。

技术细节

GitPython旨在通过过滤特定标志(如`--upload-pack`和`--receive-pack`)来缓解命令注入风险。然而,该库实现存在逻辑缺陷,它仅检查了显式的命令行字符串参数,却忽略了可以通过Python关键字参数(kwargs)传递等效配置。具体来说,`upload_pack`和`receive_pack`这两个kwargs可以直接映射到底层Git命令的危险选项中。如果开发者编写的代码允许用户输入通过kwargs流入`Repo.clone_from()`、`Remote.fetch()`、`Remote.pull()`或`Remote.push()`等API,攻击者即使未开启`allow_unsafe_options`,也能利用该绕过漏洞注入并执行任意系统命令,从而完全控制服务器。

攻击链分析

STEP 1
侦察与定位
攻击者确认目标应用程序使用了GitPython库,并定位到调用Repo.clone_from、Remote.fetch等API的代码路径。
STEP 2
构造恶意载荷
攻击者构造包含恶意命令的参数,利用Python kwargs的形式(如upload_pack)封装系统命令。
STEP 3
发送攻击请求
攻击者向应用程序发送请求,将恶意参数注入到应用逻辑中。
STEP 4
绕过安全机制
GitPython的安全过滤器仅检查命令行参数,未检查kwargs,导致恶意载荷绕过防护。
STEP 5
命令执行
底层Git进程执行了注入的命令,攻击者在服务器上获得任意代码执行权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import git # Vulnerable Scenario: App accepts user input for kwargs # Attacker controls the 'upload_pack' argument attacker_controlled_kwargs = { 'upload_pack': '; touch /tmp/pwned #' # Injected command } # The application calls clone_from with attacker-controlled kwargs try: # This bypasses the check for '--upload-pack' because it uses the kwarg git.Repo.clone_from('https://github.com/user/repo.git', '/tmp/repo', **attacker_controlled_kwargs) except Exception as e: print(e)

影响范围

GitPython >= 3.1.30, < 3.1.47

防御指南

临时缓解措施
在无法立即升级的情况下,开发者应审查所有调用GitPython API的代码,确保未将不可信的用户输入直接作为kwargs(特别是upload_pack和receive_pack)传递给Repo.clone_from、Remote.fetch、Remote.pull或Remote.push方法。建议手动过滤或白名单化这些参数。

参考链接