rustsec 4小时前 · 2026-09-24 23:38:49 · 0 阅读
RUSTSEC-2026-0308:salsa 中存在类型不安全
当应用读取 interned 值的字段,或将该值作为 tracked 函数的输入时,Salsa 必须确认可复用存储已针对当前数据库修订版本完成校验。这能防止在值仍被使用时,其字段及关联的缓存函数结果被释放。受影响的版本仅在读取字段时使用 debug_assert! 检查该不变量,而在利用 interned 值访问 tracked 函数的缓存结果时并未进行校验。
Salsa 依赖跟踪中的缺陷,或应用提供的 Eq 实现错误地将变更后的查询结果视为未变更,可能导致 Salsa 复用包含过期 interned 值的缓存结果。若应用访问这些值后再 intern 新值,Salsa 可能在引用仍被使用时释放旧字段或缓存函数结果,从而通过安全 Rust API 引发 use-after-free。根据消费应用的不同,攻击者可控的输入可能导致进程内存暴露或允许任意代码执行。
该修复在允许应用读取字段,或使用该值作为输入访问 tracked 函数的缓存结果前,会断言 interned 值的可复用存储已针对当前数据库修订版本完成校验。若断言失败,Salsa 会在返回可能在被使用时被释放的存储引用之前触发 panic。
Salsa 0.28.5 及更新版本已解决此漏洞。依赖应用应更新 Salsa 并重新构建。
对于使用 #[salsa::interned(revisions = usize::MAX)] 禁用所有显式声明的 interned 结构的垃圾回收,且不使用隐式 interned 查询参数的应用,不受此漏洞影响。
公告依据 CC0-1.0 许可证发布。
原始来源: rustsec