GitPython中存在的代码执行漏洞CVE-2024-22190
GitPython是一个用于与Git存储库交互的Python库,用来和Git资料库交互,提供各种级别的操作如Git对象的抽象封装以简化数据的访问。
GitPython是一个强大的Python库,提供Git对象抽象封装以简化数据的访问、提供与Git交互高级接口,轻松在Python脚本中管理版本库。
一、基本情况
GitPython模拟Git命令行接口通过对象模型方式抽象版本库(Repository)、分支(panch)、标签(TagObject)和提交(Commit)等。
GitPython可以实现高级git-porcelain 和低级的 git-plumbing,是经常需要自动化Git操作,比如创建分支、提交文件或拉取最新代码的工具。
栋科技漏洞库关注到GitPython中修复一个任意代码执行漏洞,漏洞追踪为CVE-2024-22190,CVSS评分为7.8,漏洞细节及PoC已公开。
二、漏洞分析
CVE-2024-22190是GitPython代码执行漏洞,源于CVE-2023-40590修复不完善,后者是Windows不可信的搜索路径导致的代码执行漏洞。
CVE-2023-40590漏洞回顾:
GitPython作为一个可用于与Git库交互的Python库,当解析一个程序的时候,Python/Windows会寻找当前工作目录,然后才是路径环境。
GitPython默认使用“git”命令,若用户从repo运行GitPython时有“git.exe”或“git”可执行文件,则该程序将被运行,而非用户“PATH”中的程序。
这更多的是关于Python如何与Windows系统交互问题,Linux和任何其他操作系统不受影响,使用GitPython的人通常从仓库CWD运行它。
这就导致了攻击者可以诱骗用户下载带有恶意“git”可执行文件的存储库,若用户从该目录运行/导入GitPython,攻击者就可运行任意命令。
CVE-2024-22190分析
在Windows系统中,如果GitPython使用的是shell来运行git,以及当它运行bash.exe来解释 hooks 的时候,就会使用不受信任的搜索路径,
可能执行在不受信任的搜索路径中找到的程序。
如果在Windows上使用这些功能中的任意一个,就可能会导致从不受信任的存储库中运行恶意git.exe或bash.exe,从而导致任意代码执行。
三、 影响范围
GitPython < 3.1.4
四、 修复建议
目前该漏洞已经修复,受影响用户可升级到GitPython 版本3.1.4。
缓解建议:
1、当使用shell时,将NoDefaultCurrentDirectoryInExePath传递到子进程环境中,因为子进程就是实际执行路径搜索的cmd.exe shell。
2、在使用bash.exe子进程运行hooks的Popen调用期间,在GitPython进程环境中设置NoDefaultCurrentDirectoryInExePath。
五、 参考链接
https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-2mqj-m65w-jghx
https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-wfm5-v35h-vwf4