IPBUF安全漏洞报告
English
CVE-2026-33150 CVSS 7.8 高危

CVE-2026-33150 libfuse io_uring释放后重用漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33150
漏洞类型
释放后重用
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
libfuse

相关标签

释放后重用libfuse本地权限提升UAF容器安全

漏洞概述

libfuse 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上限)来可靠地触发线程创建失败。由于攻击者控制了被释放的内存区域,他们可以通过堆喷射或堆风水技术重新填充该内存,从而劫持控制流,实现本地权限提升或任意代码执行。该漏洞利用条件在容器环境下尤为容易满足。

攻击链分析

STEP 1
侦察
攻击者确认目标系统运行了受影响版本的libfuse(3.18.0至3.18.2之前),并且启用了io_uring功能。
STEP 2
资源耗尽
攻击者在容器化环境中通过fork bomb或其他手段消耗进程资源,触发cgroup的pids.max限制,迫使io_uring线程创建失败。
STEP 3
触发漏洞
由于线程创建失败,`fuse_uring_start`释放了ring pool结构体但未清空指针,导致悬垂指针产生。
STEP 4
利用与执行
当FUSE会话关闭或进行特定内存操作时,程序访问悬垂指针触发UAF。攻击者利用此漏洞可导致服务崩溃或进一步劫持执行流以执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Conceptual Proof of Concept for CVE-2026-33150 // Trigger condition: Resource exhaustion leading to io_uring thread creation failure. #include <fuse3/fuse.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> static const struct fuse_operations oper = {}; int main(int argc, char *argv[]) { struct fuse_args args = FUSE_ARGS_INIT(argc, argv); // Simulate resource exhaustion to trigger the bug // In a real container, hitting pids.max causes fuse_uring_start to fail printf("Attempting to trigger resource exhaustion...\n"); // Create FUSE session struct fuse_session *se = fuse_session_new(&args, &oper, sizeof(oper), NULL); if (!se) { perror("fuse_session_new"); return 1; } if (fuse_session_mount(se, "/tmp/fuse_test") != 0) { perror("fuse_session_mount"); return 1; } printf("Session started. Trigger cleanup to cause UAF...\n"); // Cleanup triggers the use-after-free on the dangling pointer fuse_session_unmount(se); fuse_session_destroy(se); fuse_opt_free_args(&args); return 0; }

影响范围

libfuse 3.18.0 至 3.18.2 之前版本

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用libfuse的io_uring功能,或在容器配置中适当放宽pids.max限制以减少触发概率,同时严格限制本地用户权限。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表