☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Freerdp logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H 🐛 CWE-120
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-91953

CVE-2026-91953 Buffer Overflow in FreeRDP
📅 PUBLISHED: 2026-09-15 00:00 UTC 🔄 UPDATED: 2026-10-09 10:28 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 distinct-origin sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.46%
👁️
0.46% probability
11.4× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Global License: Open Source
Affected: Freerdp — upgrade to patched release
CVSS VECTOR BREAKDOWN 6.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: U Scope Unchanged
C: N Confidentiality None
I: N Integrity None
A: H Availability High
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-91953 is a heap-based buffer overflow in FreeRDP versions prior to 3.31.0, occurring in the nego_send_negotiation_request() function during RDP connection negotiation. The flaw arises from a failure to validate the length of the LB_LOAD_BALANCE_INFO field before copying it into a fixed 512-byte heap buffer. A malicious RDP server, or a man-in-the-middle positioned between client and server, can send a crafted Server Redirection PDU with an oversized LB_LOAD_BALANCE_INFO value, overwriting adjacent heap memory with attacker-controlled content. The result is denial of service or heap corruption that is reachable before authentication completes, meaning no valid credentials are required — only user interaction to initiate the connection to a hostile endpoint.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

FreeRDP is an open-source implementation of the Remote Desktop Protocol (RDP), widely deployed as a client library in Linux distributions, thin clients, and embedded systems, and as a building block in commercial remoting products (e.g., via the libfreerdp library). The vulnerability resides in the connection-negotiation phase, specifically in nego_send_negotiation_request().

The Remote Desktop Protocol supports a Server Redirection mechanism (defined in MS-RDPBCGR), whereby a server can instruct a connecting client to redirect its session to a different server. The redirection PDU carries several fields, including LB_LOAD_BALANCE_INFO — an optional blob of load-balancer metadata. Per the NVD description, FreeRDP prior to 3.31.0 fails to validate the length of this field before writing its contents into a fixed 512-byte buffer allocated on the heap.

Because the destination buffer is of constant size, any LB_LOAD_BALANCE_INFO value whose length exceeds 512 bytes causes an out-of-bounds heap write. The copied bytes are fully attacker-controlled (they come directly from the network PDU), so the classic heap-overflow primitives apply: corruption of adjacent heap chunk metadata, overwriting of neighboring object fields, and — depending on allocator behavior and heap layout — potential for further memory corruption or controlled control-flow influence. The primary and immediately demonstrable impact is a crash (denial of service) or undefined behavior resulting in heap corruption.

Two properties elevate the severity of this finding:

  1. Pre-authentication reachability. The description explicitly states the overflow occurs "before authentication completes." The negotiation/redirection PDUs are exchanged during connection setup, so the attacker does not need valid credentials, an account, or even a legitimate RDP server certificate chain that the client validates — a MITM can inject or forge the redirection PDU in transit.
  2. Asymmetric trust model. The victim is the client, and the attacker is the server (or the network path). This inverts the common mental model where an RDP server is the defended asset. Here, every FreeRDP client that can be induced to connect to an attacker-controlled or MITM'd endpoint is a potential target.

The assigned CWE is CWE-120 (Classic Buffer Overflow — buffer copy without checking size of input), consistent with the "fails to validate the field length before writing to a fixed 512-byte buffer" description. The CVSS v3.1 vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H, yielding a base score of 6.5 (Medium). Note the subscores: high attack-vector (Network) and low attack-complexity (AC:L), with no privileges required (PR:N), but requiring user interaction (UI:R) to initiate the connection. There is no confidentiality or integrity impact scored (C:N/I:N), only high availability impact (A:H) — the CNA has scored this as a DoS-oriented overflow, not a demonstrated arbitrary-code-execution primitive. Analysts should nonetheless treat the heap-corruption component as a latent RCE risk pending deeper research, since heap overflows with attacker-controlled content frequently escalate beyond a simple crash.

No public proof-of-concept, exploit code, or Nuclei template is known at the time of writing. Patch confidence is 2/4: a single source (OSV) claims a fix in 3.31.0, but this has not been independently confirmed against the upstream changelog or commit history. No formal vendor advisory or CISA KEV entry exists. The EPSS score of 0.00422 (35.9th percentile) indicates a low but non-zero modeled probability of exploitation in the next 30 days — typical for a newly disclosed, pre-auth library bug with no public PoC.

Exploitation Scenarios

Because no public PoC exists, the attack chain below is described at the vulnerability-class level and is strictly bounded by the NVD description. No specific packet layouts, function names beyond those given, or byte offsets are asserted.

