GLSA-202210-09 : Rust:多个漏洞

critical Nessus 插件 ID 166161

语言:

描述

远程主机受到 GLSA-202210-09 中所述漏洞的影响(Rust:多个漏洞)

- 在 Rust 1.50.0 版之前的标准库中,read_to_end() 不会在不安全的上下文中验证 Read 的返回值。此缺陷可导致缓冲区溢出。(CVE-2021-28875)

- 在 Rust 1.52.0 版之前的标准库中,Zip 实现存在错误安全问题。当底层迭代器错误时(在某些情况下),
它会针对相同索引多次调用 __iterator_get_unchecked()。由于未满足 TrustedRandomAccess 特性的安全要求,此缺陷可导致内存安全冲突。(CVE-2021-28876)

- 在 Rust 1.51.0 之前版本的标准库中,Zip 实现会在嵌套时针对相同索引多次调用 __iterator_get_unchecked()。由于未满足 TrustedRandomAccess 特性的安全要求,此缺陷可导致内存安全冲突。(CVE-2021-28877)

- 在 Rust 1.52.0 之前版本的标准库中,next_back() 和 next() 一起使用时,Zip 实现会针对相同索引(在某些情况下)多次调用 __iterator_get_unchecked()。由于未满足 TrustedRandomAccess 特性的安全要求,此缺陷可导致内存安全冲突。(CVE-2021-28878)

- 在 Rust 1.52.0 之前版本的标准库中,Zip 实现可能会因整数溢出问题报告不正确的大小。当再次使用用过的 Zip 迭代器时,此缺陷可导致缓冲区溢出。
(CVE-2021-28879)

- 在低于 1.53.0 的 Rust 版本中,library/std/src/net/parser.rs 未正确考虑 IP 地址字符串开头的无关零字符,攻击者可利用此漏洞(在某些情况下),绕过基于 IP 地址的访问控制,这是非预期的八进制解释所致。(CVE-2021-29922)

- 在 Rust 1.52.0 之前版本的标准库中,如果释放元素错误,Vec: : from_iter 函数中会发生双重释放。(CVE-2021-31162)

- Dell EMC Avamar Server 版本 19.4 在 AvInstaller 中包含一个纯文本密码存储漏洞。本地攻击者可能会利用此漏洞造成某些用户凭据遭到泄露。攻击者或可使用暴露的凭据,以受损帐户的权限访问易受攻击的应用程序。(CVE-2021-36317)

- Dell EMC Avamar 版本 18.2、19.1、19.2、19.3 和 19.4 中包含一个纯文本密码存储漏洞。高权限用户可能利用此漏洞导致完全中断。
(CVE-2021-36318)

- ** 争议 ** 发现 Unicode 规范 14.0 及之前版本的双向算法中存在问题。它允许通过控制序列对字符进行可视化重新排序,可用于构建呈现与编译器和解释器提取的标记逻辑顺序不同的逻辑的源代码。攻击者可利用此问题为接受 Unicode 的编译器编码源代码,从而以隐蔽方式将目标漏洞引入人工审查者程序。注意:Unicode Consortium 提供了以下替代方法来表示此问题。在国际文本的性质中发现一个问题,其可影响实现 Unicode 标准和 Unicode 双向算法(所有版本)支持的应用程序。由于文本显示行为,当文本包含从左到右和从右到左的字符时,标记的视觉顺序可能与其逻辑顺序不同。
此外,为完全支持双向文本的要求所需的控制字符可能会进一步混淆标记的逻辑顺序。除非问题得到缓解,否则攻击者可通过特制的源代码,造成人工审查者感知到的标记排序与编译器/解释器等要处理的标记不符。Unicode Consortium 已在其“Unicode 技术报告 #36:Unicode 安全注意事项”文档中记录此类漏洞。Unicode Consortium 还在《Unicode 技术标准 #39》的“Unicode 安全机制”以及《Unicode 标准附件 #31》的“Unicode 标识符和模式语法”中提供此类问题的缓解措施指南。此外,BIDI 规范允许应用程序以可缓解程序文本中具误导性的视觉重新排序的方式来定制实现。请参阅《Unicode 标准附件 #9》“Unicode 双向算法”中的 HL4。
(CVE-2021-42574)

