Git 发布了维护版本 v2.39.1,以及旧版本维护 v2.38.3、v2.37.5、v2.36.4、v2.35.6、v2.34.6、v2.33.6、v2.32.5、v2.31.6 和 v2.30.7 。这些维护版本是为了解决安全问题 CVE-2022-41903 和 CVE-2022-23521。
- CVE-2022-41903:
git log 能够使用带有 --format 说明符的任意格式显示提交。 这个功能也通过 export-subst gitattribute 暴露给 git archive。
处理填充运算符时(例如,%<(、%<|(、%>(、%>>( 或 %><( ),整数溢出可能发生在 pretty.c::format_and_pad_commit() 中,其中 size_t 不正确地存储为 int,然后作为偏移量添加到后续的 memcpy() 调用中。
这种溢出可以由用户运行调用提交格式化机制(例如,git log --format=...)的命令直接触发。 它也可以通过 export-subst 机制通过 git archive 间接触发,该机制在 git archive 期间扩展存储库文件内部的格式说明符。
这种整数溢出会导致任意堆写入,这可能会导致远程代码执行。
- CVE-2022-23521:
gitattributes 是一种允许定义路径属性的机制。 这些属性可以通过将 .gitattributes 文件添加到存储库来定义,该文件包含一组文件模式以及应该为匹配该模式的路径设置的属性。
在解析 gitattributes 时,当存在大量路径模式、单个模式的大量属性或声明的属性名称巨大时,可能会发生多个整数溢出。
这些溢出可以通过精心制作的 .gitattributes 文件触发,该文件可能是提交历史的一部分。 当从文件中解析 gitattributes 时,Git 会悄悄地拆分长度超过 2KB 的行,但当从索引中解析它们时则不会。 因此,故障模式取决于文件是否存在于工作树、索引或两者中。
这种整数溢出会导致任意堆读取和写入,这可能会导致远程代码执行。
压缩包下载地址:https://mirrors.edge.kernel.org/pub/software/scm/git/