1. Reconnaissance / Target Identification. The attacker identifies a victim who uses a FreeRDP-based client (e.g., an enterprise thin client, a Linux workstation using Remmina or a libfreerdp-linked application, or an embedded appliance). The attacker must control, or be positioned to intercept, the RDP endpoint the victim connects to. This can be achieved by:

  • Operating a rogue RDP server (typosquatted hostname, compromised jump host, or a malicious service advertised on a VPN).
  • Man-in-the-middle positioning on the network path (ARP spoofing, DNS poisoning, hostile Wi-Fi, or compromised routing) to inject a forged Server Redirection PDU into an otherwise legitimate session. The Shodan dorks above aid an attacker in profiling exposed RDP infrastructure and FreeRDP-linked endpoints, though the victim-side client is the true target for this specific bug.

2. Triggering the Flaw Class (Heap Buffer Overflow). The victim's FreeRDP client initiates negotiation. During the negotiation phase, the malicious/MITM server sends a Server Redirection PDU containing an LB_LOAD_BALANCE_INFO field whose declared length and content exceed 512 bytes. In vulnerable versions (< 3.31.0), nego_send_negotiation_request() writes that field into the fixed 512-byte heap buffer without a bounds check, producing an out-of-bounds write with attacker-controlled bytes. No authentication completes, and no credentials are needed for this step — only the user's action of connecting (UI:R).

3. Payload / Execution Method. The "payload" is the oversized LB_LOAD_BALANCE_INFO content itself. At the vulnerability-class level, an attacker crafts the field so that the overflow reaches and corrupts an adjacent heap object. The simplest reliable outcome is overwriting heap metadata or a neighboring field, causing the allocator or subsequent code to fault — a denial-of-service crash. More advanced exploitation (achievable in principle with careful heap grooming, but not demonstrated here) could aim to overwrite a function pointer or vtable entry to redirect execution. The report does not assert any specific heap layout or gadget, as none is provided in the source data.

4. Post-Exploitation Impact. The guaranteed and scored impact is denial of service: the client process crashes or enters an undefined state, disrupting the user's session and potentially the host application. The secondary, unscored risk is heap corruption that could, with further research, be developed into code execution in the client's security context. Because exploitation is pre-auth and client-side, a successful chain would give an attacker a foothold on the client host — a valuable pivot point inside a trusted network segment — rather than the server.

