

Linux内核FUSE(用户空间文件系统)子系统存在一处漏洞,本地攻击者可利用该漏洞,通过用攻击者控制的目录条目填满页缓存,从而获取root权限。
Part01
漏洞概述
该漏洞编号为CVE-2026-31694,影响内核缓存FUSE readdir结果时所使用的代码路径。FUSE允许用户空间文件系统通过/dev/fuse与内核通信,内核可缓存目录条目以加速后续读取操作。
Bynario的分析显示,漏洞位于fuse_add_dirent_to_cache()函数中。该函数根据服务器提供的文件名长度计算目录条目大小,然后将条目复制到单个缓存页面中,但并未事先检查该条目本身是否大于一个页面的大小。
问题的关键在于,恶意FUSE服务器可以返回一个序列化大小为4120字节的目录条目(在4KiB页面大小的系统上),这比单个页面多出24字节。当内核将偏移量重置为零并强行复制该记录时,额外的字节会溢出到下一个内存页面中。危险之处不仅在于内存损坏,更在于被破坏数据的具体位置。
Part02
漏洞技术细节
在已报告的验证中,攻击者利用该溢出破坏SUID二进制文件(例如/usr/bin/su)中的缓存字节,将可执行代码的开头替换为一个简短payload,该payload在正常流程继续前调用setuid(0)和setgid(0)。一旦这些身份更改系统调用在root所属的程序中成功执行,攻击者便可绕过常规身份验证检查,生成一个root shell。
Part03
攻击场景与影响
该攻击为本地攻击,因此攻击者需要具备挂载或运行FUSE文件系统的能力——这通常可通过无特权用户命名空间或fusermount3实现。据Bynario称,此漏洞可在具有较大readdir缓冲区的新内核上利用,且仅影响使用4KiB内存页面的系统。使用更大页面大小的系统不受此特定溢出大小的影响。
Part04
修复与缓解措施
修复方法很简单:在缓存任何目录条目之前,拒绝那些超出单个页面大小的条目。管理员还可以通过限制FUSE的使用、在不需要时移除fusermount3的setuid位,以及适当限制无特权命名空间来降低暴露风险。
参考来源:
Linux Kernel FUSE Vulnerability Lets Attackers Gain Root Privileges
https://cybersecuritynews.com/linux-kernel-fuse-vulnerability/



