{"id":"CVE-2026-121406","kind":"vulnerability","aliases":["CVE-2026-121406"],"related":[],"title":"FreeRDP: malicious RDP server can crash client with zero-output payload","description":"FreeRDP before 3.32.2 allows a client assertion abort because rdpgfx_on_data_received rejects only negative zgfx_decompress status and passes the resulting null output pointer to Stream_StaticConstInit. A malicious RDP server can send a zero-output ZGFX payload on the RDPGFX channel after session activation to terminate the client.","summary":"FreeRDP's RDPGFX channel handler does not check for a null output from ZGFX decompression, so a zero-output payload triggers an assertion abort. A malicious RDP server can use this to terminate the connected FreeRDP client.","severity":"medium","cvss":5.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["freerdp","rdp","remote-desktop","runtime"],"not_affected_if":["fixed-version","trusted-servers-only"],"how_to_check":"- Check the installed FreeRDP version with `xfreerdp --version` or the package manager, and compare against the fixed version in the Fix section.\n- Look for FreeRDP-based clients that connect to servers you do not control.","fix":"- FreeRDP: move to `3.32.2` or later.","status":"open","published_at":"2026-11-03T15:17:29+00:00","first_seen_at":"2026-11-03T15:21:58+00:00","triaged_at":"2026-11-03T15:24:29+00:00","updated_at":"2026-11-03T15:24:29+00:00","category":"runtime","confidence":0.7,"triage":{"at":"2026-11-03T15:24:29Z","model":"claude-haiku-5-5","output":{"fix":"- FreeRDP: move to `3.32.2` or later.","reach":"network","title":"FreeRDP: malicious RDP server can crash client with zero-output payload","impact":"low","summary":"FreeRDP's RDPGFX channel handler does not check for a null output from ZGFX decompression, so a zero-output payload triggers an assertion abort. A malicious RDP server can use this to terminate the connected FreeRDP client.","audience":"developers","category":"runtime","nicknames":[],"who_cares":["freerdp","rdp","remote-desktop"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"Malicious server terminates the FreeRDP client via assertion abort.","analyst_note":"","how_to_check":"- Check the installed FreeRDP version with `xfreerdp --version` or the package manager, and compare against the fixed version in the Fix section.\n- Look for FreeRDP-based clients that connect to servers you do not control.","plain_action":"","needs_analyst":false,"not_affected_if":["fixed-version","trusted-servers-only"],"who_is_affected":"Anyone running a FreeRDP client older than 3.32.2 that connects to RDP servers, especially servers outside their control. Exposure needs an established session, since the payload is sent on the RDPGFX channel after session activation. Teams that only run FreeRDP against trusted servers face a lower risk.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.000684,"input_tokens":4189,"output_tokens":531,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-121406':15A,18A '-2026':14A,17A '3.32.2':65C 'abort':49B,70C 'activ':110C 'allow':66C 'assert':48B,69C 'channel':28B,107C 'check':32B 'client':7A,62B,68C,114C 'connect':60B 'crash':6A 'cve':13A,16A 'data':74C 'decompress':39B,80C 'desktop':23B 'freerdp':1A,19B,25B,61B,63C 'handler':29B 'malici':2A,51B,93C 'negat':78C 'null':35B,86C 'output':11A,36B,44B,87C,101C 'pass':83C 'payload':12A,45B,103C 'pointer':88C 'rdp':3A,20B,52B,94C 'rdpgfx':27B,72C,106C 'receiv':75C 'reject':76C 'remot':22B 'remote-desktop':21B 'result':85C 'runtim':24B 'send':97C 'server':4A,53B,95C 'session':109C 'staticconstinit':91C 'status':81C 'stream':90C 'termin':58B,112C 'trigger':46B 'use':55B 'zero':10A,43B,100C 'zero-output':9A,42B,99C 'zgfx':38B,79C,102C","nicknames":[],"mitigations":[],"who_affected":"Anyone running a FreeRDP client older than 3.32.2 that connects to RDP servers, especially servers outside their control. Exposure needs an established session, since the payload is sent on the RDPGFX channel after session activation. Teams that only run FreeRDP against trusted servers face a lower risk.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["freerdp","medium","rdp","remotedesktop","runtime"],"first_public_at":"2026-10-19T12:05:55+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-121406","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-121406","severity":null,"published_at":"2026-11-03T15:17:29+00:00","modified_at":"2026-11-03T15:17:29+00:00","first_seen_at":"2026-11-03T15:21:58+00:00","fetched_at":"2026-11-03T15:21:58+00:00","note":null}],"documents":[{"id":58335,"url":"https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-2c9x-4gr7-hrwx","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-19T12:05:55+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":58336,"url":"https://www.vulncheck.com/advisories/freerdp-before-3.32.2-client-denial-of-service-via-zero-output-zgfx-payload","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}