CVE-2026-33150libfuse 3.18.0至3.18.2之前版本的io_uring子系统中存在释放后重用漏洞。当io_uring线程因资源耗尽创建失败时,系统释放ring pool结构却保留了悬空指针,导致会话关闭时触发UAF。本地低权限攻击者可利用此漏洞使FUSE文件系统进程崩溃,并可能执行任意代码。
该漏洞源于libfuse在处理io_uring子系统时的逻辑错误。在`fuse_uring_start`函数中,如果创建io_uring线程失败(例如受限于cgroup的pids.max),代码会调用free释放ring pool结构体的内存。然而,程序并未将会话状态中指向该结构体的指针置为NULL,导致产生了一个悬垂指针。随后,当FUSE会话结束并调用清理函数时,程序尝试再次访问该指针指向的内存区域,从而触发释放后重用(UAF)。
利用方式:攻击者可以通过在容器化环境中制造资源耗尽条件(如达到pids上限)来可靠地触发线程创建失败。由于攻击者控制了被释放的内存区域,他们可以通过堆喷射或堆风水技术重新填充该内存,从而劫持控制流,实现本地权限提升或任意代码执行。该漏洞利用条件在容器环境下尤为容易满足。