
微软AI漏洞扫描工具发现Rust标准库潜伏近11年的内存安全漏洞
来源标题:Microsoft’s AI bug hunter finds Rust flaw that went undetected for nearly 11 years
微软FORGE Lab利用AI漏洞扫描系统Hyenas在Rust标准库中发现一个潜伏近11年的内存安全漏洞,涉及process::exit函数。该漏洞源于子线程调用该函数时可能移除主线程仍在使用的备用信号栈,导致栈溢出时无法正常处理而触发段错误。研究还发现另两个可影响稳定版Rust的缺陷,其中一个可能导致访问已释放内存。
以下正文由 AI 翻译自 InfoWorld(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
微软研究人员在Rust标准库中发现了一个内存安全漏洞,该漏洞已潜伏近11年未被察觉,同时还发现了其他一些缺陷,即使在完全使用安全Rust编写的应用程序中也可能触发未定义行为。其中两项发现影响稳定版Rust,包括一个可能导致应用程序访问已释放内存的独立问题。
这个近11年的漏洞涉及Rust的process::exit函数。微软FORGE Lab的研究人员发现,从子线程调用该函数可能导致运行时在主线程仍在运行时移除其备用信号栈。如果主线程随后发生栈溢出,操作系统可能无法正确传递信号,导致段错误,而非Rust预期的栈溢出处理。
研究人员在博客文章中写道:“process::exit信号栈漏洞在标准库中存在了近11年。”微软表示,研究人员在他们考察的条件下未发现可靠的利用路径,并评估实际利用的可能性很低。
该研究使用Hyenas——FORGE Lab的AI驱动漏洞扫描系统——来调查Rust标准库中的不安全代码。Hyenas是该实验室的研究版本,代号为MDASH,是微软的智能体漏洞发现系统。
微软表示,部分漏洞是在Hyenas的帮助下发现的。研究人员随后检查了底层代码,复现了问题,评估了其安全影响,并向Rust维护者报告。
微软表示实际风险有限。每个缺陷都需要不寻常的条件才能触发,研究人员写道,标准库中的漏洞“只有当真实程序以那种方式触及该API时才会成为严重漏洞”。
不安全代码挑战Rust的安全保证
Rust的所有权模型和类型系统旨在防止C和C++等语言常见的内存安全问题。然而,其标准库在内部依赖不安全代码来执行编译器无法验证的操作。
Vec和String等组件使用这些操作,但通过安全API暴露它们。微软表示,这些API必须满足严格的健全性要求:“无论安全代码如何使用它,都必须不可能触发未定义行为。”
微软将发现的问题分为三类:假定操作不会panic的不安全代码、信任用户提供的实现行为正确的代码,以及对底层系统做出错误假设的代码。
第一类涉及Rust的MapWindows::clone实现中的panic安全问题。该函数在完全初始化缓冲区内容之前创建了缓冲区,然后调用用户提供的clone操作来填充它。如果该操作触发panic,Rust的unwinding机制可能调用缓冲区的析构函数,从而试图访问未初始化的内存。微软表示,已报告的修复防止部分初始化的缓冲区在初始化完成前被销毁。
另一项发现涉及str::replace。研究人员发现,该函数可能对nightly Pattern trait的自定义实现做出错误假设。自定义实现可能提供非ASCII字节,而代码期望的是ASCII字符,导致替换操作产生无效的UTF-8数据。微软表示,后续字符串操作可能触发未定义行为。
系统级漏洞影响稳定版Rust
微软表示,前两类弱点早在2021年就通过Rudra(研究团队成员开发的静态分析器)进行了研究。标准库早在2015年就解决了panic安全问题,但类似的弱点继续在其实现中出现。
第三类涉及Rust与底层操作系统和C库之间的交互。除了process::exit问题外,研究人员还发现了Rust的CommandExt::exec功能中涉及进程级环境变量数组的问题。
微软发现该函数可能在持有读锁时修改此共享状态,可能允许其他线程访问不一致的数据。在某些条件下,并发操作可能使环境指针引用已释放的内存。
微软表示,process::exit和CommandExt::exec的发现都影响稳定版Rust。针对环境变量问题的拟议修复(通过直接调用execve避免修改共享数组)在博客发布时正在审查中。
微软团队报告的两个问题在发布时仍未解决。博客还讨论了其他研究人员的相关报告以及仍在审查中的修复。
发现成果融入微软安全产品
微软表示,研究成果还可以输入到Microsoft Perception——其多智能体安全系统——中,专业智能体在该系统中跨更广泛的安全工作流工作。因此,这将帮助公司改进MDASH的开发,后者将智能体漏洞发现引入Microsoft Defender。
研究人员写道,例如,微软的Web App Pen Test Agent可以利用MDASH的发现来优先安排测试、评估对实时应用程序的可利用性,并提供支持修复的信息。
研究人员写道:“我们的目标不是简单地发现更多漏洞”,而是识别有意义的问题,并提高开发者和组织所依赖的基础软件的安全性。截至发稿时,Rust项目未回应CSO的置评请求。
本文最初发表于CSO。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。