GLSA-202312-15:Git:多个漏洞

critical Nessus 插件 ID 187314

语言:

描述

远程主机受到 GLSA-202312-15 中所述漏洞的影响(Git:多个漏洞)

- Git 是分布式版本控制系统。 gitattributes 是一种允许定义路径属性的机制。可通过将 `.gitattributes` 文件添加到存储库来定义这些属性,该文件包含一组文件模式以及应为匹配此模式的路径设置的属性。解析 gitattributes 时,当存在大量路径模式、大量单一模式的属性或声明的属性名称很大时,可能会发生多个整数溢出。这些溢出可通过构建的 `.gitattributes` 文件触发,该文件可能是提交历史记录的一部分。从文件解析 gitattributes 时,Git 会静默拆分超过 2KB 的行,但从索引解析它们时则不会。因此,失败模式取决于文件是否存在于工作树、索引或两者中。此整数溢出可导致任意堆读取和写入,从而可能导致远程代码执行。已在 2023 年 1 月 17 日发布的版本中修补该问题,恢复到 v2.30.7。建议用户升级。目前尚无针对此问题的解决方案。(CVE-2022-23521)

- Git for Windows 是 Git 的一个分支,其中包含 Windows 专用补丁。此漏洞会影响在多用户计算机上工作的用户,其中不受信任的相关方对同一硬盘具有写入权限。不受信任的相关方可以创建文件夹 `C: \.git`,当搜索 Git 目录时,本应在存储库外部运行的 Git 操作可访问该文件夹。然后,Git 会应用上述 Git 目录中的任何配置。设置“GIT_PS1_SHOWDIRTYSTATE”的 Git Bash 用户也容易受到攻击,这些用户可以仅通过启动 PowerShell 来安装 posh-gitare。Visual Studio 等 IDE 用户容易受到影响的原因在于,这类用户在创建新项目时就可以读取并应用 `C: \.git\config` 中指定的配置。Git for Microsoft 分支用户容易在启动 Git Bash 时受到攻击。此问题已在 Git for Windows 2.35.2 版本中得到解决。对于无法升级的用户,可以在所有运行 Git 命令的驱动器上创建文件夹 `.git`,并从这些文件夹中删除读取/写入访问权限来解决此问题。
或者,可以定义或扩展 `GIT_CEILING_DIRECTORIES` 以涵盖用户配置文件的 _parent_ 目录,例如 `C: \Users`(如果用户配置文件位于 `C: \Users\my-user-name` 中)。(CVE-2022-24765)

- Git 是一个分布式版本控制系统。低于 2.37.1、2.36.2、2.35.4、2.34.4、2.33.4、2.32.3、2.31.4 和 2.30.5 版本的 Git 在所有平台中都容易受到特权提升漏洞的影响。没有防备的用户仍可能受到 CVE-2022-24765 中所报告问题的影响,例如,当以根用户身份导航至其拥有的共享 tmp 目录时,攻击者可在此创建 git 存储库。 2.37.1、2.36.2、2.35.4、2.34.4、2.33.4、2.32.3、2.31.4 和 2.30.5 版包含针对此问题的补丁。若要避免受到示例中所述漏洞的影响,最简单的方法是避免以根用户身份(或 Windows 中的管理员身份)运行 git,并且必要时应将其使用率降至最低。虽然没有通用的变通方案,但可以通过删除任何已经存在的此类存储库并以根用户身份创建一个存储库以阻止任何未来的攻击,从而增强系统抵御示例中所述漏洞的能力。(CVE-2022-29187)

Git 是一种可扩展的开源分布式版本控制系统。 2.30.6、2.31.5、2.32.4、2.33.5、2.34.5、2.35.5、2.36.3 和 2.37.4 之前的版本容易将敏感信息泄露给恶意攻击者。执行本地克隆(即克隆的源和目标位于同一卷上)时,Git 通过创建指向源内容的硬链接或复制它们(前提是已通过“--no-hardlinks”禁用硬链接)将源内容的“$GIT_DIR/objects”库复制到目标位置。恶意攻击者可诱使受害者通过指向受害者计算机上敏感信息的符号链接来克隆存储库。这可以通过让受害者在同一台机器上克隆恶意存储库来完成,或者让他们通过任何来源的子模块克隆一个嵌入为裸露存储库的恶意存储库,前提是他们使用 `--recurse-submodules` 选项克隆。
Git 不在 `$GIT_DIR/objects` 目录中创建符号链接。已在 v2.30.x 到 2022 年 10 月 18 日发布的版本中修补此问题。潜在的变通方案:避免在共享机器上使用 `--local` 优化克隆不受信任的库,方法是向 `git clone` 传送 `--no-local` 选项或克隆使用 `file: //` 方案中的网址。或者,避免使用 `--recurse-submodules` 或运行 `git config --global protocol.file.allow user` 从不受信任的来源克隆存储库。 (CVE-2022-39253)

