Linux 内核 ksmbd 文件系统漏洞PoC发布
安全研究员 Norbert Szetei 公布了针对 Linux 内核 ksmbd 文件系统模块中具备确定性的越界写入漏洞(CVE-2025-37947)的完整PoC。与先前依赖不可靠竞态条件或环境因素的 Ksmbd 漏洞不同,此利用程序可直接实现越界写入操作。该PoC在 Ubuntu 22.04.5 LTS 系统(内核版本 5.15.0-153-generic)上测试通过。
安全研究员 Norbert Szetei 公布了针对 Linux 内核 ksmbd 文件系统模块中具备确定性的越界写入漏洞(CVE-2025-37947)的完整PoC。与先前依赖不可靠竞态条件或环境因素的 Ksmbd 漏洞不同,此利用程序可直接实现越界写入操作。该PoC在 Ubuntu 22.04.5 LTS 系统(内核版本 5.15.0-153-generic)上测试通过,在启用 streams_xattr
功能的同时,通过溢出 kvmalloc()
分配的零初始化缓冲区,可稳定实现本地提权至 root 权限。
漏洞根源与利用分析
该漏洞源于 fs/ksmbd/vfs.c
中的 ksmbd_vfs_stream_write()
函数。
当 SMB 共享配置启用 vfs objects = streams_xattr
时,代码虽然强制规定最大总大小为 XATTR_SIZE_MAX
(0x10000),但仍允许超出此限制的写入操作。具体而言,该函数将 *pos
设置为 0x10000, count
设置为 8,随后执行:
memcpy(&stream_buf[*pos], buf, count);
此次 memcpy
调用会在已分配缓冲区的末端之后写入八个字节。
通过精确操控 SLUB 分配器来塑造堆布局,Szetei 确保溢出精准命中邻近的目标 order-4 slab 对象。他的漏洞利用方案中,该对象被设定为一条核心的 msg_msg
内核消息,从而建立可控的指针破坏链。
后续采用精心编排的使用-释放-回收(use-after-free)操作序列触发释放后重用漏洞,结合内核内存泄漏绕过 SMAP、SMEP 和 KASLR 防护机制。最终通过栈指针转移和 ROP 链实现特权代码执行。
Szetei 的概念验证代码已在运行 5.15.0-153-generic 内核的标准 Ubuntu 桌面环境中验证通过。测试时创建了启用 streams_xattr
模块的可写 SMB 共享,并提供了有效用户凭证。漏洞利用程序执行时,成功溢出零初始化缓冲区,破坏相邻内核结构,最终获取了 root 权限。
https://blog.doyensec.com/2025/10/08/ksmbd-3.html
完整漏洞利用流程及源代码已托管于 GitHub,为研究者和防御者提供了攻击各阶段的详细路线图。CVE-2025-37947 对依赖 ksmbd 和扩展属性流的 SMB 共享漏洞内核运行环境构成重大威胁。由于仅需认证访问和最低共享配置,标准用户账户即可提升至 root 权限,危害主机完整性。
各组织应优先部署上游补丁或发行版更新。作为临时防护措施,禁用 streams_xattr
模块或撤销 SMB 共享的写入权限可阻止漏洞触发条件。
评论0次