IPBUF安全漏洞报告
English
CVE-2022-50533 CVSS 5.5 中危

CVE-2022-50533 Linux内核mac80211空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2022-50533
漏洞类型
空指针解引用(Null Pointer Dereference)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel(mac80211无线子系统/mlme模块)

相关标签

空指针解引用Linux内核mac80211WiFiMLME拒绝服务本地提权无线安全内核漏洞CWE-476

漏洞概述

CVE-2022-50533是Linux内核mac80211无线子系统中mlme(媒体访问控制子层管理实体)模块的一个空指针解引用漏洞。该漏洞位于WiFi关联(association)处理流程中,当客户端尝试关联到一个没有link 0的多链路设备(MLD)接入点(AP)且关联失败时,内核会发生空指针解引用导致系统崩溃。

具体而言,在关联失败的处理路径中,内核会清除`sdata->vif.valid_links`标志位,但同时假设`ap_mld_addr`或link 0的BSS结构体仍然有效。由于在清除`valid_links`之后并未将`ap_mld_addr`正确赋值到相关结构体中,导致后续的tracing追踪代码访问无效的内存地址,触发空指针解引用错误。

该漏洞的CVSS 3.1评分为5.5分,属于中危级别。虽然需要本地权限(PR:L)才能触发,但由于可用性影响为高(A:H),攻击者可以利用该漏洞造成系统拒绝服务(内核崩溃/panic)。该漏洞影响使用mac80211框架的Linux内核版本,特别是在支持WiFi 6E/7多链路操作(MLO)的环境中更为突出。

技术细节

该漏洞的根本原因在于mac80211 MLME模块在处理关联失败时的状态清理逻辑存在缺陷。

**漏洞原理:**
在Linux内核的mac80211驱动框架中,当无线客户端尝试与一个多链路设备(MLD)接入点建立关联时,系统需要管理多个链路(link)的状态。当关联到没有link 0的AP且关联失败时,原有代码会执行以下操作:
1. 清除`sdata->vif.valid_links`标志位
2. 清除`sdata->vif.cfg.ap_addr`
3. 但后续的tracing代码仍假设`ap_mld_addr`或link 0的BSS结构体有效

由于在清除`valid_links`之前未保留`ap_mld_addr`的本地副本,导致tracing代码访问已释放或未初始化的内存区域,触发空指针解引用。

**利用方式:**
攻击者需要本地权限(普通用户即可),通过以下步骤触发:
1. 配置支持mac80211的无线网卡
2. 扫描并尝试连接到一个配置为多链路设备(MLD)但缺少link 0的恶意或特殊配置AP
3. 强制使关联过程失败(例如通过信号干扰或AP端拒绝关联)
4. 内核在处理关联失败的tracing路径时触发空指针解引用
5. 导致内核panic,系统拒绝服务

**修复方案:**
修复补丁保留了`ap_addr`的本地副本,并在清除`valid_links`之前将其赋值给相关结构体,确保tracing代码可以安全访问。

攻击链分析

STEP 1
步骤1:环境准备
攻击者需要拥有本地系统访问权限(普通用户权限即可),系统需运行存在漏洞的Linux内核版本,并配备支持mac80211的无线网卡设备。
STEP 2
步骤2:配置恶意AP
设置一个多链路设备(MLD)接入点,但故意不配置link 0,或者使用cfg80211测试模式模拟一个缺少link 0的MLD AP。
STEP 3
步骤3:触发关联请求
通过nl80211 netlink接口或wpa_supplicant等工具,向目标AP发起WiFi关联请求。
STEP 4
步骤4:强制关联失败
通过信号干扰、AP端拒绝或网络配置等方式使关联过程失败,触发内核的错误处理路径。
STEP 5
步骤5:触发空指针解引用
内核在处理关联失败时,清除valid_links标志后尝试访问ap_mld_addr,触发空指针解引用,导致内核panic。
STEP 6
步骤6:拒绝服务
系统内核崩溃,触发内核oops或panic,攻击者成功实现本地拒绝服务攻击,可能需要重启系统恢复。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2022-50533 PoC - Trigger null pointer dereference in mac80211 mlme // This PoC demonstrates how to trigger the vulnerability by attempting // association with an MLD AP that lacks link 0 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/genetlink.h> #include <linux/nl80211.h> // Note: This requires root or CAP_NET_ADMIN privileges // to interact with nl80211 netlink interface int trigger_vuln() { int sock; struct sockaddr_nl addr; // Step 1: Create netlink socket for nl80211 communication sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_GENERIC); if (sock < 0) { perror("socket"); return -1; } memset(&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; // Step 2: Connect to nl80211 subsystem // (Simplified - actual implementation requires proper nl80211 message construction) // Step 3: Trigger association to an MLD AP without link 0 // Send NL80211_CMD_CONNECT to a specially crafted BSS // The AP should be configured as MLD but without valid link 0 // Step 4: Force association failure // This can be done by: // - Using a BSSID that responds with association failure // - Interfering with the association handshake // - Using cfg80211 testmode to simulate failure // The kernel will then: // 1. Clear sdata->vif.valid_links // 2. Clear sdata->vif.cfg.ap_addr // 3. Attempt to trace using invalid ap_mld_addr // 4. Crash with null pointer dereference printf("Triggering CVE-2022-50533...\n"); printf("System should panic if vulnerable\n"); close(sock); return 0; } int main(int argc, char *argv[]) { printf("CVE-2022-50533 PoC\n"); printf("Linux kernel mac80211 null-ptr-deref on failed assoc\n"); return trigger_vuln(); }

影响范围

Linux Kernel < 5.15.80
Linux Kernel 5.16.x < 5.16.14
Linux Kernel 5.17.x < 5.17.2
Linux Kernel 5.18.x(开发版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制普通用户对无线网络管理接口(如nl80211 netlink)的访问权限;2)使用iptables或nftables规则限制对无线相关系统调用的访问;3)在系统配置中禁用多链路操作(MLO)相关功能;4)加强系统监控,及时发现异常的内核崩溃事件;5)确保只有受信任的用户才能配置无线网络连接。

参考链接

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