主要观点:分析了因错误使用 RCU API 导致的 Race Condition 漏洞(CVE-2024-27394)及可靠触发该漏洞的技术。
关键信息:
- 介绍了 Read-Copy-Update (RCU)的相关知识,包括其同步技术、三个阶段(Removal、Grace Period、Reclamation)及主要 API(如 rcu_read_lock、rcu_read_unlock、rcu_dereference 等)。
- 阐述了 Linux 内核中 Race Condition 漏洞的常见情况,以及 CVE-2024-27394 的特殊之处,采用 ExpRace 技术来触发该漏洞,通过 sched_setaffinity 和 Reschedule IPI 来扩展 Race 窗口。
- 详细说明了 CVE-2024–27394 发生在 net/ipv4/tcp_ao.c 中的 tcp_ao_connect_init 函数,该函数在连接准备过程中迭代使用 hlist_for_each_entry_rcu 可能导致 Use-After-Free 漏洞,可通过 setsockopt 设置 TCP_AO_ADD_KEY 来触发,且需使用 Reschedule IPI 可靠触发,给出了 PoC 代码及 KASAN 日志。
- 最后通过替换 hlist_for_each_entry_rcu 为 hlist_for_each_entry_safe 来修复该漏洞。
重要细节: - 内核版本相关信息,如漏洞在 4 月被修复并回溯到稳定内核,测试代码基于特定内核环境(KASAN 和 CONFIG_PREEMPT=y 启用)。
- 各种 RCU API 的使用示例及注意事项,如列表相关的 API(list_add_rcu、list_for_each_entry_rcu、list_del_rcu 等)和 hash linked-list 的类似 API。
- 关于 TCP AO 的网络协议选项介绍,以及在 tcp_ao_connect_init 函数中与 RCU 相关的操作和可能出现的问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。