CVE-2026-23948 Overview
CVE-2026-23948 is a NULL pointer dereference vulnerability affecting FreeRDP, a free implementation of the Remote Desktop Protocol. Prior to version 3.22.0, a vulnerability in the rdp_write_logon_info_v2() function allows a malicious RDP server to crash the FreeRDP proxy by sending a specially crafted LogonInfoV2 PDU with cbDomain=0 or cbUserName=0. This vulnerability enables denial of service attacks against FreeRDP proxy deployments.
Critical Impact
Malicious RDP servers can exploit this vulnerability to remotely crash FreeRDP proxy instances, disrupting remote desktop connectivity for all users relying on the affected proxy.
Affected Products
- FreeRDP versions prior to 3.22.0
- FreeRDP proxy deployments accepting connections from untrusted RDP servers
- Systems using libfreerdp for RDP protocol handling
Discovery Timeline
- 2026-02-09 - CVE-2026-23948 published to NVD
- 2026-02-10 - Last updated in NVD database
Technical Details for CVE-2026-23948
Vulnerability Analysis
This vulnerability is classified as CWE-476 (NULL Pointer Dereference). The flaw exists in the rdp_write_logon_info_v2() function within libfreerdp/core/info.c. When processing LogonInfoV2 Protocol Data Units (PDUs) from an RDP server, the function fails to properly validate the cbDomain and cbUserName fields before dereferencing associated pointers.
When a malicious RDP server sends a crafted LogonInfoV2 PDU containing zero-length values for the domain or username fields, the function attempts to access memory through a NULL pointer, resulting in an immediate crash of the FreeRDP proxy process. This vulnerability is exploitable over the network without authentication, as the malicious payload can be delivered during the RDP connection establishment phase.
Root Cause
The root cause is a missing NULL check in the rdp_write_logon_info_v2() function. The function processes domain and username information from incoming RDP server responses without validating that these fields contain valid, non-zero-length data. When cbDomain=0 or cbUserName=0 is specified in the LogonInfoV2 PDU, the corresponding string pointers may be NULL, and subsequent operations on these pointers cause the NULL pointer dereference.
Attack Vector
The attack can be executed by any entity operating a malicious RDP server that a FreeRDP client or proxy connects to. The attack vector is network-based and requires no user interaction or prior authentication. An attacker can set up a rogue RDP server and craft LogonInfoV2 PDU responses with cbDomain=0 or cbUserName=0 fields. When a FreeRDP proxy connects to this malicious server, the crafted response triggers the NULL pointer dereference, crashing the proxy service.
The security patch addresses this by adding proper NULL validation before accessing the domain and username pointers:
return TRUE;
}
-static BOOL rdp_write_logon_info_v2(wStream* s, logon_info* info)
+static BOOL rdp_write_logon_info_v2(wStream* s, const logon_info* info)
{
size_t domainLen = 0;
size_t usernameLen = 0;
Source: GitHub Commit Notice
Detection Methods for CVE-2026-23948
Indicators of Compromise
- Unexpected FreeRDP proxy process crashes or restarts
- Crash dumps showing NULL pointer dereference in rdp_write_logon_info_v2() function
- Unusual RDP connection attempts from unknown or untrusted servers
- LogonInfoV2 PDUs in network traffic with zero-length domain or username fields
Detection Strategies
- Monitor FreeRDP proxy processes for unexpected terminations and automatic restarts
- Implement network-based detection rules to identify malformed LogonInfoV2 PDUs with cbDomain=0 or cbUserName=0
- Deploy endpoint detection to capture crash events in FreeRDP-related processes
- Review RDP server connection logs for connections to unknown or suspicious endpoints
Monitoring Recommendations
- Enable crash reporting and core dump analysis for FreeRDP proxy deployments
- Implement alerting on FreeRDP proxy service interruptions
- Monitor network traffic for anomalous RDP protocol behavior
- Track connections to new or untrusted RDP server endpoints
How to Mitigate CVE-2026-23948
Immediate Actions Required
- Upgrade FreeRDP to version 3.22.0 or later immediately
- Review and restrict the list of allowed RDP servers that FreeRDP proxies can connect to
- Implement network segmentation to limit exposure of FreeRDP proxy services
- Enable service monitoring to detect and alert on proxy crashes
Patch Information
The vulnerability is fixed in FreeRDP version 3.22.0. The fix adds proper NULL pointer validation in the rdp_write_logon_info_v2() function before processing domain and username fields. Organizations should upgrade to version 3.22.0 or later. The patch commit is available at the GitHub Commit Notice, and additional details can be found in the GitHub Security Advisory.
Workarounds
- Restrict FreeRDP proxy connections to trusted, known RDP servers only using allowlists
- Deploy network-level filtering to block RDP connections to untrusted external servers
- Implement automatic service restart mechanisms to minimize downtime from crash-based DoS attacks
- Consider deploying redundant FreeRDP proxy instances for high-availability environments
# Configuration example
# Restrict FreeRDP proxy to connect only to trusted servers
# Add to FreeRDP proxy configuration or use firewall rules
# Example iptables rule to restrict outbound RDP connections
iptables -A OUTPUT -p tcp --dport 3389 -d trusted_rdp_server_ip -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3389 -j DROP
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

