FreeBSD 11.0+ 内核本地权限提升:用户空间互斥锁(umtx)使用后释放竞争条件

主要观点:2024 年 9 月发现 FreeBSD 内核 11.0 - 14.1 -RELEASE 存在_umtx_op系统调用的竞争条件漏洞,可导致可利用的释放后使用漏洞,Synacktiv 已公开发现并修补。该漏洞核心在于UMTX_OP_SHM子命令的销毁共享内存句柄时的竞争条件,可能导致struct shmfd指针悬空。

关键信息

  • _umtx_op系统调用原型及内核入口点。
  • UMTX_OP_SHM子命令的实现及相关函数逻辑,包括创建、查找、销毁共享内存等操作。
  • 竞争条件导致ushm_refcnt可能减 2 及引入第三线程后的情况。
  • 利用漏洞的策略证明概念(PoC)代码,通过多个线程操作触发漏洞。
  • 利用漏洞后的可利用状态,如控制shm_objectshm_path等字段,以及通过shm_chown函数操作shm_uidshm_gid
  • 利用漏洞扩展为双释放(double-free),通过UMTX_OP_SHM操作创建和销毁共享内存来实现,并利用cap_ioctls_limit系统调用控制ucred结构体。
  • 参考实现的步骤及示例输出,包括调整以提高稳定性的方法。
  • PoC 存档的下载链接。

重要细节

  • 内核中对umtx_shm_reg的引用计数和锁定机制,以及在竞争条件下可能出现的问题。
  • 不同UMTX_OP_*操作的函数实现及参数传递。
  • 利用漏洞时对各种fileops函数的交互和限制。
  • 稳定性测试结果及调整 exploit 以提高稳定性的方法。
阅读 17
0 条评论