Skip to main content

FreeRDP CVE-2026-121406

| EUVDEUVD-2026-115938 MEDIUM
Reachable Assertion (CWE-617)
2026-11-03 VulnCheck GHSA-9fvr-q6q4-7h2p
5.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Lure FreeRDP client to malicious RDP server
  2. Delivery
    Complete NLA auth and session activation
  3. Exploit
    Open RDPGFX dynamic channel
  4. Execution
    Send zero-output ZGFX payload (E0 20 00)
  5. Persist
    Null output pointer hits Stream_StaticConstInit assertion
  6. Impact
    Client 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

FreeRDP 0 <3.32.2

Affected Packages

euvd freerdp fix: 3.32.2

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

Vendor (VulnCheck) PRIMARY 5.3 MEDIUM
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
vuln.today AI 4.3 MEDIUM

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).

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Nov 03, 2026 - 16:17 EUVD
CVE Published
Nov 03, 2026 - 14:28 cve.org
MEDIUM 5.3

DescriptionCVE.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

Prevalence
High
de facto open-source RDP client library embedded in many remote-desktop products
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2026-25997 CRITICAL POC
9.8 Feb 25

Use-after-free in FreeRDP xf_clipboard_format_equal before 3.23.0. Clipboard format comparison uses freed memory. Fifth

CVE-2026-25953 CRITICAL POC
9.8 Feb 25

Use-after-free in FreeRDP xf_AppUpdateWindowFromSurface before 3.23.0. Surface-to-window update triggers memory corrupti

CVE-2026-25952 CRITICAL POC
9.8 Feb 25

Use-after-free in FreeRDP xf_SetWindowMinMaxInfo before version 3.23.0. X11 client window management triggers memory cor

CVE-2026-25959 CRITICAL POC
9.8 Feb 25

Use-after-free in FreeRDP xf_cliprdr_provide_data clipboard handling before 3.23.0. Clipboard data exchange triggers mem

CVE-2026-22857 CRITICAL POC
9.8 Jan 14

FreeRDP IRP thread handler has a use-after-free where the IRP is freed by Complete() then accessed on the error path. Fi

CVE-2026-22854 CRITICAL POC
9.8 Jan 14

FreeRDP drive read heap overflow when server-controlled read length exceeds IRP output buffer. Fixed in 3.20.1. PoC avai

CVE-2026-22852 CRITICAL POC
9.8 Jan 14

FreeRDP client before 3.20.1 has a heap buffer overflow in AUDIN format processing. A malicious RDP server can corrupt m

CVE-2026-25955 CRITICAL POC
9.8 Feb 25

Use-after-free in FreeRDP xf_AppUpdateWindowFromSurface before 3.23.0. Different code path from CVE-2026-25953. PoC and

CVE-2024-32041 CRITICAL POC
9.8 Apr 22

FreeRDP is a free implementation of the Remote Desktop Protocol. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2023-40574 CRITICAL POC
9.8 Aug 31

FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical

CVE-2023-40569 CRITICAL POC
9.8 Aug 31

FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical

CVE-2023-40567 CRITICAL POC
9.8 Aug 31

FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy