在Rust安全专家解决了一个可能导致Windows机器上的恶意命令注入的关键漏洞后,程序员们被敦促更新他们的Rust版本。
该漏洞的CVSS严重性得分为10分(满分10分),被追踪为CVE-2024-24576。它影响Rust标准库,当使用库的Command API在Windows上调用批处理文件时,发现它不正确地转义参数-特别是std::process::Command。
“能够控制传递给生成进程的参数的攻击者可以通过绕过转义来执行任意shell命令,”Rust安全响应工作组(Rust Security Response Working Group)的彼得罗·阿尔比尼(Pietro Albini)说,他撰写了这份建议。
报告这一问题的东京公司Flatt Security的研究人员说,主要问题似乎源于Windows的CMD.exe程序,该程序有更复杂的解析规则,没有它,Windows就无法执行批处理文件。
Albini说Windows的命令提示符有自己的参数分割逻辑,与标准库提供的常规Command::arg和Command::args api不同,后者通常允许将不可信的输入安全地传递给生成的进程。
Albini说:“在Windows上,这个实现比其他平台更复杂,因为Windows API只提供一个包含所有参数的字符串给生成的进程,并且由生成的进程来拆分它们。”大多数程序使用标准的C运行时argv,它在实践中以一种基本一致的方式拆分参数。
“不幸的是,据报道,我们的转义逻辑不够彻底,有可能传递恶意参数,导致任意shell执行。”
Chris Denton是Rust std库的贡献者,他开发了缓解这个问题的修复程序,包括改进转义代码,并确保Command API在不能安全地转义参数时返回InvalidInput错误。
Albini说,由于微软命令提示符的复杂性,该团队无法确定在每种情况下都会转义参数的修复方法。
如果你自己实现转义或者只处理可信的输入,在Windows上你也可以使用CommandExt::raw_arg方法来绕过标准库的转义逻辑。
Rust周二发布了1.77.2版本,并表示之前的每个版本都很脆弱。
这门语言是粉丝们的最爱,经常在Stack Overflow的排名中名列前茅,因为开发人员发现Rust在他们的工作中使用得多么愉快,谷歌人也称赞它的生产力优势。它也是国家安全机构敦促开发人员采用的较新的内存安全语言之一,以支持C和C等旧技术。
BatBadBut
RyotaK是报告该漏洞的研究人员,他们将其称为batbad但是由于它围绕批处理文件及其严重性——“很糟糕,但不
是最糟糕的”——这个问题影响的技术比Rust单独影响的技术更多。
Erlang、Go、Python和Ruby也受到影响,它们已经更新了各自的文档页面,以提高对这个问题的认识。
Node.js和PHP现在都在做补丁,而Rust和Haskell都已经推出了修复程序。根据这名研究人员的报告,Java受到了影响,但它的团队没有计划解决这个问题。
RyotaK还指出,用户不应该仅仅根据CVSS评级就得出结论,因为问题的严重性将取决于每个应用程序,应该重新计算。
原文始发于微信公众号(HackSee):2024年4月11日Rust解决了Windows上的关键漏洞
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论