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

CVE-2026-23385 Linux内核nf_tables拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux Kernelnetfilternf_tablesDoS拒绝服务本地漏洞内存分配

漏洞概述

CVE-2026-23385 是 Linux 内核 netfilter 子系统 nf_tables 模块中的一个安全漏洞。该漏洞由 syzbot 通过故障注入测试发现,主要问题在于处理集合刷新时的内存分配逻辑。当系统执行 nf_tables 的集合刷新操作时,由于代码逻辑缺陷,可能会在不当的时机克隆集合,导致 GFP_KERNEL 内存分配失败。这种分配失败会触发内核警告(WARN splat),严重时可能导致内核崩溃或系统无响应。攻击者需要具备本地低权限用户身份即可利用此漏洞,主要影响系统的可用性,造成拒绝服务。

技术细节

该漏洞位于 Linux 内核的 `net/netfilter/nf_tables_api.c` 文件中,具体涉及 `nft_map_deactivate` 函数。在处理 nf_tables 集合的停用和刷新操作时,后端(如 rbtree 和 pipapo)的迭代逻辑存在缺陷。原有的实现在某些路径下会尝试克隆正在被删除或更新的集合,而在内存压力较大或通过 fault injection 机制模拟内存不足时,`GFP_KERNEL` 分配请求会失败。修复补丁引入了 `NFT_ITER_UPDATE_CLONE` 标志,将集合克隆操作严格限制在刷新集命令的准备阶段,并确保在更新迭代时优先使用现有的克隆或表示形式。由于该漏洞可以通过本地低权限用户触发,且会导致内核层面的异常,因此属于本地拒绝服务漏洞。

攻击链分析

STEP 1
步骤1:本地访问
攻击者获取目标系统的本地低权限用户访问权限。
STEP 2
步骤2:环境准备
攻击者创建特定的 nf_tables 规则和集合,或者利用系统已有的复杂网络配置。
STEP 3
步骤3:触发内存压力
攻击者通过运行消耗内存的程序或配置内核故障注入机制,增加 GFP_KERNEL 分配失败的概率。
STEP 4
步骤4:执行刷新操作
攻击者执行 nft flush set 命令,触发 nf_tables_api.c 中的错误代码路径。
STEP 5
步骤5:系统崩溃
内核在尝试克隆集合时分配内存失败,触发 WARN splat 或内核崩溃,导致拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-23385 * This is a conceptual PoC demonstrating the trigger path. * It requires libmnl and libnftnl to interact with netfilter. * The actual crash requires memory pressure/fault injection. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <linux/netfilter/nf_tables.h> // Conceptual representation of the netlink message to flush a set // In a real scenario, this would use libnftnl to construct the batch. void trigger_flush() { // 1. Create a netfilter table and set (conceptual) printf("[+] Creating nftables table and set...\n"); // system("nft add table ip test_table"); // system("nft add set ip test_table test_set { type ipv4_addr; }"); // 2. Fill the set with elements to increase memory usage printf("[+] Adding elements to the set...\n"); // for(int i=0; i<1000; i++) ... // 3. Trigger the flush command which hits the buggy code path printf("[!] Triggering set flush operation...\n"); // system("nft flush set ip test_table test_set"); // Note: To reliably reproduce the WARN splat, one needs to enable // fault injection (e.g., via debugfs) to fail the GFP_KERNEL allocation. } int main() { printf("CVE-2026-23385 PoC Runner\n"); trigger_flush(); return 0; }

影响范围

Linux Kernel (Versions prior to commit 9154945a6394029822bd08c24cef5a3f86d0424a)
Linux Kernel (Versions prior to commit b7f67282ca2be14b727dd698b50e10cf5d8c66f9)
Linux Kernel (Versions prior to commit fb7fb4016300ac622c964069e286dc83166a5d52)

防御指南

临时缓解措施
建议立即应用官方发布的内核补丁。如果无法立即更新,可以通过限制本地用户权限或暂时禁用复杂的 nf_tables 规则集来降低风险。对于关键系统,应监控内核日志以检测相关的 WARN 警告信息。

参考链接

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