- ** 争议 ** 发现 Unicode 规范 14.0 及之前版本的字符定义中存在问题。该规范允许攻击者使用在视觉上与目标标识符相同的同形文字生成函数名称等源代码标识符。攻击者可利用此漏洞,通过在下游软件中欺骗性调用的上游软件依存关系中的对抗性标识符定义注入代码。注意:Unicode Consortium 提供了以下替代方法来表示此问题。在国际文本的性质中发现一个问题,其可影响实现 Unicode 标准(所有版本)支持的应用程序。除非得到缓解,否则攻击者可使用在视觉上与目标标识符相同但不同的同形异义字符生成源代码标识符。通过这种方式,攻击者可在人工审查者未检测到的上游软件中注入对抗性标识符定义,并在下游软件中进行欺骗性调用。Unicode Consortium 已在其“Unicode 技术报告 #36:Unicode 安全注意事项”文档中记录此类安全漏洞。Unicode Consortium 还在《Unicode 技术标准 #39》的“Unicode 安全机制””中提供此类问题的缓解措施指南。(CVE-2021-42694)

- Rust 是专为性能和安全(尤其是安全并发)而设计的多范式通用编程语言。Rust 安全响应工作组收到通知,其中指出 `std: : fs:: remove_dir_all` 标准库函数容易受到启用符号链接跟随的争用条件的影响 (CWE-363)。攻击者可利用此安全问题诱骗特权程序删除其无法以其他方式访问或删除的文件和目录。Rust 1.0.0 至 Rust 1.58.0 会受到此漏洞影响,其中 1.58.1 版本中包含一个补丁。请注意,以下构建目标没有可用的 API 来正确缓解攻击,因此即使使用修补过的工具链(macOS 10.10 之前版本 (Yosemite) 和 REDOX)也仍易受到攻击。我们建议所有用户尽快更新到 Rust 1.58.1,尤其是开发预计在特权上下文(包括系统后台程序和 setuid 二进制文件)中运行程序的人员,因为他们最容易受此漏洞影响。请注意,在调用 remove_dir_all 之前于代码库中添加检查不会缓解此漏洞,因为这些检查也容易受到 remove_dir_all 本身等争用条件的影响。现有的缓解措施可以在无争用条件的情况下按预期正常工作。(CVE-2022-21658)

- Cargo 是 rust 编程语言的程序包管理器。下载程序包后,Cargo 会在磁盘上的 ~/.cargo 文件夹中提取其源代码,以供其构建的 Rust 项目使用。为了记录提取成功的时间,Cargo 在提取所有文件后,会向所提取源代码根处的 .cargo-ok 文件写入 ok。据发现,Cargo 允许程序包包含 Cargo 会提取的 .cargo-ok 符号链接。然后,当 Cargo 尝试将 ok 写入 .cargo-ok 时,它实际上会将符号链接指向的文件的前两个字节替换为 ok。
这将允许攻击者损坏使用 Cargo 的计算机上的一个文件以提取程序包。请注意,由于构建脚本和程序宏,Cargo 按照设计允许在构建时执行代码。此公告中的漏洞允许以更难追踪的方式执行部分潜在破坏。如果您想要免受攻击,则必须仍然信任您的依存关系,因为可以使用构建脚本和程序宏执行相同的攻击。所有 Cargo 版本中均存在此漏洞。9 月 22 日发布的 Rust 1.64 将包含一个补丁。
由于该漏洞只是实现恶意构建脚本或程序宏功能的更有限方式,因此我们决定不发布向后移植此安全补丁的 Rust 点版本。
Rust 1.63.0 的修补程序文件现已推出,可在 wg-security-response 存储库中用于构建自己的工具链。缓解措施 我们建议备用注册表用户在下载程序包时谨慎行事,仅在其项目中包含受信任的依存关系。请注意,即使修复了这些漏洞,由于构建脚本和程序宏,Cargo 按照设计允许在构建时执行任意代码:无论这些漏洞如何,恶意依存关系都将造成破坏。 crates.io 多年前实施了服务器端检查以拒绝此类程序包,crates.io 上不存在利用这些漏洞的程序包。不过,crates.io 用户在选择依存关系时仍需谨慎,因为那里的设计也允许远程代码执行。(CVE-2022-36113)

