深入研究 RCU 竞态条件:TCP-AO UAF(CVE-2024–27394)分析 - Theori 博客

主要观点:分析了因错误使用 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 相关的操作和可能出现的问题。
阅读 15
0 条评论