主要观点:在类 Unix 平台上,使用git clone --recursive
在不可信仓库时可能导致远程代码执行。需更新 Git 及包含 Git 的其他软件到固定版本,.gitmodules
文件的配置格式支持 DOS 行结束符,会导致一些问题,如配置文件读写时对回车字符的处理不当,可能使恶意文件写入文件系统任意位置实现任意文件写入,GitHub Desktop 默认递归克隆易受影响,补丁只需在write_pair
中对含回车字符的字符串进行引号处理。这不是 Git 首次因回车字符出问题,之前就有相关漏洞,此为对 Git 审计发现的多个漏洞之一,可类比 HTTP 中的 CRLF 注入等。
关键信息:
- Unix 用 LF 分离行,Windows 和部分协议用 CR+LF。
.gitmodules
文件配置格式及处理回车字符的函数get_next_char
。git config
写配置文件的代码及存在的漏洞。.gitmodules
中含控制字符的路径在处理时的变化及对克隆子模块的影响。- GitHub Desktop 默认递归克隆的风险及相关演示。
- 修复补丁及可能的利用方式等。
重要细节:
get_next_char
函数中对回车和换行字符的处理逻辑。write_pair
函数中对字符串引号处理的逻辑及漏洞所在。- 不同系统对行结束符的处理差异及导致的问题。
- 审计发现的其他漏洞及今日发布的修复版本等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。