CVE-2026-25952: 
NixOS vulnerability analysis and mitigation

Overview

CVE-2026-25952 is a heap use-after-free vulnerability in FreeRDP's X11 client implementation, specifically in the xf_SetWindowMinMaxInfo function. It affects all FreeRDP versions prior to 3.23.0 and arises from a race condition between the RAIL SVC channel thread and the main thread during concurrent window management operations. The vulnerability was disclosed on February 25, 2026, and fixed in version 3.23.0. It carries a CVSS v3.1 base score of 9.8 (Critical) and a CVSS v4.0 base score of 5.5 (Medium) (GitHub Advisory).

Technical details

The root cause is a use-after-free (CWE-416) race condition in the X11 RAIL client code. The RAIL SVC channel thread (T6) calls xf_rail_get_window in xf_rail_server_min_max_info, which returns an unprotected raw pointer to an xfAppWindow struct from the railWindows hash table. Concurrently, the main thread (T2) processes a window delete order, triggering xf_rail_window_delete → xf_rail_del_window → HashTable_Remove, which invokes the hash table's value destructor rail_window_free → xf_DestroyWindow → free(appWindow). When the RAIL thread subsequently dereferences appWindow->handle inside xf_SetWindowMinMaxInfo via XSetWMNormalHints, the memory has already been freed, resulting in a heap-use-after-free. A proof-of-concept demonstrating the issue with AddressSanitizer output is included in the GitHub security advisory (GitHub Advisory, Patch Commit).

Impact

A malicious RDP server can trigger this vulnerability remotely without authentication or user interaction by sending crafted RAIL ServerMinMaxInfo PDUs while simultaneously issuing window delete orders. The primary impact is a client-side crash (denial of service), but depending on heap allocator behavior and surrounding heap layout, the heap corruption could potentially be leveraged for arbitrary code execution on the connecting client. Secondary risks include possible sensitive memory disclosure from the freed heap region (GitHub Advisory).

Exploitability

A proof-of-concept exploit is publicly available via the GitHub security advisory, demonstrating the vulnerability using AddressSanitizer-instrumented builds. The EPSS score is approximately 0.066%, indicating low current exploitation probability. There is no evidence of in-the-wild exploitation at this time, and the vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The vulnerability requires the attacker to control or impersonate an RDP server that supports RAIL (RemoteApp) mode (GitHub Advisory).

Exploitation steps

  1. Set up a malicious RAIL-capable RDP server: Configure a rogue RDP server that supports the Remote Applications Integrated Locally (RAIL) extension and can send arbitrary RAIL protocol messages to connecting clients.
  2. Lure a victim to connect: Induce a target running a vulnerable FreeRDP X11 client (version < 3.23.0) to connect to the malicious server, e.g., via a phishing link or by intercepting an existing RDP connection (man-in-the-middle).
  3. Initiate a RemoteApp session: Send a window create order to the client to establish an xfAppWindow entry in the railWindows hash table (e.g., launch notepad.exe as a RemoteApp).
  4. Trigger the race condition: Rapidly and repeatedly send RAIL ServerMinMaxInfo PDUs to the client (causing the RAIL channel thread to call xf_rail_get_window and enter xf_SetWindowMinMaxInfo) while simultaneously sending a window delete order (causing the main thread to call HashTable_Remove → xf_DestroyWindow → free(appWindow)).
  5. Achieve heap-use-after-free: When the timing aligns, the RAIL channel thread dereferences the freed appWindow->handle pointer inside XSetWMNormalHints, triggering a heap-use-after-free. This results in a crash (DoS) or, depending on heap layout, potential code execution on the client (GitHub Advisory).

Indicators of compromise

  • Process: Unexpected crash or abort of the xfreerdp process, particularly when using RemoteApp (/app: mode); crash dumps referencing xf_SetWindowMinMaxInfo, xf_rail_server_min_max_info, or XSetWMNormalHints in the stack trace.
  • Logs: AddressSanitizer output (if enabled) showing heap-use-after-free at xf_window.c:1128 or xf_rail.c:1178; FreeRDP debug logs showing rapid window create/delete cycles for the same window ID.
  • Network: High-frequency RAIL ServerMinMaxInfo PDUs interleaved with window delete orders from the RDP server, observable via packet capture on the RDP session (TCP port 3389).
  • File System: Core dump files generated by the xfreerdp process in the working directory or /var/crash/ following an unexpected termination.

Mitigation and workarounds

Upgrade FreeRDP to version 3.23.0 or later, which resolves the issue by holding the railWindows hash table lock for the entire duration of appWindow usage in all RAIL SVC handler functions (via the new xf_rail_return_window mechanism). If immediate patching is not possible, restrict network access to systems running FreeRDP clients so they can only connect to trusted RDP servers, and avoid using RemoteApp (/app:) mode against untrusted servers. Linux distribution packages (Fedora, Ubuntu, SUSE, AlmaLinux, Rocky Linux, Red Hat, Debian) have released updated packages incorporating the fix (GitHub Advisory, Patch Commit).

Community reactions

The vulnerability was reported by security researcher ehdgks0627 and published by FreeRDP maintainer akallabeth as a GitHub Security Advisory rated "Moderate" on February 25, 2026. Coverage appeared on Phoronix (noting the FreeRDP 3.23.0 release), Linux security news aggregators, and various CVE tracking feeds shortly after disclosure. Multiple Linux distributions (Fedora, Ubuntu, SUSE, AlmaLinux, Rocky Linux, Red Hat, Debian) issued security advisories and updated packages within weeks of the disclosure (GitHub Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Affected

bookworm

freerdp2

Affected

sid

freerdp3: 3.23.0+dfsg-1

Fixed

trixie

freerdp3: 3.15.0+dfsg-2.1+deb13u1

Fixed

Ubuntu

Fixed

bionic (esm-apps)

freerdp

Unknown

bionic (esm-infra)

freerdp2

Unknown

devel

freerdp3

Not Affected

focal (esm-infra)

freerdp2

Unknown

jammy

freerdp2

Unknown

noble

freerdp3: 3.5.1+dfsg1-0ubuntu1.4

Fixed

noble (esm-apps)

freerdp2

Unknown

questing

freerdp3: 3.16.0+dfsg-2ubuntu0.3

Fixed

RHEL / CentOS

Fixed

RHEL 8

:appstream:freerdp-2:2.11.7-9.el8_10.src

Fixed

RHEL 9

:appstream:freerdp-2:2.4.1-3.el9_0.7.src

Fixed

RHEL 10

freerdp-2:3.10.3-3.el10_0.7.src

Fixed

Alpine

Fixed

edge

freerdp: 3.23.0-r0

Fixed

v3.23

freerdp: 3.23.0-r0

Fixed

Source: This report was generated using AI

Related NixOS vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-112940HIGH7.1
  • Python logoPython
  • py3-filelock
NoYesOct 20, 2026
CVE-2026-112937MEDIUM6.1
  • Python logoPython
  • python-filelock
NoYesOct 20, 2026
CVE-2026-112936MEDIUM6.1
  • Python logoPython
  • python-filelock
NoYesOct 20, 2026
CVE-2026-112939MEDIUM4.7
  • Python logoPython
  • python-filelock
NoYesOct 20, 2026
CVE-2026-112941LOW3.3
  • Python logoPython
  • filelock
NoYesOct 20, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management