CVE-2025-39942CVE-2025-39942是Linux内核ksmbd(内核SMB守护进程)模块中smbdirect(SMB直通传输)子系统存在的一个输入验证缺陷。该漏洞源于内核在处理SMB直通接收数据时,未能充分验证remaining_data_length字段是否遵守max_fragmented_recv_size(最大分片接收大小)的约束。此问题灵感来源于此前对data_offset与data_length之和的检查机制。
ksmbd是Linux内核中实现SMB3.0协议的服务端组件,允许Linux系统作为SMB/CIFS文件服务器运行。smbdirect是其基于RDMA(远程直接内存访问)的传输层实现,能够提供高性能、低延迟的网络通信。然而,当恶意客户端发送特制的SMB直通数据包,其中remaining_data_length字段被设置为超过max_fragmented_recv_size限制的值时,可能导致内核在分片重组或数据拷贝过程中出现异常行为。
根据CVSS 3.1评分向量分析,该漏洞的攻击向量为本地(AV:L),攻击复杂度低(AC:L),所需权限为低权限(PR:L),无需用户交互(UI:N)。虽然机密性和完整性不受影响(均为None),但对可用性影响为高(A:H),表明成功利用此漏洞可能导致系统不稳定、内存耗尽或内核崩溃等拒绝服务后果。该漏洞的CVSS评分为5.5,属于中等严重等级。
此漏洞已于2025年10月4日公开披露,影响多个Linux内核稳定版本。Linux内核维护团队已通过多个commit修复了该问题,相关的修复补丁已合并到主线内核中。
从技术层面分析,CVE-2025-39942的根因在于ksmbd的smbdirect接收路径中缺少对remaining_data_length字段的有效边界检查。
在SMB直通协议中,数据通过分片(fragmented)方式传输。每个分片包含数据偏移量(data_offset)、数据长度(data_length)以及剩余数据长度(remaining_data_length)等元信息。max_fragmented_recv_size参数定义了单个接收操作中允许的最大分片数据总量。
正常情况下,内核会检查data_offset + data_length是否超出max_fragmented_recv_size的限制,但此漏洞的修复表明,同样需要对remaining_data_length字段进行类似验证。如果攻击者构造一个remaining_data_length值远大于实际max_fragmented_recv_size的数据包,可能导致以下后果:
1. 内核在预分配缓冲区时分配过大的内存区域,造成内存资源浪费或耗尽;
2. 数据拷贝过程中发生缓冲区溢出或越界访问;
3. 分片重组逻辑进入异常状态,导致内核崩溃(kernel panic/OOPS)。
由于该漏洞的利用需要本地低权限访问(PR:L),攻击者通常需要已获得目标系统的一定访问权限才能触发。攻击场景包括:恶意本地用户通过连接到本地ksmbd服务并发送特制SMB直通数据包来触发漏洞,或者在网络环境中,已获取网络访问权限的攻击者通过SMB连接发送恶意数据。
修复方案是在smbdirect的接收处理函数中添加对remaining_data_length的边界检查,确保其不超过max_fragmented_recv_size的限制,这与已有的data_offset + data_length检查形成完整的验证体系。