Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessVictim client connects via attacker-controlled RD Gateway
-
DeliveryComplete RDG tunnel-open handshake to RDG_CLIENT_STATE_OPENED
-
ExploitSend eight-byte keepalive header with packetLength 0xFFFF
-
ExecutionWithhold declared packet body
-
ImpactNo-progress read loop pins one client thread at full CPU
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Loop termination conditions
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a deployment that uses an RD Gateway (the FreeRDP /gateway option with HTTP/WebSocket transport, e.g. type:http) AND an attacker who controls, has compromised, or can machine-in-the-middle that gateway. The attacker must first complete the RDG tunnel-open exchange (HANDSHAKE_RESPONSE, TUNNEL_RESPONSE, TUNNEL_AUTH_RESPONSE, CHANNEL_RESPONSE success replies) so the tunnel reaches RDG_CLIENT_STATE_OPENED, then send a non-data control packet - an eight-byte header with packetLength=0xFFFF - and withhold the body. Limiting factors that reduce realistic risk: the victim client must itself initiate the connection through the malicious gateway (UI:P/UI:R), direct RDP connections without a gateway are not affected, and impact is confined to CPU exhaustion of one client thread (a user-requested abort is still polled; no process crash). The non-WebSocket transport also reproduces the spin, so the condition is not limited to the WebSocket transport. |
| Impact | This is a client-side denial-of-service with availability-only impact. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H) yields 7.1, but that score is driven almost entirely by VA:H - there is no confidentiality or integrity impact and no demonstrated crash, data access, or code execution (confirmed by the advisory). The real-world precondition materially tempers the raw score: exploitation requires the victim FreeRDP client to connect through an RD Gateway that the attacker controls, has compromised, or can machine-in-the-middle (reflected in UI:P / UI:R - the connection must be operator-initiated). No CISA KEV listing and no EPSS score were provided, so there is no confirmed active-exploitation or exploitation-probability signal; exploitation status is therefore 'no public exploit identified at time of analysis' except that the GHSA advisory itself publishes a full fake-gateway reproduction harness (a public PoC reference exists; it is not verified as a weaponized working exploit). The vuln.today decision label is 'this_week', indicating prioritized but non-emergency remediation. Net assessment: a genuine but bounded issue - the high-ish CVSS reflects reliable CPU exhaustion, but impact is limited to spinning one client thread at ~100% CPU, and the attacker must already occupy or impersonate the gateway. With EPSS missing and KEV absent, no signal supports widespread opportunistic exploitation; treat as positional/targeted rather than mass-exploitable. |
| Exploit ScenarioDerived | An attacker who controls, has compromised, or can machine-in-the-middle an RD Gateway waits for a FreeRDP client (<= 3.32.1) to connect; after completing the RDG tunnel-open exchange and reaching RDG_CLIENT_STATE_OPENED, the gateway sends an eight-byte keepalive control header with packetLength=0xFFFF and withholds the declared body. rdg_process_control_packet then retries a no-progress rdg_socket_read whenever BIO_should_retry is true with no wait, backoff, or limit, pinning one client thread at full CPU (measured at 99.8% of one core with 65,527 bytes remaining). The GHSA advisory publishes full C reproduction source (a disposable TLS fake-gateway in 'ctlspin' mode); it is a reproduction harness and not labeled a confirmed weaponized exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
CPU exhaustion in FreeRDP 3.32.1 and earlier allows a malicious or compromised RD Gateway to pin one client thread at 100% of a core by completing the RDG tunnel-open exchange and then sending an eight-byte keepalive control header that declares a 65,535-byte body which is never delivered. Only clients that explicitly connect through a gateway (the /gateway option with HTTP or WebSocket transport) are affected; direct RDP connections are not, and the victim must initiate the session, so the practical attack surface is users routed through an untrusted or machine-in-the-middled gateway. Impact is availability-only - the upstream advisory and reproduction confirm CPU spin and a runnable thread, not a crash, memory corruption, data access, or code execution - and the issue is fixed in FreeRDP 3.32.2. The upstream advisory (GHSA-x4x6-2hrm-hvq9) ships a complete proof-of-concept gateway harness that reproduces the spin, but the flaw is not listed in CISA KEV.
RemediationAI
Upgrade FreeRDP to 3.32.2 or later, the vendor-released fix for this issue, as documented in GHSA-x4x6-2hrm-hvq9; downstream distributions tracking c/FreeRDP should pick up the 3.32.2 package when their maintainers publish it. Until then, the exposure is bounded by who operates the gateway: restrict /gateway usage to RD Gateways your organisation controls over trusted paths and avoid connecting through third-party or unvetted gateway endpoints, since exploitation requires an attacker to control, compromise, or intercept that gateway and to complete the tunnel-open handshake first. Note that routing around the gateway by connecting directly to the RDP host does avoid this code path but changes your network architecture and may bypass gateway-enforced access controls, so treat it as a scoping decision rather than a general workaround. When a client is hit, the operation can be aborted because the client still polls a user-requested abort, so terminating the session recovers the thread; there is no vendor-provided configuration flag that disables keepalive control processing. Remediation should be scheduled on a this-week cadence: the flaw is remote-triggerable without authentication and yields high availability impact, but it is availability-only, limited to one client thread, and not known to be actively exploited.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
FreeRDP's RD Gateway (RDG) client implements the MS-TSGU-style tunnel that wraps RDP inside HTTPS or WebSocket when the /gateway option is used. After the tunnel reaches RDG_CLIENT_STATE_OPENED, rdg_read_data_packet dispatches any packet whose type is not a data packet to rdg_process_control_packet. That function reads the declared body by repeatedly calling rdg_socket_read and retrying whenever OpenSSL's BIO_should_retry is true, with no wait, backoff, or retry ceiling. A gateway that sends the 0x000D keepalive control header with packetLength set to 0xFFFF and then stalls leaves the read loop making no forward progress while remaining runnable, producing the CWE-835 (infinite loop) condition upstream also classifies under CWE-400 (uncontrolled resource consumption). Independent measurement recorded 200 CPU ticks in 2.0035 seconds at HZ=100 (99.8% of one core) and a debugger repeatedly broke inside the real rdg_socket_read with 65,527 bytes outstanding. The audited rdg.c bytes match the 3.32.1 release source and the code path was inspected in 3.0.0, 3.20.0, 3.28.0, 3.31.1, 3.32.0 and 3.32.1; the first affected release was not established, and intermediate snapshots were not checked. The non-WebSocket transport reproduces the spin as well, so the defect is transport-independent. A user-requested abort is still polled, and the trigger does not crash the client process.
Know when Freerdp gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Remote malicious gateway, low complexity, no client privileges; the victim must initiate the gateway connection so UI:R; impact is availability-only CPU exhaustion, so C:N/I:N/A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
FreeRDP before 3.32.2 contains a denial-of-service vulnerability in rdg_process_control_packet that allows a malicious RD Gateway to exhaust client CPU by sending an incomplete keepalive control packet. Attackers completing the RDG tunnel-open exchange then send an eight-byte header with packetLength 0xFFFF and withhold the body, causing an unbounded no-progress read loop that spins one client thread at full CPU.
Executive ViewAI
FreeRDP 3.32.1 and earlier contain a CPU exhaustion vulnerability that affects only clients connecting through an RD Gateway, allowing a malicious or compromised gateway to pin a client thread at 100% CPU. This could degrade or deny remote access for employees using untrusted gateways, but impact is limited to availability and requires user-initiated connections, so leadership should prioritize patching to avoid productivity loss and potential service disruption.
Vendor-released patch: 3.32.2
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Use-after-free in FreeRDP xf_clipboard_format_equal before 3.23.0. Clipboard format comparison uses freed memory. Fifth
Use-after-free in FreeRDP xf_AppUpdateWindowFromSurface before 3.23.0. Surface-to-window update triggers memory corrupti
Use-after-free in FreeRDP xf_SetWindowMinMaxInfo before version 3.23.0. X11 client window management triggers memory cor
Use-after-free in FreeRDP xf_cliprdr_provide_data clipboard handling before 3.23.0. Clipboard data exchange triggers mem
FreeRDP IRP thread handler has a use-after-free where the IRP is freed by Complete() then accessed on the error path. Fi
FreeRDP drive read heap overflow when server-controlled read length exceeds IRP output buffer. Fixed in 3.20.1. PoC avai
FreeRDP client before 3.20.1 has a heap buffer overflow in AUDIN format processing. A malicious RDP server can corrupt m
Use-after-free in FreeRDP xf_AppUpdateWindowFromSurface before 3.23.0. Different code path from CVE-2026-25953. PoC and
FreeRDP is a free implementation of the Remote Desktop Protocol. Rated critical severity (CVSS 9.8), this vulnerability
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical
EUVD-2026-115932
GHSA-4c29-wc44-6c3g
NVD
CVE.org
Exploit-DB