Security Vulnerability Report
中文
CVE-2026-33983 CVSS 6.5 MEDIUM

CVE-2026-33983

Published: 2026-03-30 22:16:19
Last Modified: 2026-04-01 20:03:25

Description

FreeRDP is a free implementation of the Remote Desktop Protocol. Prior to version 3.24.2, progressive_decompress_tile_upgrade() detects a mismatch via progressive_rfx_quant_cmp_equal() but only emits WLog_WARN, execution continues. The wrapped value (247) is used as a shift exponent, causing undefined behavior and an approximately 80 billion iteration loop (CPU DoS). This issue has been patched in version 3.24.2.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:* - VULNERABLE
FreeRDP < 3.24.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#include <stdio.h> #include <stdint.h> // PoC Code snippet simulating the logic of CVE-2026-33983 // This simulates the behavior in progressive_decompress_tile_upgrade // Mock function to simulate the mismatch detection int progressive_rfx_quant_cmp_equal_mock() { // Returns 0 to simulate a detected mismatch return 0; } void vulnerable_function_simulation() { printf("[VULNERABLE FUNCTION START]\n"); // Step 1: Check for mismatch (simulating progressive_rfx_quant_cmp_equal) if (!progressive_rfx_quant_cmp_equal_mock()) { // Vulnerability: Code only logs a warning but continues execution printf("WLog_WARN: Quantization mismatch detected, but continuing...\n"); } // Step 2: Execution continues with the wrapped value // In the real vulnerability, a value of 247 is used as a shift exponent uint32_t wrapped_value = 247; uint32_t base = 1; printf("Attempting shift operation with exponent: %u\n", wrapped_value); // Step 3: Undefined Behavior / Massive Loop trigger // Note: '1 << 247' is undefined behavior in C for 32-bit integers. // In the actual FreeRDP code, this leads to a loop condition causing ~80 billion iterations. // We simulate the impact description here. // To avoid hanging the system during this demonstration, we comment out the actual UB line. // uint32_t result = base << wrapped_value; printf("[IMPACT] This would trigger a loop of ~80 billion iterations (CPU DoS).\n"); printf("[VULNERABLE FUNCTION END]\n"); } int main() { vulnerable_function_simulation(); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33983", "sourceIdentifier": "[email protected]", "published": "2026-03-30T22:16:19.407", "lastModified": "2026-04-01T20:03:24.513", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "FreeRDP is a free implementation of the Remote Desktop Protocol. Prior to version 3.24.2, progressive_decompress_tile_upgrade() detects a mismatch via progressive_rfx_quant_cmp_equal() but only emits WLog_WARN, execution continues. The wrapped value (247) is used as a shift exponent, causing undefined behavior and an approximately 80 billion iteration loop (CPU DoS). This issue has been patched in version 3.24.2."}, {"lang": "es", "value": "FreeRDP es una implementación gratuita del Protocolo de Escritorio Remoto. Antes de la versión 3.24.2, progressive_decompress_tile_upgrade() detecta una discrepancia a través de progressive_rfx_quant_cmp_equal() pero solo emite WLog_WARN, la ejecución continúa. El valor envuelto (247) se utiliza como exponente de desplazamiento, causando un comportamiento indefinido y un bucle de aproximadamente 80 mil millones de iteraciones (DoS de CPU). Este problema ha sido parcheado en la versión 3.24.2."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-190"}, {"lang": "en", "value": "CWE-252"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:freerdp:freerdp:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.24.2", "matchCriteriaId": "03FF152C-C651-4586-8958-1555D9797516"}]}]}], "references": [{"url": "https://github.com/FreeRDP/FreeRDP/commit/78188ab479c8e6eb9ba2475b3732c76b4bbe5425", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-4gfm-4p52-h478", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}