Impact Assessment

  • CVSS base score: 6.5 (Medium), CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H.
  • Attack Vector (N): Exploitable over the network; the malicious PDU is delivered remotely.
  • Attack Complexity (L): No specialized conditions beyond delivering a crafted PDU; AC is low.
  • Privileges Required (N): No authentication or account needed — the bug triggers during negotiation, before login.
  • User Interaction (R): The victim must connect to (or be MITM'd toward) the hostile endpoint.
  • Scope (U): Impact is confined to the vulnerable client process.
  • Confidentiality (N) / Integrity (N): Not scored as impacted; the CNA classifies this as a DoS/availability issue. (Analysts should not assume the absence of these impacts is permanent.)
  • Availability (H): The dominant, demonstrated impact — crash and denial of service.
  • Blast radius: Every unpatched FreeRDP-based client is affected. Because the library underpins many remoting front-ends and embedded thin clients, the install base is broad, but exploitation requires per-victim interaction and attacker control of the endpoint. This constrains mass exploitation but makes targeted campaigns (spear-phishing, hostile VPN, network MITM) viable.
  • EPSS: 0.00422 — low modeled exploitation likelihood; no KEV listing; no known in-the-wild exploitation.

Detection Guidance

Sigma Rule

title: FreeRDP Client Heap Overflow via Server Redirection LB_LOAD_BALANCE_INFO (CVE-2026-91953)
id: 7b9c2f14-2e6a-4f0b-9c1d-9a1e5c3b7d42
status: experimental
description: Detects crashes or abnormal termination of FreeRDP-based client processes,
  consistent with exploitation of the nego_send_negotiation_request heap overflow
  triggered by an oversized LB_LOAD_BALANCE_INFO field in a Server Redirection PDU.
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2026-91953
author: valtersit.com
date: 2026/01/01
logsource:
  category: process_creation
  product: linux
detection:
  selection_img:
    Image|endswith:
      - '/xfreerdp'
      - '/wlfreerdp'
      - '/remmina'
      - '/freerdp-client'
  selection_crash:
    - CommandLine|contains: 'redirection'
    - CommandLine|contains: 'loadbalance'
  condition: selection_img
falsepositives:
  - Legitimate RDP load-balancer deployments
  - Client crashes unrelated to exploitation
level: low
tags:
  - attack.t1190
  - cve.2026.91953

YARA Rule

rule CVE_2026_91953_FreeRDP_LB_LOAD_BALANCE_INFO_Overflow
{
    meta:
        author = "valtersit.com"
        description = "Detects FreeRDP Server Redirection PDUs carrying oversized LB_LOAD_BALANCE_INFO content (CVE-2026-91953)"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-91953"
        date = "2026-01-01"
    strings:
        // Static structural anchor: vulnerable FreeRDP build before 3.31.0
        $frdp = "FreeRDP" ascii wide
        $build = /Version: 3\.[0-2][0-9]\.[0-9]/ ascii
        // Negotiation function symbol present in vulnerable binaries
        $sym = "nego_send_negotiation_request" ascii
    condition:
        uint16be(0) == 0x0301 and   // RDP TPKT header version byte 0x03
        $frdp and
        $sym and
        not $build
}

Suricata IDS Rule

alert tcp any 3389 -> any any (msg:"CVE-2026-91953 FreeRDP Server Redirection Oversized LB_LOAD_BALANCE_INFO Heap Overflow"; flow:established,from_server; content:"|03 00|"; depth:2; content:"|RDP|"; offset:4; depth:4; byte_test:2,>,512,0,relative; reference:cve,2026-91953; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-91953; classtype:attempted-admin; sid:202691953; rev:1;)

Elastic Detection

sequence by process.entity_id with maxspan=5s
  [process where process.name in ("xfreerdp","wlfreerdp","remmina") and
     process.args : "*redirection*"]
  [process where process.name in ("xfreerdp","wlfreerdp","remmina") and
     event.action == "process-crashed"]

Splunk SPL Query

index=endpoint OR index=linux_syslog
  (process_name IN ("xfreerdp","wlfreerdp","remmina","libfreerdp*"))
  (message="*segmentation fault*" OR message="*SIGSEGV*" OR message="*heap corruption*"
   OR message="*nego_send_negotiation_request*" OR message="*LB_LOAD_BALANCE_INFO*")
| stats count values(message) as messages by host, process_name
| where count > 0
| sort - count

Wazuh OSSEC Rule

<group name="freerdp,cve-2026-91953,">
  <rule id="202691" level="10">
    <decoded_as>syslog</decoded_as>
    <match>xfreerdp|wlfreerdp|remmina|nego_send_negotiation_request|LB_LOAD_BALANCE_INFO</match>
    <regex>SIGSEGV|heap corruption|segmentation fault</regex>
    <description>CVE-2026-91953: Possible FreeRDP client heap overflow via oversized LB_LOAD_BALANCE_INFO in Server Redirection PDU</description>
    <mitre>
      <id>T1190</id>
    </mitre>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence: 2/4 — CLAIMED. A single source (OSV) claims the issue is fixed in FreeRDP 3.31.0. This has not been independently confirmed against the upstream commit history or a vendor security advisory. Treat as provisional and verify before relying on it.

1. Immediate mitigations (apply before or if patching is delayed):

  • Restrict RDP client connections to trusted, authenticated endpoints only; avoid connecting FreeRDP-based clients to untrusted or user-supplied hosts.
  • Enforce network controls (VPN, TLS-terminating RDP gateway) to reduce man-in-the-middle exposure, since the flaw can be triggered by injected redirection traffic.
  • Monitor for anomalous client crashes (see Detection Guidance) as an early indicator of attempted exploitation.
  • Where RDP usage is not required, disable/remove FreeRDP-based clients from endpoints to shrink the attack surface.

2. Patch / upgrade steps:

  • Upgrade FreeRDP to 3.31.0 or later (per the single-source claim). Verify the fix by checking the upstream FreeRDP release notes/changelog for a corresponding entry before assuming coverage.
  • Rebuild or update any applications that statically or dynamically link libfreerdp, including third-party remoting front-ends and embedded appliances.
  • Track the NVD entry and OSV record for confirmation of the fix and for any revised affected-version ranges (the current affected-version data is empty/incomplete).

3. Long-term hardening:

  • Adopt a dependency-management process that tracks FreeRDP releases across all products bundling the library; embedded clients are frequently missed.
  • Implement bounds-checked, length-validated parsers for all PDU fields, and fuzz the negotiation/redirection code paths as part of SDLC.
  • Deploy memory-safety mitigations (ASLR, hardened allocators) and application sandboxing for client processes to reduce the impact of heap overflows.

References

Threat actor / exploit-in-the-wild evidence: None. CISA KEV status: NO. No public PoC, exploit code, or Nuclei template is known. EPSS 0.00422 (35.9th percentile). The absence of in-the-wild evidence reflects the current state at time of writing and should be re-validated as the CVE ages.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

product:

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-91953/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.