IPBUF安全漏洞报告
English
CVE-2026-31674 CVSS 7.1 高危

CVE-2026-31674 Linux内核netfilter越界访问漏洞

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

漏洞信息

漏洞编号
CVE-2026-31674
漏洞类型
内存越界访问
CVSS评分
7.1 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelNetfilterCVE-2026-31674Out-of-BoundsDoSInformation Disclosure

漏洞概述

Linux内核netfilter子系统的IPv6路由头(rt)匹配模块中存在一个缺陷。该漏洞允许攻击者通过提交特制的防火墙规则,使`addrnr`参数超出预设边界。由于`rt_mt6_check()`函数在规则安装阶段未正确拦截此类异常值,导致后续的匹配函数`rt_mt6()`在处理时发生越界内存访问。本地低权限攻击者利用此漏洞可导致系统崩溃或泄露敏感内核信息。

技术细节

该漏洞的核心在于校验逻辑的缺失。在Linux内核的`net/ipv6/netfilter/ip6t_rt.c`文件中,`rt_mt6_check`函数负责验证用户通过`iptables`等工具下发的IPv6路由头匹配规则。正常情况下,`addrnr`代表地址数量,必须小于`IP6T_RT_HOPS`(通常为3)。然而,漏洞代码未能拒绝过大的`addrnr`值。当包含恶意`addrnr`的规则被加载并生效后,一旦有网络包匹配该规则,`rt_mt6`函数会使用该越界值访问`rtinfo->addrs`数组。这导致读取或写入非法内存地址,根据具体内存布局,可能引发内核段错误(DoS)或通过越界读取获取内核内存数据。

攻击链分析

STEP 1
1. 获取本地访问
攻击者在目标Linux系统上获得本地低权限用户访问。
STEP 2
2. 构造恶意规则
攻击者编写一段代码或脚本,准备一个IPv6防火墙规则,其中`addrnr`字段被设置为超过`IP6T_RT_HOPS`的值。
STEP 3
3. 安装规则
攻击者尝试将该规则加载到内核中。由于`rt_mt6_check()`漏洞,内核未能拒绝该畸形规则。
STEP 4
4. 触发匹配
当系统接收到符合该规则特征(或任意特征,取决于规则配置)的IPv6数据包时,触发`rt_mt6()`函数。
STEP 5
5. 内存越界
`rt_mt6()`函数使用越界的`addrnr`索引访问数组,导致内核崩溃(DoS)或信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Concept for CVE-2026-31674 * This code demonstrates how to structure a malicious rule that bypasses * the buggy check in rt_mt6_check(), leading to out-of-bounds access. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <linux/netfilter_ipv6/ip6_tables.h> // Define the maximum allowed hops (usually defined in kernel headers) #define IP6T_RT_HOPS 3 // Simplified structure representing the vulnerable match info struct ip6t_rt_info { __u32 flags; __u32 invflags; __u16 rt_type; __u16 segsleft[2]; __u16 hdrlen; __u8 lastseg; __u8 addrnr; // Vulnerable field __u16 reserved; struct in6_addr addrs[1]; }; int main() { struct ip6t_rt_info rt_rule; memset(&rt_rule, 0, sizeof(rt_rule)); // Set addrnr to a value exceeding IP6T_RT_HOPS // This simulates the malicious payload rt_rule.addrnr = 10; printf("[+] Crafting malicious netfilter rule...\n"); printf("[+] addrnr set to: %d (Max allowed: %d)\n", rt_rule.addrnr, IP6T_RT_HOPS); printf("[!] If loaded, rt_mt6() will access addrs[%d], causing OOB access.\n", rt_rule.addrnr); // In a real exploit scenario, this structure would be passed to the kernel // via setsockopt() using IPT_SO_SET_REPLACE. return 0; }

影响范围

Linux Kernel (修复前版本)

防御指南

临时缓解措施
建议暂时限制非管理员用户对防火墙规则(iptables/ip6tables)的修改权限,直到系统完成内核更新。

参考链接

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