- Git 是一个开源、可扩展的分布式版本控制系统。 `git shell` 是一种受限的登录 shell,可用于通过 SSH 实现 Git 的推送/拉取功能。在 2.30.6、2.31.5、2.32.4、2.33.5、2.34.5、2.35.5、2.36.3 和 2.37.4 之前的版本中,将命令参数拆分为数组的函数未正确使用 `int` 来表示数组中的条目,允许恶意参与者故意溢出返回值,导致任意堆写入。由于系统随后将生成的数组传递给“execv()”,因此可以利用此攻击在受害计算机上实现远程代码执行。请注意,受害者必须首先允许将 `git shell` 作为登录 shell 进行访问,以便容易受到此攻击。此问题已在 2.30.6、2.31.5、2.32.4、2.33.5、2.34.5、2.35.5、2.36.3 和 2.37.4 版本中得到修复,建议用户升级到最新版本。
通过远程登录禁用 “git shell” 访问是一种可行的短期变通方案。(CVE-2022-39260)

- Git 是分布式版本控制系统。 `git log` 可以使用其 `--format` 说明符以任意格式显示提交。此功能也会通过 `export-subst` gitattribute 暴露给 `git archive`。处理填充运算符时,在“pretty.c”中存在整数溢出:: format_and_pad_commit()`,其中 `size_t` 被错误地存储为 `int`,然后作为偏移添加到 `memcpy()`。运行调用提交格式化机制的命令的用户可直接触发此溢出(例如,`git log --format=...`)。它也可以借助 git archive 通过 export-subst 机制间接触发,该机制在 git 存档期间扩展存储库内文件的格式说明符。此整数溢出可导致任意堆写入,从而可能导致任意代码执行。已在 2023 年 1 月 17 日发布的版本中修补该问题,恢复到 v2.30.7。建议用户升级。无法升级的用户应在不受信任的存储库中禁用 `git archive`。如果通过 `git daemon` 暴露 git 存档,请通过运行 `git config --global daemon.uploadArch false` 将其禁用。 (CVE-2022-41903)

- Git 是一个版本控制系统。使用特制的存储库时,低于 2.39.2、2.38.4、2.37.6、2.36.5、2.35.7、2.34.7、2.33.7、2.32.6、2.31.7 和 2.30.8 版本的 Git 可被诱骗使用其本地克隆优化,即便在使用非本地传输时。尽管 Git 将中止源 `$GIT_DIR/objects` 目录包含符号链接的本地克隆,`objects` 目录本身可能仍然是一个符号链接。这两者可以结合起来,根据受害者文件系统上的已知路径,在恶意存储库的工作副本中包含任意文件,从而允许以与 CVE-2022-39253 类似的方式进行数据泄露。已准备好补丁,并将出现在 v2.39.2、v2.38.4、v2.37.6、v2.36.5、v2.35.7、v2.34.7、v2.33.7、v2.32.6、v2.31.7 和 v2.30.8 中。如果升级不可行,有两个短期变通方案可用。避免从带 `--recurse-submodules` 的不受信任的来源克隆存储库。
相反,考虑在不递归克隆其子模块的情况下克隆存储库,并在每一层运行“git submodule update”。执行此操作之前,请检查每个新的“.gitmodules”文件以确保其中不包含可疑的模块 URL。 (CVE-2023-22490)

- Git(修订控制系统)低于 2.39.2、2.38.4、2.37.6、2.36.5、2.35.7、2.34.7、2.33.7、2.32.6、2.31.7 和 2.30.8之前的版本易受路径遍历影响。通过向“git apply”提供特制的输入,可以运行“git apply”的用户身份覆盖工作树之外的路径。已准备好补丁,并将出现在 v2.39.2、v2.38.4、v2.37.6、v2.36.5、v2.35.7、v2.34.7、v2.33.7、v2.32.6、v2.31.7 和 v2.30.8 中。变通方案是,使用 `git apply --stat` 在应用前检查修补程序;避免应用会创建符号链接然后在符号链接之外创建文件的链接。
(CVE-2023-23946)

- Git 是一个版本控制系统。在 2.30.9、2.31.8、2.32.7、2.33.8、2.34.8、2.35.8、2.36.6、2.37.7、2.38.5、2.39.3 和 2.40.1 版本之前,攻击者可以通过将特别构建的输入提供给“git apply --reject”,来使用部分受控的内容(与给定补丁中被拒绝的 hunk 对应)覆盖工作树之外的路径。版本 2.30.9、2.31.8、2.32.7、2.33.8、2.34.8、2.35.8、2.36.6、2.37.7、2.38.5、2.39.3 和 2.40.1 中均有提供修复程序。变通方案是在应用来自不受信任来源的补丁时,避免将“git apply”与“--reject”一起使用。在应用前,请使用“git apply --stat”检查补丁;避免应用会造成冲突(即存在与“*.rej”文件对应的链接)的补丁。(CVE-2023-25652)

- 在 Git for Windows(Git 的 Windows 端口)中,安装程序并未附带任何本地化消息。因此,Git 应该完全不会对消息进行本地化处理,并且会跳过 gettext 初始化。
但由于 MINGW-packages 中的变更,“gettext()”函数的隐式初始化将不再使用运行时前缀,而是改用硬编码路径“C: \mingw64\share\locale”来查找本地化消息。并且,由于任何经过身份验证的用户都有权在“C: \”(并且“C: \mingw64”通常不存在)中创建文件夹,这使得低权限用户有可能将虚假消息放入此位置,此时,“git.exe”会在版本 2.40.1 中获取此消息。此漏洞相对难以利用,并且需要社交工程。例如,在克隆结束时,攻击者可能会恶意修改合法消息,以此要求用户将其 Web 浏览器定向到恶意网站,并且用户可能认为这则消息来自 Git 并且是合法的。但是,这确实需要攻击者进行本地写入访问,因此这则消息成为攻击载体的可能性降低。 2.40.1 版包含针对此问题的补丁。但有一些变通方案。不使用共享帐户在 Windows 计算机上工作,或者创建一个“C: \mingw64”文件夹并将其留空。具有管理权限的用户可以移除在 `C: \`. (CVE-2023-25815)

- Git 是一个版本控制系统。在版本 2.30.9、2.31.8、2.32.7、2.33.8、2.34.8、2.35.8、2.36.6、2.37.7、2.38.5、2.39.3 和 2.40.1 之前,攻击者会使用子模块 URL 长度超过 1024 个字符的特别构建的“.gitmodules”文件来利用“config.c: : git_config_copy_or_rename_section_in_file()”中的缺陷。在尝试移除与该子模块关联的配置部分时,攻击者可利用此缺陷将任意配置注入用户的“$GIT_DIR/config”中。当攻击者注入指定要运行的可执行文件的配置值(如“core.pager”、“core.editor”、“core.sshCommand”等)时,这可能会导致远程代码执行。版本 2.30.9、2.31.8、2.32.7、2.33.8、2.34.8、2.35.8、2.36.6、2.37.7、2.38.5、2.39.3 和 2.40.1 中均有提供修复程序。变通方案是避免在不受信任的存储库上运行“git submodule deinit”,或者避免在未事先检查“$GIT_DIR/config”中的任何子模块部分的情况下运行“git submodule deinit”。(CVE-2023-29007)

请注意,Nessus 尚未测试这些问题,而是只依据应用程序自我报告的版本号进行判断。

解决方案

所有 Git 用户都应升级到最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=dev-vcs/git-2.39.3

另见

https://security.gentoo.org/glsa/202312-15

https://bugs.gentoo.org/show_bug.cgi?id=838127

https://bugs.gentoo.org/show_bug.cgi?id=857831

https://bugs.gentoo.org/show_bug.cgi?id=877565

https://bugs.gentoo.org/show_bug.cgi?id=891221

https://bugs.gentoo.org/show_bug.cgi?id=894472

https://bugs.gentoo.org/show_bug.cgi?id=905088

插件详情

严重性: Critical

ID: 187314

文件名: gentoo_GLSA-202312-15.nasl

版本: 1.0

类型: local

发布时间: 2023/12/27

最近更新时间: 2023/12/27

支持的传感器: Nessus

风险信息

VPR

风险因素: Medium

分数: 6.7

CVSS v2

风险因素: Medium

基本分数: 6.9

时间分数: 5.7

矢量: CVSS2#AV:L/AC:M/Au:N/C:C/I:C/A:C

CVSS 分数来源: CVE-2022-29187

CVSS v3

风险因素: Critical

基本分数: 9.8

时间分数: 9.1

矢量: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

时间矢量: CVSS:3.0/E:F/RL:O/RC:C

CVSS 分数来源: CVE-2022-41903

漏洞信息

CPE: p-cpe:/a:gentoo:linux:git, cpe:/o:gentoo:linux

必需的 KB 项: Host/local_checks_enabled, Host/Gentoo/release, Host/Gentoo/qpkg-list

可利用: true

易利用性: Exploits are available

补丁发布日期: 2023/12/27

漏洞发布日期: 2022/4/12

参考资料信息

CVE: CVE-2022-23521, CVE-2022-24765, CVE-2022-29187, CVE-2022-39253, CVE-2022-39260, CVE-2022-41903, CVE-2023-22490, CVE-2023-23946, CVE-2023-25652, CVE-2023-25815, CVE-2023-29007