CVE-2025-24118 漏洞分析报告

主要观点:发现并报告了 macOS 内核中的 CVE-2025-24118 竞争条件漏洞,涉及 macOS 内核的多个先进特性,可导致线程kauth_cred_t凭证指针损坏。
关键信息

  • Safe Memory Reclamation(SMR):XNU 中用于并发、无锁环境下回收内存的算法,基于 epoch 机制,维护全局计数器,线程跟踪观察的 epoch,超过一定进度可释放旧内存,SMR 保护的字段使用原子更新的指针,读者需在 SMR 临界区读取,写入时使用锁序列化。
  • Read-Only Pages in XNU:XNU 将凭证等敏感信息放在只读页,通过zalloc_ro等 API 管理,memcpy在 X86_64 上非原子,可能导致并发读者看到部分更新的指针,从而访问无效地址,zalloc_ro_mut非原子,应使用zalloc_ro_mut_atomic
  • Per-Thread Credentials:XNU 中的凭证结构struct ucred用于跟踪线程安全相关字段,通过 SMR 哈希表让线程共享相同的凭证对象,节省内存,current_cached_proc_cred_update用于管理线程凭证。
  • The Race Condition:代码中存在使用zalloc_ro_mut非原子地更新proc_ro.p_ucred的漏洞,可通过setgid触发频繁的凭证更新,使kauth_cred_proc_update调用,从而导致并发读取p_ucred时观察到部分写入的值,可能导致内核崩溃或凭证损坏。
    重要细节
  • 漏洞证明的 PoC 可在这里找到,需以setgid二进制运行,默认组为staff,使用everyone作为第二个组触发凭证切换。
  • 向 Apple 报告漏洞时提供的建议修复方法是使用zalloc_ro_mut_atomic原子地交换旧凭证指针和新凭证指针,Apple 已在 macOS 15.3 中修复该漏洞。
  • 仅在 Intel 系统上观察到此问题,ARM64 上的memcpy优化可能提供一定的原子性,未导致kauth_cred_t损坏。
  • 赢得竞争条件时可能出现内核恐慌或凭证悄悄更改,难以确定性地控制无效指针的形成。
  • 参考了多个关于并发和无锁数据结构的链接,如 Paul E. McKenney 的书、Keir Fraser 的论文等。
阅读 17
0 条评论