Skip to main content
Vulnerability Database/CVE-2026-109250

CVE-2026-109250: FreeRDP Heap Buffer Overflow Vulnerability

CVE-2026-109250 is a heap buffer overflow flaw in FreeRDP that lets local attackers corrupt memory during smartcard logon. This article covers technical details, affected versions, impact, and mitigation.

Published:

CVE-2026-109250 Overview

CVE-2026-109250 is a heap buffer overflow in FreeRDP affecting versions 3.0.0 through 3.31.x. The flaw resides in the collect_keys() function used during PKCS#11 key enumeration for smartcard logon. A fixed 64-entry keys array can be exceeded when a malicious smartcard token presents more than 64 public key objects across multiple slots. The out-of-bounds writes carry attacker-controlled CKA_ID and CKA_LABEL data, corrupting heap memory on the system performing authentication. The weakness is tracked as CWE-129: Improper Validation of Array Index.

Critical Impact

An attacker with physical access who can present a malicious smartcard token during RDP smartcard logon can corrupt heap memory with controlled contents, potentially leading to code execution in the FreeRDP client process.

Affected Products

  • FreeRDP 3.0.0 through 3.31.x
  • Applications linking the FreeRDP 3 smartcard logon code path
  • Downstream distributions packaging FreeRDP 3 prior to 3.32.0

Discovery Timeline

  • 2026-10-12 - CVE-2026-109250 published to NVD
  • 2026-10-15 - Last updated in NVD database

Technical Details for CVE-2026-109250

Vulnerability Analysis

FreeRDP supports smartcard-based authentication for Remote Desktop Protocol (RDP) sessions through PKCS#11 tokens. During logon, the collect_keys() routine enumerates public key objects across the token's slots to locate candidate certificates. The function allocates a fixed-size array sized for 64 key entries and iterates slot contents without enforcing that bound. When the iteration crosses the 64-entry limit, subsequent writes land outside the allocation on the heap. The data written includes the CKA_ID and CKA_LABEL attributes read directly from the token, both of which an attacker controls when supplying a hostile device.

Successful corruption can overwrite adjacent heap metadata or neighboring objects. Depending on the heap layout at the time of the overflow, this condition supports denial of service and may be shaped into arbitrary code execution within the authenticating client. The vulnerability requires user action to initiate the smartcard logon, and the attack vector is physical because the token must be presented to the host.

Root Cause

The root cause is a missing upper-bound check on the loop that populates the 64-entry keys array in collect_keys(). PKCS#11 tokens are untrusted peripherals, yet the function trusts the slot and object counts returned by the device. Because CKA_ID and CKA_LABEL values are copied into the overflowed region, attackers control both the overflow trigger and the payload contents.

Attack Vector

Exploitation requires the attacker to supply a crafted PKCS#11 token, such as a programmable smartcard or USB device emulating one, to a system where a user initiates FreeRDP smartcard logon. The token advertises more than 64 public key objects distributed across one or more slots. Once enumeration crosses the array bound, each additional object produces an out-of-bounds write populated with the attacker's chosen attribute data. Full technical detail is available in the FreeRDP GitHub Security Advisory GHSA-jhv5-m83m-hxhq and the VulnCheck advisory.

Detection Methods for CVE-2026-109250

Indicators of Compromise

  • FreeRDP client process crashes or heap corruption aborts during smartcard logon attempts
  • Connection of unknown or unauthorized PKCS#11 tokens to endpoints that perform RDP smartcard authentication
  • PKCS#11 enumeration logs showing tokens exposing an unusually high object count across multiple slots

Detection Strategies

  • Inventory FreeRDP installations and flag any binary with a reported version below 3.32.0
  • Monitor USB and smartcard reader events for insertion of removable devices on systems used for RDP logon
  • Correlate FreeRDP crash telemetry with recent smartcard reader activity to identify suspected exploitation attempts

Monitoring Recommendations

  • Enable application crash reporting for freerdp, wfreerdp, xfreerdp3, and embedded FreeRDP consumers
  • Audit PKCS#11 provider libraries loaded by FreeRDP processes to detect tampering or substitution
  • Alert on smartcard logon failures that coincide with heap or signal-based process termination

How to Mitigate CVE-2026-109250

Immediate Actions Required

  • Upgrade FreeRDP to version 3.32.0 or later across all endpoints and dependent applications
  • Rebuild and redeploy any software statically linking FreeRDP libraries after updating
  • Restrict physical access to systems that perform RDP smartcard authentication

Patch Information

The FreeRDP maintainers released the fix in version 3.32.0. Details are documented in the FreeRDP GitHub Security Advisory GHSA-jhv5-m83m-hxhq. Distribution maintainers should backport the collect_keys() bounds check to supported FreeRDP 3 branches.

Workarounds

  • Disable PKCS#11 smartcard logon in FreeRDP configurations where it is not required
  • Enforce USB device control policies that block unapproved smartcard readers and tokens
  • Require users to authenticate only with vetted, inventoried smartcards issued by the organization

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.