CVE-2026-22856: 
NixOS vulnerability analysis and mitigation

Overview

CVE-2026-22856 is a heap use-after-free vulnerability in FreeRDP's serial channel IRP thread tracking mechanism, classified as a race condition (CWE-362 / CWE-416). It affects all FreeRDP versions prior to 3.20.1 and was disclosed on January 14, 2026, by researcher ehdgks0627 via a GitHub Security Advisory. The vulnerability carries a CVSS v3.1 base score of 8.1 (High) and a CVSS v4.0 base score of 6.8 (Medium) (GitHub Advisory, Red Hat Bugzilla). Only FreeRDP-based clients are affected; FreeRDP-based servers are not impacted (FreeRDP Release).

Technical details

The root cause is improper synchronization (CWE-362) of concurrent access to the serial->IrpThreads list dictionary, which is created without internal locking (ListDictionary_New(FALSE)). When close_terminated_irp_thread_handles removes and frees a list node under TerminatingIrpThreadsLock, the create_irp_thread function can simultaneously call ListDictionary_GetItemValue without holding that lock, resulting in a heap use-after-free (CWE-416) on the freed node (GitHub Advisory). The vulnerable code path is in channels/serial/client/serial_main.c, specifically in the create_irp_thread and close_unterminated_irp_thread functions. A malicious RDP server can trigger this condition by manipulating serial port IRP (I/O Request Packet) operations to induce the race. The fix changes the list dictionary to synchronized mode (ListDictionary_New(TRUE)) so all operations acquire the internal lock (GitHub Advisory).

Impact

Successful exploitation can cause a client-side crash (denial of service) and, depending on heap layout and allocator behavior, may enable arbitrary code execution on the connecting client system. A malicious or compromised RDP server can trigger this condition against any FreeRDP-based client that has serial port redirection enabled, potentially achieving full compromise of confidentiality, integrity, and availability of the client system (GitHub Advisory). The attack is network-based and does not require authentication or elevated privileges on the attacker's side, though the high attack complexity (timing-dependent race condition) limits reliable exploitation (Red Hat Bugzilla).

Exploitability

A proof-of-concept (PoC) exploit demonstrating the vulnerability via AddressSanitizer output is publicly available in the GitHub Security Advisory (GitHub Advisory). There is no evidence of in-the-wild exploitation at this time, and no threat actor attribution has been reported. The EPSS score is approximately 0.038% (very low probability of exploitation in the near term). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The CVSS v4.0 exploit maturity is rated as "Proof of Concept" (Feedly).

Exploitation steps

  1. Setup a malicious RDP server: Configure a rogue RDP server (e.g., using a modified FreeRDP server or custom RDP implementation) that supports the rdpdr virtual channel with serial port device redirection.
  2. Lure a victim client: Trick a FreeRDP-based client (version ≤ 3.20.0) into connecting to the malicious server, ensuring the client has serial port redirection enabled (e.g., via /drive or serial device options).
  3. Trigger concurrent IRP operations: Once the client connects and the serial channel is established, send rapid sequences of IRP close and create requests over the rdpdr channel to induce concurrent execution of close_terminated_irp_thread_handles and create_irp_thread on the client side.
  4. Race condition exploitation: The race causes create_irp_thread to call ListDictionary_GetItemValue on a node that close_unterminated_irp_thread has already freed, resulting in a heap use-after-free read at the freed memory address.
  5. Achieve crash or code execution: Depending on heap layout, the freed memory may be reallocated with attacker-controlled data, potentially redirecting execution flow. At minimum, the client process crashes (DoS); with favorable heap conditions, arbitrary code execution on the client may be achievable (GitHub Advisory).

Indicators of compromise

  • Process: FreeRDP client process (xfreerdp, wlfreerdp, etc.) crashing unexpectedly during or after RDP sessions involving serial port redirection; crash dumps referencing ListDictionary_GetItemValue, create_irp_thread, or serial_main.c.
  • Logs: AddressSanitizer or memory error output in application logs showing heap-use-after-free at addresses within ListDictionary.c:510 or serial_main.c:641; segmentation fault signals from the FreeRDP client process.
  • Network: Connections from FreeRDP clients to unexpected or untrusted RDP servers, particularly those sending unusual volumes of serial IRP close/create sequences over the rdpdr virtual channel.
  • File System: Core dump files generated by the FreeRDP client process in the working directory or system crash directory (e.g., /var/crash/, /tmp/core.*) following RDP sessions.

Mitigation and workarounds

The primary remediation is to upgrade FreeRDP to version 3.20.1 or later, which fixes the vulnerability by initializing serial->IrpThreads as a synchronized list dictionary (FreeRDP Release). As a workaround, disable serial port redirection in RDP client configurations if it is not operationally required. Additionally, restrict network access to FreeRDP services so clients only connect to trusted, known-good RDP servers. Red Hat has issued multiple errata addressing this CVE across RHEL 7 through 10, including RHSA-2026:6340 (RHEL 9), RHSA-2026:6918 (RHEL 8), RHSA-2026:6799 (RHEL 10), and others (Red Hat Bugzilla). Downstream distributions including openSUSE, Ubuntu, Fedora, AlmaLinux, Rocky Linux, Amazon Linux 2, Mageia, and Debian have also released updated packages.

Community reactions

The vulnerability was discovered and reported by researcher ehdgks0627, who performed code review and testing that uncovered this and eight other medium-severity CVEs addressed in the FreeRDP 3.20.1 release (FreeRDP Release). The FreeRDP maintainer (akallabeth) acknowledged the findings and credited the reporter in the release notes. The vulnerability received routine coverage from Linux security news aggregators and was picked up by Tenable (Nessus), Qualys, and other scanner vendors shortly after disclosure. No significant social media controversy or broader industry debate has been observed around this specific CVE.

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Affected

bookworm

freerdp2

Affected

sid

freerdp3: 3.20.2+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: 3.20.2+dfsg-1

Fixed

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-6.el8_10.src

Fixed

RHEL 9

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

Fixed

RHEL 10

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

Fixed

Alpine

Fixed

v3.23

freerdp: 3.22.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