主要观点:披露了内核安全漏洞 CVE-2024-46713 并发布相关内容,介绍了 perf 事件、perf_buffer 结构、创建环形缓冲区、辅助缓冲区等,指出存在的问题是用于 rb 的锁在 event 上而非 rb 上导致可并发访问 aux 缓冲区,通过 fork 等操作可获取“孤立”的 aux vma 用于页面窃取等操作,但此策略在大多数发行版中不适用,在默认配置的新 vanilla 内核中可演示,同时提供了 PoC 及实验注意事项。
关键信息:
- perf_events 是用于系统性能测量的内核子系统,perf_event_open 系统调用创建对象,通过 mmap 或 ioctl 与 ringbuffer 交互。
- perf_buffer 结构用于跟踪缓冲区内存和计数器,aux 缓冲区信息嵌入其中。
- 问题在于 event->mmap_mutex 锁不能有效防止对 rb 的并发访问,可利用此进行页面窃取等操作。
- 通过 fork 等操作可获取“孤立”的 aux vma,利用 perf_mmap_fault 可访问已返回给页面分配器的页面,通过 spray 等操作可实现页面重用。
- 大多数发行版中由于 check_pages_enabled 为真,页面分配器会进行检查导致策略不适用。
重要细节: - perf_mmap 函数中对 aux 缓冲区的创建和映射逻辑及相关锁的处理。
- race oracle 的设置及作用,用于确定 race 条件的时机。
- 演示在默认配置的新 vanilla 内核中的输出及 PoC 的获取地址和实验注意事项,如需在虚拟机中实验且至少有 2 个 CPU 核心。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。