Vulnerability DatabaseCVE-2026-121394

CVE-2026-121394: 
NixOS vulnerability analysis and mitigation

Overview

CVE-2026-121394 is a Denial of Service vulnerability in FreeRDP caused by a reachable assertion failure in the RemoteFX RLGR decoder. Affecting FreeRDP versions 3.11.0 through 3.32.1, it allows a malicious RDP server to crash a connecting client by sending a RemoteFX tileset containing RLGR code 32767, which triggers a signed narrowing assertion in rfx_rlgr_decode (libfreerdp/codec/rfx_rlgr.c, line 357). The vulnerability was published on November 3, 2026, with a patch available in version 3.32.2. It carries a CVSS v3.1 score of 6.5 (Medium) and a CVSS v4.0 score of 7.1 (High) (GitHub Advisory, Github Advisory).

Technical details

The root cause is classified as CWE-617 (Reachable Assertion): FreeRDP's rfx_rlgr_decode function performs a checked conversion of an RLGR code value to int16_t, but fails to validate that the value code + 1 (where code = 32767) is representable in a signed 16-bit integer before the assertion fires. The vulnerability is build-dependent — FreeRDP's WITH_VERBOSE_WINPR_ASSERT option defaults to ON in the inspected CMake configuration, meaning assertion-enabled builds will abort (exit 134) while assertion-disabled builds are unaffected. Exploitation requires the victim to connect to an attacker-controlled RDP server with RemoteFX surface decoding enabled; the attacker injects a crafted fast-path SURFCMDS surface-bits update containing a complete RemoteFX tileset with a malicious RLGR bitstream. A proof-of-concept relay script (rfx049-relay.py) was included in the advisory, demonstrating the attack in a loopback test environment (GitHub Advisory).

Impact

Successful exploitation results in a Denial of Service limited to the affected FreeRDP client process — the client aborts with signal 6 (SIGABRT). The advisory confirmed no memory corruption, confidentiality impact, integrity impact, or effects on other processes or the connecting server. The impact is scoped to the availability of the individual client session, with no evidence of lateral movement potential or data exposure (GitHub Advisory, Github Advisory).

Exploitability

A proof-of-concept relay script was publicly disclosed as part of the security advisory, demonstrating the crash in a controlled loopback environment. As of the publication date, there is no evidence of in-the-wild exploitation, no known threat actor attribution, and no listing in the CISA Known Exploited Vulnerabilities (KEV) catalog. The EPSS score is 0.0, reflecting a very low probability of exploitation in the near term (Github Advisory, GitHub Advisory).

Exploitation steps

  1. Reconnaissance: Identify targets running FreeRDP versions 3.11.0–3.32.1 built with WITH_VERBOSE_WINPR_ASSERT=ON (the default CMake configuration). Targets must have RemoteFX surface decoding enabled.
  2. Set up malicious RDP server: Deploy a rogue RDP server (e.g., using the FreeRDP shadow server or a custom implementation) that the victim can be induced to connect to.
  3. Deploy relay/injection script: Run the rfx049-relay.py proof-of-concept relay between the victim client and the server. The relay forwards normal RDP traffic and injects a crafted fast-path SURFCMDS surface-bits update after the connection is established.
  4. Inject malicious RemoteFX tileset: The relay injects a complete RemoteFX tileset whose RLGR bitstream emits code 32767. This reaches rfx_rlgr_decode in the client.
  5. Trigger assertion failure: The client's rfx_rlgr_decode function attempts to convert code + 1 (32768) to int16_t, which overflows the signed type, triggering the WITH_VERBOSE_WINPR_ASSERT assertion and aborting the client process (exit 134) (GitHub Advisory).

Indicators of compromise

  • Process: FreeRDP client process (xfreerdp) terminating unexpectedly with exit code 134 (SIGABRT) or log entries showing Caught signal 'Aborted' [6].
  • Logs: FreeRDP client logs referencing rfx_rlgr_decode:357 at the time of crash; assertion failure messages from libfreerdp/codec/rfx_rlgr.c.
  • Network: Unexpected or unsolicited fast-path SURFCMDS surface-bits update packets received from an RDP server shortly after connection establishment, particularly from unfamiliar or external RDP server addresses.
  • Network: RDP connections to servers not in the organization's approved server list, especially those using /sec:rdp with RemoteFX (+rfx) enabled (GitHub Advisory).

Mitigation and workarounds

Upgrade FreeRDP to version 3.32.2 or later, which is the official patched release. As a workaround, avoid connecting to untrusted or unknown RDP servers, and restrict RDP client connections to verified, trusted internal servers only. Organizations can also consider building FreeRDP with WITH_VERBOSE_WINPR_ASSERT=OFF to prevent the assertion-triggered abort, though this does not fix the underlying input validation flaw. FreeRDP 2.x is unsupported and should be migrated to the 3.x branch (GitHub Advisory, 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.32.2+dfsg-1

Fixed

trixie

freerdp3

Affected

Ubuntu

Unknown

bionic (esm-apps)

freerdp

Unknown

bionic (esm-infra)

freerdp2

Unknown

devel

freerdp3

Unknown

focal (esm-infra)

freerdp2

Unknown

jammy

freerdp2

Unknown

noble

freerdp2

Unknown

noble (esm-apps)

freerdp2

Unknown

resolute

freerdp3

Unknown

RHEL / CentOS

Fixed

RHEL 8

freerdp.src

Affected

RHEL 9

freerdp.src

Affected

RHEL 10

freerdp-2:3.32.2-1.el10_2.src

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-121964HIGH8.7
  • NixOS logoNixOS
  • freerdp2
NoYesNov 04, 2026
CVE-2026-121960HIGH8.7
  • NixOS logoNixOS
  • freerdp2
NoYesNov 04, 2026
CVE-2026-121963HIGH8.2
  • NixOS logoNixOS
  • freerdp.src
NoYesNov 04, 2026
CVE-2026-121961HIGH8.2
  • NixOS logoNixOS
  • freerdp-devel
NoYesNov 04, 2026
CVE-2026-121962HIGH7.2
  • NixOS logoNixOS
  • freerdp-devel
NoYesNov 04, 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