CVE-2026-31705Linux内核中的ksmbd模块(SMB服务器)存在一个严重的越界写入漏洞(CVE-2026-31705)。该漏洞源于`smb2_get_ea()`函数在处理扩展属性(EA)时的逻辑缺陷。在复合请求场景下,当EA数据大小恰好填满剩余的响应缓冲区时,函数仍会继续执行4字节对齐的memset操作,导致向缓冲区边界之外的内核堆内存写入1-3字节的NULL数据。攻击者无需认证即可通过网络利用此漏洞,可能导致内核崩溃或潜在的远程代码执行。
漏洞位于`fs/smb/server/smb2pdu.c`的`smb2_get_ea()`函数中。该函数在复制EA值后会调用`memset`进行4字节对齐填充。问题在于,代码在执行`memcpy`前检查了`buf_free_len`,但在执行`memset`前未再次检查剩余空间。
在SMB复合请求中,多个命令共享同一个响应缓冲区。攻击者可以构造特定的复合请求(如READ + QUERY_INFO),使第一个命令消耗大部分缓冲区空间,导致留给QUERY_INFO的剩余空间极小。如果精心构造EA数据的大小,使其在复制后`buf_free_len`恰好为0,随后的对齐填充代码(`memset`)将无视边界,向缓冲区末尾之外的相邻内核堆内存写入数据。这种堆越界写入可能破坏堆元数据或关键内核对象,从而导致拒绝服务(DoS)或在特定条件下实现任意代码执行。