Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLure victim to malicious RDP server
-
DeliveryClient with /usb announces matching USB device
-
ExploitServer sends control-channel CLOSE_REQUEST
-
ExecutionRace frees channel during announcement
-
PersistAnnouncement thread reads stale channel->Write
-
ImpactClient use-after-free crash (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the FreeRDP client to be started with USB redirection enabled (/usb), a matching local USB device being announced at connect time, and a malicious or compromised RDP server that sends a dynamic-virtual-channel CLOSE_REQUEST for the urbdrc control channel. The server's close must land in the narrow window between FindChannelById returning the unreferenced pointer and the announcement thread reading channel->Write, because the control-channel close path does not take the device-manager loading_lock. Limiting factors: the victim must initiate the connection and opt into USB redirection (non-default), the race is timing-dependent (AC:H/AT:P), and the demonstrated outcome is only a client crash - no confidentiality, integrity or code execution was shown. The device-channel variant is serialized by a separate lock and is not affected. |
| Impact | The input CVSS 4.0 vector (CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N, score 6.0/MEDIUM) describes a network-reachable but hard-to-trigger flaw: AC:H plus AT:P reflect the CWE-362 race window between the lookup and the write, and UI:P reflects that the victim must connect to the malicious server and have USB redirection active. Impact is availability-only (VA:H; VC/VI = N), consistent with the advisory which states no confidentiality loss, no integrity loss and no demonstrated RCE - the demonstrated outcome is a client crash. The vuln.today Decision label is 'this_month' (not act_now/emergency), VulnCheck is the reporter, and the source is a FreeRDP GHSA advisory. No EPSS score is provided in the input and the CVE is not listed in CISA KEV, so there is no confirmed active exploitation. A public PoC reference exists in the form of a focused ASan harness that includes the real drdynvc translation unit and reproduces the heap-use-after-free read of the eight-byte Write pointer (and a harness-forced same-slot indirect call); it is not verified as working end-to-end exploit code, and the advisory explicitly says a live USB race and server-directed memory reclamation have not been shown. On balance this is a real but lower-tier priority: the attack requires a malicious/compromised server, a non-default client configuration, a matching local USB device and a precise timing race, and yields a crash rather than code execution - matching the 'this_month' triage rather than an emergency. |
| Exploit ScenarioDerived | A victim running FreeRDP with USB redirection (/usb) enabled connects to an attacker-controlled or compromised RDP server while a matching local USB device is being announced. The server sends a dynamic-virtual-channel CLOSE_REQUEST for the USB redirection control channel, timed to race the libusb announcement thread so the channel is freed before the thread reads channel->Write, producing a use-after-free and a client crash. A focused ASan harness publicly demonstrates the use-after-free using real FreeRDP code, but no end-to-end stock-client exploit has been observed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
Client-side use-after-free in FreeRDP's urbdrc USB redirection channel lets a malicious RDP server crash a connecting client that runs with /usb enabled while a matching local USB device is being announced. FindChannelById returns a raw channel pointer without taking a reference, and the control-channel CLOSE_REQUEST path frees that channel without holding the device manager's loading_lock, so the libusb announcement thread can read channel->Write from freed memory. Triggering requires the victim to initiate the connection with USB redirection active and to win a narrow timing window (AC:H/AT:P); a PoC harness shipped with the vendor advisory demonstrates the use-after-free under AddressSanitizer, but it is not an end-to-end RDP reproduction and is not verified as working exploit code, and no active exploitation has been reported.
RemediationAI
Vendor-released patch: FreeRDP 3.32.2. Upgrade affected clients to 3.32.2 or later per the GitHub advisory at https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-w897-ffhv-5j7g; no other branch fix version is identified in the supplied data. Where an immediate upgrade is not possible, the effective compensating control is to stop starting the client with /usb (USB redirection disabled), which removes the urbdrc channel from the session entirely and therefore eliminates the race, at the cost of losing USB passthrough for that user population. Because exploitation requires the victim to connect to a malicious or compromised RDP server, restricting client connections to trusted RDP endpoints also reduces exposure, though that does not fix the underlying lifetime bug and depends on reliable endpoint allow-listing. Upstream remediation guidance in the advisory is to give each cross-thread channel lookup an owned reference and release it only after the write completes, or to serialize control-channel close with the full announcement and write operation, plus add a two-thread regression test that pauses announcement after lookup, closes the control channel, and verifies the write never touches freed memory.
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 dynamic virtual channel (drdynvc) client manager maintains a channelsById hash table of DVCMAN_CHANNEL objects with reference-counted lifetimes. The urbdrc USB redirection plugin obtains its channel through FindChannelById, which resolves via dvcman_get_channel_by_id(..., FALSE) and returns the bare IWTSVirtualChannel* without extending the object's lifetime; a separate libusb announcement thread later invokes channel->Write through that stale pointer. The server-driven dynamic-channel thread handles a virtual-channel CLOSE_REQUEST by running dvcman_channel_unref -> HashTable_Remove -> channelByIdCleanerFn -> dvcman_channel_free, and this control-channel close branch does not acquire the device-manager loading_lock that the announcement path holds, giving a classic CWE-362 race that produces CWE-416 use-after-free. AddressSanitizer reports an eight-byte heap-use-after-free read of the Write function pointer after dvcman_channel_free; a harness-forced same-size reclamation showed a controlled indirect call, but that replacement was created by the local test harness and server-directed replacement contents plus a live USB hotplug race have not been shown. The device-channel variant is serialized by a separate lock and is not affected. Validation found the same unreferenced lookup, announcement write and close/free path in the 3.27.1, 3.28.0, 3.31.1 and 3.32.0 sources, but source history did not establish an introducing or fixing commit.
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:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Network-reachable malicious server but a timing race gives AC:H; victim must connect and enable USB redirection so UI:R; impact is client crash only, hence 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 use-after-free in the urbdrc USB redirection channel because FindChannelById returns a channel pointer without a reference and the control-channel close path does not take the device manager's loading_lock. A malicious RDP server can send a control-channel CLOSE_REQUEST while the client announces a USB device, freeing the channel before the announcement thread reads channel->Write and crashing 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
Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).
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-115940
GHSA-3j7f-j9fp-cvjc
NVD
CVE.org
Vulnrichment
Exploit-DB