Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLure FreeRDP client to malicious RDP server
-
DeliveryComplete NLA auth and session activation
-
ExploitOpen RDPGFX dynamic channel
-
ExecutionSend zero-output ZGFX payload (E0 20 00)
-
PersistNull output pointer hits Stream_StaticConstInit assertion
-
ImpactClient aborts (exit 134)
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V16 - Security Logging and Error Handling Reachable assertion handling
|
| Exploitation Conditions | A FreeRDP client at version 3.32.1 or earlier must initiate a connection to an attacker-controlled or compromised RDP server, complete NLA authentication, and reach session activation; the server then opens the RDPGFX dynamic channel and sends a zero-output ZGFX payload (the single-segment 'E0 20 00' or the seven-byte empty multipart form). Exploitation is further gated on the client being built with verbose WinPR assertions enabled (WITH_VERBOSE_WINPR_ASSERT, the upstream CMake default) or compiled without NDEBUG - an assertion-disabled, NDEBUG-optimized build returned cleanly and does not abort. Limiting factors: the attack requires the victim to connect to a malicious server (UI:P), applies only to affected build configurations, and the verified live impact is specific to the xfreerdp client front end. Impact is limited to client crash (availability); no code execution, memory corruption, or information disclosure. |
| Impact | This is a medium-severity, denial-of-service-only issue (CVSS 4.0 5.3, provided in input) whose real-world priority is moderate rather than urgent. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L) shows the only impact is low availability (VA:L) with no confidentiality or integrity effect - consistent with the advisory's explicit statement that no memory corruption, disclosure, or code execution was observed. The vuln.today Decision label is 'this_month' (not act_now/emergency), which matches the picture of a client crash rather than a server-side or wormable flaw. No EPSS score and no KEV status were provided in the input, so there is no evidence of active exploitation; this is not in CISA KEV. A public PoC does exist in the GHSA advisory (a component-level C reproduction confirmed to abort with exit 134, plus a described live xfreerdp test reaching the same assertion), so exploitability is demonstrated even though impact is limited. A critical nuance: the abort only occurs in builds compiled with verbose WinPR assertions (WITH_VERBOSE_WINPR_ASSERT, the upstream CMake default) or without NDEBUG; an assertion-disabled optimized build returned cleanly, so hardened/release builds with NDEBUG may not be affected - defenders should verify their build configuration. The key limiting factor is the UI:P requirement: the victim client must connect to an attacker-controlled or compromised RDP server, so this matters most where clients reach untrusted servers (connection brokers, gateways, honeypots, MitM positions). |
| Exploit ScenarioDerived | A victim runs a FreeRDP-based client (version 3.32.1 or earlier) and connects to a malicious or compromised RDP server. After NLA authentication and session activation, the server opens the RDPGFX dynamic channel and sends a three-byte zero-output ZGFX payload (E0 20 00), which causes zgfx_decompress to return success with a null output pointer and triggers the WINPR_ASSERT in Stream_StaticConstInit, crashing the client (exit 134). A public component-level PoC and a described live xfreerdp reproduction exist in the vendor GHSA advisory, so the crash is reliably reproducible against assertion-enabled builds. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
Denial of service in FreeRDP clients at version 3.32.1 and earlier lets a malicious or compromised RDP server terminate the connecting client by sending a three-byte zero-output ZGFX payload (E0 20 00) on the RDPGFX dynamic channel after session activation. The decompressor returns success while leaving its output pointer null and its size zero, and rdpgfx_on_data_received - which rejects only negative decoder status - forwards that null pointer into Stream_StaticConstInit, whose WINPR_ASSERT(buffer) aborts builds compiled with verbose WinPR assertions, the upstream CMake default. A component-level reproduction and a documented live xfreerdp test (client exit 134) are public; only assertion-enabled builds are affected, the verified impact is limited to client availability with no memory corruption, disclosure or code execution, and no CISA KEV listing or confirmed active exploitation is reported (priority label: this_month).
RemediationAI
Upgrade FreeRDP clients to 3.32.2, the vendor-released fix version, which handles zero-length successful decompression before Stream_StaticConstInit (either as a no-op or as a malformed-payload error) and requires a non-null output pointer for positive lengths; confirm the build treats both zero-output payload forms correctly and retain valid non-empty ZGFX handling. Where upgrading is not immediately possible, the trade-off mitigation is to build with WITH_VERBOSE_WINPR_ASSERT=OFF together with NDEBUG, which was verified to return cleanly for both payloads - note that assertions-off without NDEBUG still aborts on the libc assert(buffer), and disabling assertions reduces diagnostic coverage across the whole client. Disabling the RDPGFX/EGFX dynamic channel or forcing a graphics mode that does not negotiate it removes the trigger at the cost of degraded remote graphics performance, and restricting client connections to trusted, controlled RDP servers eliminates the malicious-server precondition. Details and reproduction notes are in the vendor advisory at https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-2c9x-4gr7-hrwx and the VulnCheck advisory at https://www.vulncheck.com/advisories/freerdp-before-3.32.2-client-denial-of-service-via-zero-output-zgfx-payload.
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 is an open-source Remote Desktop Protocol client/server stack; on the client side the RDPGFX (EGFX) dynamic virtual channel carries graphics update PDUs whose payloads are compressed with the ZGFX bulk-compression scheme and unframed via WinPR streams. According to the GHSA advisory, the flaw is an input-validation gap (CWE-20) that becomes a reachable assertion (CWE-617): zgfx_decompress treats a compressed segment with zero output bits as a successful decode, returning a positive status with a null output pointer and zero length, and rdpgfx_on_data_received validates only for negative status before calling Stream_StaticConstInit(buffer, NULL, 0). The WinPR assertion in Stream_StaticInit then aborts the process. The advisory documents two trigger forms - the three-byte single-segment payload (E0 = ZGFX_SEGMENTED_SINGLE, 20 = PACKET_COMPRESSED, 00 padding) and a seven-byte empty multipart payload (E1 with zero segment count and zero uncompressed size) - both of which produced status=1 with a nil pointer and exit 134 in an assertion-enabled test harness, while an assertion-disabled, NDEBUG-optimised control returned cleanly. The defect is present in the inspected FreeRDP 3.32.0 source. The CPE cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:* spans the affected line up to the 3.32.2 fix; the provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P, availability-only) and the independent CVSS 3.1 assessment (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L) agree that this is a client-side availability issue only.
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:L/SC:N/SI:N/SA:N
The malicious server reaches the client over the network with no privileges (PR:N) and a reliable trigger (AC:L), but the victim must connect to it (UI:R); only availability is affected (A:L).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
FreeRDP before 3.32.2 allows a client assertion abort because rdpgfx_on_data_received rejects only negative zgfx_decompress status and passes the resulting null output pointer to Stream_StaticConstInit. A malicious RDP server can send a zero-output ZGFX payload on the RDPGFX channel after session activation to terminate the client.
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-115938
GHSA-9fvr-q6q4-7h2p
NVD
CVE.org
Exploit-DB