Rust 借用检查器里潜伏 11 年的健全性漏洞被公开 — Hacker News 中文摘要
来源:github.com — 506 分 · by formerly_proven
📋 概述
Rust 仓库第 164250 号 issue 公开了一个存在 11 年的类型系统不健全问题:结构体字段的生存期要求可以通过协变字段赋值被绕过。示例里 `struct Q(Option)` 的构造函数只接受 'static 值,但先把 Q 建成 Q(None),再给 q.0 赋一个指向局部变量的引用,借用就被偷偷提升成 'static;配合一个会把值塞进全局 Mutex 的 Drop 实现,程序能打印出已经离开作用域的内容,开 ASan 会报 stack-use-after-scope。类型团队在 issue 里说明该问题被评为 P-high,若考虑野外可利用性本可达 P-critical,唯一降级理由是它 11 年未被发现;实际触发需要恶意构造的 Drop,所以大概率并未意外造成内存不安全。
🔑 核心要点
- 漏洞是通过协变字段赋值绕过结构体的生存期要求。
- 示例中 q.0 被赋入局部变量的引用后借用逃逸成 'static。
- 配合会保存值的自定义 Drop,程序打印出已离开作用域的字符串。
- 开启 ASan 会报 stack-use-after-scope,证明是真实的内存不安全。
- 类型团队说明该问题为 P-high,若计野外可利用性本应为 P-critical。
- 降级理由是它已 11 年未被发现,且利用需要恶意 Drop 实现。
💡 金句
Rust's type system is intended to prevent memory unsafety. Upholding this promise is something we take very seriously.
👍 0
👎 0
← 返回 Hacker News 首页