Git安全审计揭示关键溢出漏洞
Ben Dickson
2023年1月20日 15:00 UTC
更新:2023年1月20日 16:34 UTC
DevSecOps | 漏洞 | 研究
审计发现多重安全隐患
对Git源代码的安全审计揭示了多个漏洞,包括两个关键溢出漏洞。该审计由开源技术改进基金(OSTIF)赞助,X41 D-Sec和GitLab执行,同时还发现了多个高、中、低严重性问题。鉴于Git的流行度及其与常见打包系统的集成,这些漏洞可能对软件供应链安全产生巨大影响。
恶意克隆操作
研究人员发现的最严重缺陷是一个内存损坏漏洞,在Git解析仓库的.gitattributes文件时可能被触发。开发者使用.gitattributes来自定义Git处理仓库中不同文件和文件路径的方式,例如行尾符、文件编码等。
研究人员发现,如果.gitattributes包含非常长的属性行或大量属性行,会导致解析文件的函数发生计数器溢出,进而实现任意代码执行。
攻击者可通过向仓库提交恶意的.gitattributes文件来利用该漏洞。当受害者对该仓库执行git clone
或git pull
时,漏洞即被触发。由于该漏洞不需要在受害者计算机上使用特殊参数或命令,因此可能成为危险供应链攻击的重要组成部分。
X41 D-Sec董事总经理Markus Vervier向The Daily Swig表示:“如果攻击者能将其部署在流行库上,可能会影响使用该库的Git客户端,甚至波及使用常见包系统安装软件的用户。”
Vervier还指出,该漏洞也可用于攻击Git服务器,如GitHub或GitLab,但他补充说GitLab和GitHub均已发布补丁。
美观但恶意
研究人员发现的第二个关键漏洞允许在Git forge(如GitHub和GitLab)常执行的归档操作期间执行代码。
git log
和git archive
命令可以使用美观格式化显示提交。在处理填充操作符时,如果使用特殊的格式说明符模式,美观格式解析器可能发生整数溢出。
如果用户使用--format
说明符运行git log
命令,该溢出漏洞会直接触发;或者通过export-subst机制间接调用git archive
命令时也会触发。
GitLab安全工程师Joern Schneeweisz向The Daily Swig确认,攻击者可通过向git log
命令注入参数来触发该漏洞。但他表示,更有趣的攻击向量是git archive
操作。
攻击者可在仓库的.gitattributes文件中包含export-subst语句。Schneeweisz指出,这将通过git archive
命令触发漏洞,无需任何注入参数。
“有效载荷将自包含在仓库中,并通过调用git archive
触发,”Schneeweisz说。“对任意仓库运行git archive
是Git forge(如GitLab或GitHub)非常常见的操作,因此该问题主要对它们构成RCE(远程代码执行)威胁。”
供应链威胁
除了关键漏洞外,研究人员还发现许多与整数相关的问题,可能导致拒绝服务、越界读取或简单地对大输入处理不当的边界情况。Vervier表示,这些发现与软件供应链安全高度相关。
“Git基本上是当前IT环境中的终极供应链攻击向量,因为它甚至被Rust/Cargo、Golang、NodeJS等包管理器广泛使用。它也是最广泛使用的源代码版本控制工具,”他说。
推荐阅读
Squaring the CircleCI:DevOps平台发布最近漏洞的事后分析
DevSecOps | 漏洞 | 研究 | GitHub | RCE | 开源软件 | 供应链攻击 | 核心