Git 2.38.1 现已发布,同时发布的还有旧版本的更新,包括 v2.30.6、v2.31.5、v2.32.4、v2.33.5、v2.34.5、v2.35.5、v2.36.3 和 v2.37.4。这些维护版本主要是为了解决新发现的两个安全问题 CVE-2022-39253 和 CVE-2022-39260。
第一个与 --local 克隆优化有关,导致从恶意存储库克隆时,$GIT_DIR 中可能出现任意文件。另一个漏洞是关于传递给 git shell 子命令的命令字符串过长,最终可能导致任意堆写入和远程代码执行。
具体为:
- CVE-2022-39253:当依赖 --local 克隆优化时,Git 会在源仓库中解除对符号链接的引用,然后在目标仓库中创建解除引用链接的 hardlinks(或副本)。这可能会导致 surprising behavior,当从恶意软件库克隆时,任意文件都可能会出现在存储库的“$GIT_DIR”中。Git 将不再通过 --local 克隆机制解除对符号链接的引用,而是拒绝克隆在 $GIT_DIR/objects 目录中下存在符号链接的仓库。此外,protocol.file.allow 的值更改为默认为“user”。
- CVE-2022-39260:给 git shell 的命令字符串过长可能会导致 split_cmdline() 溢出,当 git shell 被暴露且 $HOME/git-shell-commands 目录存在时,导致任意堆写和远程代码执行。git shell 被教导要拒绝大小超过 4MiB 交互式命令。split_cmdline() 被强化y拒绝大于 2GiB 的输入。
更多详情可查看官方公告。