标准库安全公告 (CVE-2024-43402)

2024 年 9 月 4 日 · Rust 安全响应工作组

2024 年 4 月 9 日,Rust 安全响应工作组披露了 CVE-2024-24576,其中 std::process::Command 在 Windows 上调用批处理文件时错误地转义了参数。我们收到通知,称我们对该漏洞的修复不完整,当批处理文件名带有尾随空格或句点(这些空格和句点会被 Windows 忽略并删除)时,可能会绕过此修复。

由于触发它所需的条件比较特殊,因此不完整修复的严重性为。请注意,计算 CVSS 分数可能会为此分配更高的严重性,但这并未考虑触发不完整修复所需的条件。

不完整的修复由 CVE-2024-43402 标识。

概述

有关原始漏洞的详细信息,请参阅 CVE-2024-24576 的公告

为了确定是否应用 cmd.exe 转义规则,最初的漏洞修复检查命令名称是否以 .bat.cmd 结尾。当时看来这足够了,因为我们拒绝调用没有文件扩展名的批处理脚本。

不幸的是,Windows 在解析文件路径时会删除尾随空格和句点。例如,.bat. . 被 Windows 解释为 .bat,但我们最初的修复没有检查这种情况。

缓解措施

如果您受到此问题的影响,并且您使用的是 Rust 1.77.2 或更高版本,则可以从批处理文件名中删除尾随空格(ASCII 0x20)和尾随句点(ASCII 0x2E),以绕过不完整的修复并启用缓解措施。

Rust 1.81.0 将于 2024 年 9 月 5 日发布,它将更新标准库以将 CVE-2024-24576 的缓解措施应用于所有批处理文件调用,无论文件名中是否有尾随字符。

受影响的版本

如果您的代码或您的某个依赖项在 Windows 上调用带有尾随空格或尾随句点的批处理脚本,并且将不受信任的参数传递给它,则 1.81.0 之前的所有 Rust 版本都将受到影响。

鸣谢

我们要感谢 Kainan Zhang (@4xpl0r3r) 根据 Rust 安全策略负责任地向我们披露此问题。

我们还要感谢 Rust 项目的成员帮助我们披露不完整的修复:Chris Denton 开发了修复,Amanieu D'Antras 审查了修复;Pietro Albini 编写了此公告;Pietro Albini、Manish Goregaokar 和 Josh Stone 协调了此次披露。