- Cargo 是 rust 编程语言的程序包管理器。据发现,Cargo 未限制从压缩存档中提取的数据量。攻击者可将提取的数据量超过其大小的特制程序包(也称为 zip 炸弹)上传到备用注册表,从而使用 Cargo 下载程序包以耗尽计算机上的磁盘空间。请注意,由于构建脚本和程序宏,Cargo 按照设计允许在构建时执行代码。此公告中的漏洞允许以更难追踪的方式执行部分潜在破坏。如果您想要免受攻击,则必须仍然信任您的依存关系,因为可以使用构建脚本和程序宏执行相同的攻击。所有 Cargo 版本中均存在此漏洞。9 月 22 日发布的 Rust 1.64 将包含一个补丁。由于该漏洞只是实现恶意构建脚本或程序宏功能的更有限方式,因此我们决定不发布向后移植此安全补丁的 Rust 点版本。Rust 1.63.0 的修补程序文件现已推出,可在 wg-security-response 存储库中用于构建自己的工具链。
我们建议备用注册表用户在下载程序包时谨慎行事,仅在其项目中包含受信任的依存关系。请注意,即使修复了这些漏洞,由于构建脚本和程序宏,Cargo 按照设计允许在构建时执行任意代码:无论这些漏洞如何,恶意依存关系都将造成破坏。 crates.io 多年前实施了服务器端检查以拒绝此类程序包,crates.io 上不存在利用这些漏洞的程序包。不过,crates.io 用户在选择依存关系时仍需谨慎,因为其所面临的问题与构建脚本和程序宏面临的一样。
(CVE-2022-36114)

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

解决方案

所有 Rust 用户皆应升级到最新版本: # emerge --sync # emerge --ask --oneshot
--verbose >=dev-lang/rust-1.63.0-r1 所有 Rust 用户皆应升级到最新版本:# emerge --sync # emerge --ask --oneshot --verbose >=dev-lang/rust-bin-1.64.0 此外,使用 Portage 3.0.38 或更高版本的用户应通过重新构建 @rust-rebuild 集,确保具有 Rust 二进制文件的程序包没有以静态方式链接到其二进制文件中的易受攻击的代码:# emerge --ask --oneshot --verbose @rust-rebuild

另见

https://security.gentoo.org/glsa/202210-09

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

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

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

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

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

插件详情

严重性: Critical

ID: 166161

文件名: gentoo_GLSA-202210-09.nasl

版本: 1.3

类型: local

发布时间: 2022/10/16

最近更新时间: 2023/10/9

支持的传感器: Nessus

风险信息

VPR

风险因素: High

分数: 7.3

CVSS v2

风险因素: High

基本分数: 7.5

时间分数: 5.9

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

CVSS 分数来源: CVE-2021-31162

CVSS v3

风险因素: Critical

基本分数: 9.8

时间分数: 8.8

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

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

漏洞信息

CPE: p-cpe:/a:gentoo:linux:rust, p-cpe:/a:gentoo:linux:rust-bin, cpe:/o:gentoo:linux

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

可利用: true

易利用性: Exploits are available

补丁发布日期: 2022/10/16

漏洞发布日期: 2021/4/11

参考资料信息

CVE: CVE-2021-28875, CVE-2021-28876, CVE-2021-28877, CVE-2021-28878, CVE-2021-28879, CVE-2021-29922, CVE-2021-31162, CVE-2021-36317, CVE-2021-36318, CVE-2021-42574, CVE-2021-42694, CVE-2022-21658, CVE-2022-36113, CVE-2022-36114