Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAttacker hosts malicious RDP server
-
DeliveryVictim connects to rogue server
-
ExploitServer negotiates WAVE_FORMAT_OPUS audio format
-
InstallServer sends oversized crafted Opus frame
-
C2libopus decodes past 4096-byte heap buffer
-
ExecuteHeap metadata corrupted
-
ImpactPotential code execution on client
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Heap buffer bounds checking
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two compile-time build flags must both be set in the FreeRDP binary: WITH_OPUS must be ON (enabling libopus integration) and WITH_DSP_FFMPEG must be OFF (disabling the FFmpeg audio decode path). These are build-time conditions baked into the binary at package creation - a runtime configuration check cannot substitute for verifying the build flags used. At runtime, the RDP server must successfully negotiate WAVE_FORMAT_OPUS for the rdpsnd audio channel; since the attacker controls the server, format negotiation is fully under attacker control. The attacker requires no authentication or credentials - they operate as the server. Passive user interaction is required: the victim must initiate an RDP connection to the attacker's server, either directly or through social engineering. Exploitation is impossible against clients built with WITH_OPUS=OFF (no Opus code path exists) or WITH_DSP_FFMPEG=ON (a separate decode path is used); these build combinations are the primary limiting factor reducing the realistic exploitable population. |
| Impact | The CVSS 4.0 score of 7.7 (High) with vector AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N is broadly consistent with the description: the attack is network-reachable with low complexity once the build-time prerequisites are met, and the CIA impact on the vulnerable client system is fully High. AT:P correctly models that specific compile-time build flags (WITH_OPUS=ON, WITH_DSP_FFMPEG=OFF) must be present in the target binary - a condition outside the attacker's control - which meaningfully narrows the exploitable population relative to a raw AV:N/AC:L score would suggest. The vulnerability is not listed in the CISA KEV catalog and no POC is identified, reducing immediate threat urgency. EPSS data was not provided; given the build prerequisite and the requirement for passive user interaction (victim must connect to attacker's server), opportunistic mass exploitation is unlikely. However, a targeted attacker with knowledge of a client build's Opus support - plausible in enterprise or developer environments - could achieve heap corruption with realistic social engineering. The RCE tag should be treated as a credible ceiling: heap overflows in audio decoders have a well-documented history of weaponization, and this primitive (controlled write beyond a known-sized buffer) is favorable for exploitation. |
| Exploit ScenarioDerived | An attacker hosts a rogue RDP server and lures a target into connecting - via a phishing email containing a malicious .rdp shortcut, a compromised internal redirect, or a social-engineering pretext. Upon connection, the server advertises and enforces WAVE_FORMAT_OPUS for the rdpsnd audio channel, then transmits a crafted Opus audio packet that decodes to a PCM payload substantially larger than 4096 bytes, overwriting heap memory adjacent to the StreamPool_Take buffer on the client and potentially redirecting execution to attacker-controlled shellcode. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Heap buffer overflow in FreeRDP's Opus audio codec path allows a malicious RDP server to corrupt client heap memory and potentially execute arbitrary code on any connecting client built with WITH_OPUS enabled and WITH_DSP_FFMPEG disabled. The flaw in freerdp_dsp_decode_opus (versions prior to 3.28.0) stems from a capacity check applied to the wrong buffer, leaving the actual PCM output buffer unguarded against oversized libopus decoded frames that can overrun the fixed 4096-byte StreamPool_Take destination in the rdpsnd channel. No public exploit has been identified at time of analysis, but the confirmed heap write primitive and RCE classification make this a credible code execution risk for susceptible client builds connecting to untrusted servers.
RemediationAI
Upgrade FreeRDP to version 3.28.0 or later; this release contains the fix confirmed by commit 0ed1f95d36913581cf31124f94eb5843d4263eae (https://github.com/FreeRDP/FreeRDP/commit/0ed1f95d36913581cf31124f94eb5843d4263eae) and PR #12993 (https://github.com/FreeRDP/FreeRDP/pull/12993), tagged at https://github.com/FreeRDP/FreeRDP/releases/tag/3.28.0. For organizations unable to upgrade immediately, recompiling FreeRDP with WITH_OPUS=OFF eliminates the vulnerable code path entirely at the cost of losing Opus audio codec support in RDP audio redirection - this is the cleanest workaround and has no security side effects. Alternatively, recompiling with WITH_DSP_FFMPEG=ON routes Opus audio decoding through FFmpeg's separate path, bypassing the vulnerable function; this requires FFmpeg development libraries as a build dependency and adds FFmpeg's own attack surface. Neither compile-time workaround should be considered a permanent substitute for patching to 3.28.0. Distribution maintainers should issue updated packages and document the build flags used.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in libfreerdp/codec/dsp.c (CWE-122: Heap-based Buffer Overflow). In the freerdp_dsp_decode_opus function, Stream_EnsureRemainingCapacity was called on context->common.buffer - an internal codec buffer - rather than on the caller-supplied out stream that libopus actually writes decoded PCM audio into. The rdpsnd channel (channels/rdpsnd/client/rdpsnd_main.c) allocates a fixed 4096-byte destination via StreamPool_Take; since the capacity guard targets the wrong object, that destination is never resized before libopus writes into it. A malicious RDP server that negotiates WAVE_FORMAT_OPUS and sends a large Opus audio frame causes libopus to decode PCM output beyond the end of the 4096-byte heap region, corrupting adjacent heap metadata. The commit diff at 0ed1f95d36913581cf31124f94eb5843d4263eae confirms the root cause as a single-line wrong-buffer reference. This code path is only reachable when FreeRDP is compiled with WITH_OPUS=ON and WITH_DSP_FFMPEG=OFF; the FFMPEG code path routes audio through a separate decode function not affected by this bug.
Know when Freerdp gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
AC:H reflects compile-time build prerequisites outside attacker control (WITH_OPUS=ON, WITH_DSP_FFMPEG=OFF); UI:R because victim must actively initiate the RDP connection to the attacker's server.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
FreeRDP is a free implementation of the Remote Desktop Protocol. Prior to 3.28.0, freerdp_dsp_decode_opus in libfreerdp/codec/dsp.c calls Stream_EnsureRemainingCapacity on context->common.buffer even though opus_decode writes decoded PCM into the caller-supplied out stream. A malicious RDP server that negotiates WAVE_FORMAT_OPUS with a client built with WITH_OPUS enabled and WITH_DSP_FFMPEG disabled can make libopus write a large decoded frame beyond the 4096-byte StreamPool_Take destination used by channels/rdpsnd/client/rdpsnd_main.c. This can corrupt the client heap, crash the client, and may permit code execution. This issue is fixed in version 3.28.0.
Executive ViewAI
FreeRDP clients are vulnerable to remote code execution through a heap buffer overflow in the Opus audio codec decoder affecting versions prior to 3.28.0. No public exploit has been identified at time of analysis; however, the confirmed code execution path creates material risk for organizations whose endpoints connect to RDP infrastructure, potentially enabling credential theft, data exfiltration, or lateral movement within enterprise networks.
Disable Opus audio codec in FreeRDP client configurations; recompile with WITH_DSP_FFMPEG enabled if rebuilding from source; restrict RDP connections to managed servers only via firewall and network segmentation; implement detailed RDP connection logging to detect anomalous client-to-server connection patterns; segment client systems to prevent lateral movement if compromise occurs.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
A heap overflow occurs when a program writes data beyond the bounds of a buffer allocated in the heap memory region.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Use-after-free in FreeRDP xf_clipboard_format_equal before 3.23.0. Clipboard format comparison uses freed memory. Fifth
Use-after-free in FreeRDP xf_AppUpdateWindowFromSurface before 3.23.0. Surface-to-window update triggers memory corrupti
Use-after-free in FreeRDP xf_SetWindowMinMaxInfo before version 3.23.0. X11 client window management triggers memory cor
Use-after-free in FreeRDP xf_cliprdr_provide_data clipboard handling before 3.23.0. Clipboard data exchange triggers mem
FreeRDP IRP thread handler has a use-after-free where the IRP is freed by Complete() then accessed on the error path. Fi
FreeRDP drive read heap overflow when server-controlled read length exceeds IRP output buffer. Fixed in 3.20.1. PoC avai
FreeRDP client before 3.20.1 has a heap buffer overflow in AUDIN format processing. A malicious RDP server can corrupt m
Use-after-free in FreeRDP xf_AppUpdateWindowFromSurface before 3.23.0. Different code path from CVE-2026-25953. PoC and
FreeRDP is a free implementation of the Remote Desktop Protocol. Rated critical severity (CVSS 9.8), this vulnerability
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Rated critical
Same weakness CWE-122 – Heap-based Buffer Overflow
View allVendor StatusVendor
SUSE
| Product | Status |
|---|---|
| openSUSE Tumbleweed | Fixed |
EUVD-2026-62672
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB