17611538698
info@21cto.com

Rust 可以消除 80% 的 Linux 内核 CVE

图片

导读:Linux 的稳定版维护者寄希望于一种新的 Rust 类型来解决 C 语言从未完全避免的一类错误。

本周,Greg Kroah-Hartman 出席了在乌得勒支举行的RustWeek 2026 大会,他谈到了一个仍在开发的基于 Rust 的提案,该提案可以消除 Linux 内核生成的约 80% 的 CVE

什么是CVE?它是通用漏洞披露(Common Vulnerabilities and Exposures)的英文缩写,列出了已公开披露的各种计算机安全缺陷。人们提到 CVE,指的都是已分配 CVE ID 编号的安全缺陷。

这可非同小事。

这话出自一位自2005年Linux内核安全团队成立以来,亲自审查过每一个内核安全漏洞的人之口。

C的盲点


Greg Kroah-Hartman 看来,核心问题在于数据不可信。每次有数据从用户空间或硬件到达时,内核都应该对其保持警惕。C 语言一直以来都没有可靠的方法来强制执行这一点。

一旦数据从用户空间复制到内核,它就变成了一个普通的指针,失去了所有关于其来源的上下文信息。它可以自由传递,而本应捕获问题的外部检查器并非总能运行。

硬件问题又带来了另一层面的挑战。内核的设计基于硬件可信赖的假设,但随着恶意硬件日益成为现实的威胁,这一假设也越来越难以成立。

Rust 已经修复了的问题


在新的提案正式发布之前,Rust 就已经开始发挥作用了。未能检查错误返回值和忘记释放锁是导致内核漏洞的两个重要原因,而 Rust 可以在编译时处理这两个问题。

Greg 预计仅这两个修复就能解决大约 60% 的内核错误。

但这还不是全部。为现有的 C 代码编写 Rust 绑定,悄然促使内核维护者真正开始记录和思考他们的 API,解决所有权语义、锁规则和常量正确性等问题。

输入“不受信任”类型


Greg提出的解决方案是一个名为`Untrusted`的Rust类型
,由他与内核贡献者Benno Lossin共同开发。它将从用户空间或硬件传入的数据作为编译时标记附加到数据上,且没有运行时开销。

图片

来源:

https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/commit/?h=untrusted&id=3937bad8a8bf2e5d7fc3e11b4ed1aae21df71b02

而且,开发者必须经过一个验证步骤,将底层数据明确转换为可信数据,才能访问这些数据。这使得所有验证代码都集中在一个可见且可审查的位置。

这对Linux用户意味着什么?目前通过安全更新推送到你所使用的发行版中的大量CVE漏洞,原本就不会存在。

但是,当前尚未合并。Rust 编译器仍需进行一些更改,同时,与域投影相关的开发工作也在同步进行。Greg 在演讲结束时呼吁更多 Rust 内核开发者加入,并指出Rust for Linux邮件列表是寻找新开发者的起点。

作者:场长

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信