< 返回版块

苦瓜小仔 发表于 2026-01-09 13:08

Tags:日报

文章《内核漏洞平均隐藏两年,有些甚至隐藏二十年》

Bug Type Count Avg Lifetime Median
race-condition 1,188 5.1 years 2.6 years
integer-overflow 298 3.9 years 2.2 years
use-after-free 2,963 3.2 years 1.4 years
memory-leak 2,846 3.1 years 1.4 years
buffer-overflow 399 3.1 years 1.5 years
refcount 2,209 2.8 years 1.3 years
null-deref 4,931 2.2 years 0.7 years
deadlock 1,683 2.2 years 0.8 years

作者:Jenny Guanni Qu

这篇文章的核心是作者通过挖掘 Linux 内核 20 年的 Git 历史(分析了 125,183 个漏洞 )。

  • 核心数据:
    • 潜伏期: Linux 内核漏洞从引入到被修复,平均需要 2.1 年
    • 极端案例: 最长的一个漏洞(ethtool 中的缓冲区溢出)潜伏了 20.7 年;作者重点剖析了一个隐藏了 19 年 的 netfilter 引用计数泄漏(refcount leak)。
    • 子系统差异: CAN 总线驱动程序的漏洞平均潜伏 4.2 年,而 GPU 和 BPF 驱动则修复较快(约 1.1-1.4 年),这反映了代码审计频率的差异。
  • 安全趋势:
    • 由于 Syzkaller(Google 开发的模糊测试工具)和各种 Sanitizers(如 KASAN)的应用,漏洞被发现的速度正在大幅提升:2010 年时几乎没有漏洞能在一年内发现,而到 2022 年,69% 的漏洞在一年内就能被捕获。
  • 技术产出 - VulnBERT:
    • 作者开发了一个名为 VulnBERT 的 AI 模型,专门用于在代码提交(commit)时预测该代码是否引入了漏洞。该模型在测试集上的召回率达到了 92.2%,而误报率仅为 1.2%,远优于传统的代码模型。

它利用 AI 技术(VulnBERT)和大数据分析证明:尽管 Linux 内核的安全工具链(如模糊测试)在进步,但依然有大量高危漏洞能隐藏数年之久。

阅读:https://pebblebed.com/blog/kernel-bugs

r/rust 频道围绕该研究揭示的漏洞类别以及 Rust 语言的防御效果展开讨论:https://www.reddit.com/r/rust/comments/1q77eqe/kernel_bugs_hide_for_2_years_on_average_some_hide/

Rust 1.93 Cargo 更新与进展

核心功能与性能改进:

  • 配置包含功能(Config Include)已稳定-Zconfig-include 现已稳定,允许在 .cargo/config.toml 中通过 include 字段引入其他配置文件,支持可选包含和数组形式。
  • 更细粒度的目标目录锁定(Target Dir Locking):为了解决 cargo checkrust-analyzer 同时运行时的锁定冲突,Cargo 正在尝试拆分构建目录和伪影目录的锁,以支持更高效的并行操作。
  • 结构化日志与报告:引入了实验性的结构化日志支持,新增 cargo report timings 命令,帮助用户分析构建耗时和重新构建的原因。

诊断与 Lint 增强:

  • 现代化的诊断渲染:Cargo 开始采用 annotate-snippets 库,并引入了可选的 Unicode 渲染(-Zrustc-unicode),使错误信息更直观。
  • 新增 Lint:添加了 implicit_minimum_version_req(隐式最小版本要求)Lint,用于规范工作区依赖的版本管理。

构建系统与布局:

  • 构建目录布局调整:为了支持跨项目缓存,Cargo 正在推进内部目录布局的重构,并进行了大规模的测试(包括 Crater 运行)。
  • 自定义最终产物:探讨了允许构建脚本(build scripts)将生成的产物(如特定的二进制文件)放置到指定目录的新机制,旨在解决目前路径难以预测的问题。

依赖管理:

  • 发布时间(Pubtime)与“时光倒流”解析
    • Cargo 现在开始支持记录库文件的发布时间。
    • 引入了不稳定的“时间旅行依赖解析”功能(--publish-time),允许用户将依赖树锁定在过去的某个时间点。

其他小更新与工具:

  • Cargo 插件推荐:本期推荐插件为 cargo-override,用于辅助管理 [patch] 表。
  • 命令行改进cargo clean 新增 --workspace 标志;Git 浅克隆现支持使用 CLI 获取;cargo tree 正在实验交互式 TUI 界面。
  • Cargo Script:对 Cargo 脚本功能进行了进一步的细节打磨。

该版本通过优化底层架构、提升诊断体验和引入更多元的数据(如发布时间),进一步增强了 Rust 开发者的工具链体验。

阅读:https://blog.rust-lang.org/inside-rust/2026/01/07/this-development-cycle-in-cargo-1.93/

文章系列《Who Owns the Memory?》

作者:Luca Lombardo

第 2 部分《Who Calls Free?》探讨了 Rust 如何通过所有权机制解决手动内存管理的难题,核心在于将释放责任从开发者移交给编译器。编译器在作用域结束时自动插入释放逻辑,利用移动语义消除重复释放风险,并通过 Drop Flag 动态跟踪复杂的初始化状态。文章还深度解析了 std::mem::drop 夺取所有权的本质,以及销毁检查器如何强制执行生命周期规则,确保引用在对象销毁期间始终有效。

阅读:https://lukefleed.xyz/posts/who-owns-the-memory-pt2/

第 3 部分《How Big Is your Type?》详细解释了如何通过借用在不转移所有权的情况下安全访问数据,并重点分析了“别名 + 可变”带来的安全隐患及其规避方法。它深入介绍了借用检查器如何利用生命周期来防止悬空指针,确保所有引用在生效期间始终指向有效的内存。

通过这些机制,Rust 在无需垃圾回收的前提下,实现了高性能与内存安全的完美平衡。

阅读:https://lukefleed.xyz/posts/who-owns-the-memory-pt3/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页