
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-64621 is a double-free vulnerability in FreeRDP's .rdp connection file parser that can lead to arbitrary code execution. It affects FreeRDP 3.x versions through 3.27.1, and was disclosed on July 20, 2026, with a patch available in version 3.28.0. The vulnerability was discovered by Anthropic (using AI agents) and validated by Ada Logics, and was assigned a CVSS v3.1 score of 7.3 (High) and a CVSS v4.0 score of 9.3 (Critical) (Github Advisory, FreeRDP Advisory).
The root cause is a double-free memory corruption bug (CWE-415) in freerdp_client_rdp_file_apply_to_settings() within client/common/file.c. When parsing the selectedmonitors field of a .rdp file, the function allocates a MonitorIds array through the settings object and obtains a raw non-owning pointer to it via freerdp_settings_get_pointer_writable(). On the strtoul overflow error path (triggered by an oversized token such as 99999999999999999999999), free(list) is called on this raw pointer at line 2536 without clearing settings->MonitorIds, leaving it dangling. During teardown, freerdp_settings_free() walks all pointer fields and calls freerdp_settings_set_pointer_len(..., FreeRDP_MonitorIds, NULL, 0), which frees the already-freed buffer a second time. The attacker controls the freed chunk's size via the number of comma-separated monitor tokens, making this a size-controlled double-free primitive with heap activity between the two frees — enabling potential overlapping-allocation exploitation on glibc heaps. The vulnerability is reachable in the default configuration of all FreeRDP CLI clients (xfreerdp, sdl-freerdp, wlfreerdp) with no special build flags required (FreeRDP Advisory).
Successful exploitation allows an attacker to achieve arbitrary code execution in the context of the FreeRDP CLI client process running on the victim's machine. The double-free creates a size-controlled heap corruption primitive that, due to substantial heap activity between the two frees, can be turned into an overlapping-allocation (aliasing) primitive on real glibc heaps — making full RCE plausible, though not yet demonstrated. Confidentiality, integrity, and availability of the victim's system are all at high risk, as the attacker could read sensitive data, modify system state, or crash the client process (FreeRDP Advisory, Github Advisory).
.rdp file: Create a .rdp file with a selectedmonitors field containing a mix of valid monitor IDs and at least one oversized token that causes strtoul to overflow (e.g., selectedmonitors:s:0,1,2,99999999999999999999999). The number of comma-separated tokens controls the size of the freed heap chunk..rdp file. .rdp files are commonly used for legitimate remote desktop connections, making this a plausible lure..rdp file or passes it as an argument to a FreeRDP CLI client (e.g., xfreerdp poc.rdp, sdl-freerdp poc.rdp, or wlfreerdp poc.rdp).freerdp_client_rdp_file_apply_to_settings(), allocates MonitorIds, then hits the strtoul overflow error path and calls free(list) at client/common/file.c:2536 without clearing settings->MonitorIds..rdp string fields, context teardown). An attacker can craft the token count to target a specific tcache bin size, enabling the freed chunk to be recycled and creating an overlapping-allocation primitive.freerdp_settings_free() frees the dangling MonitorIds pointer again. On a real glibc heap, this can be leveraged for arbitrary code execution in the FreeRDP client process (FreeRDP Advisory)..rdp files in user download directories, temp folders, or email attachment staging areas containing a selectedmonitors field with oversized numeric tokens (e.g., values exceeding 4294967295 / UINT32_MAX).xfreerdp, sdl-freerdp, or wlfreerdp processes shortly after opening a .rdp file; child processes spawned unexpectedly from the FreeRDP client process.freerdp_settings_set_pointer_len_ or freerdp_settings_free in the stack trace; AddressSanitizer output (if enabled) showing double-free at libfreerdp/common/settings.c:1382..rdp file (potential indicator of post-exploitation activity).The primary remediation is to upgrade FreeRDP to version 3.28.0 or later, which fixes the double-free by replacing free(list) with freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorIds, NULL, 0) on the error path, ensuring the owning field is cleared and the buffer is freed exactly once (FreeRDP Advisory, Red Hat Bugzilla). As a workaround where patching is not immediately possible, users should avoid opening .rdp files from untrusted or unknown sources, and administrators should consider restricting or monitoring the use of .rdp connection files in their environments. Organizations can also deploy file-type filtering on email gateways and web proxies to block delivery of .rdp files from external sources.
The vulnerability was discovered by Anthropic using AI agents to study the security of open-source projects, with Ada Logics validating and reporting the issue — a notable example of AI-assisted vulnerability research (FreeRDP Advisory). Red Hat has opened a tracking bug (Bugzilla #2502766) and classified the issue as high severity, indicating downstream Linux distribution patching is in progress (Red Hat Bugzilla). VulnCheck also published an advisory for this vulnerability (Github Advisory).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."