{"id":"CVE-2026-121958","kind":"vulnerability","aliases":["CVE-2026-121958"],"related":[],"title":"FreeRDP: malicious RDP server can overwrite client memory via graphics channel","description":"FreeRDP through 3.32.1 has a heap out-of-bounds write in the RDPGFX client because the delete_surface callback truncates surface hash keys to 16 bits, leaving the surface table inconsistent so HashTable_GetKeys writes past its allocated key array. A malicious or man-in-the-middle RDP server can exploit this by creating surfaceId 0xFFFF, closing the RDPGFX channel, sending repeated DELETESURFACE PDUs, and then sending ENDFRAME or RESETGRAPHICS.","summary":"FreeRDP through 3.32.1 has a heap out-of-bounds write in its RDPGFX graphics client, caused by a surface-key truncation bug in the delete_surface callback. A malicious or man-in-the-middle RDP server can trigger it with crafted surface delete and frame messages, corrupting client memory.","severity":"high","cvss":8.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["c","freerdp","package","rdp","remote-desktop"],"not_affected_if":["no-freerdp-clients","trusted-servers-only"],"how_to_check":"- Check the FreeRDP version installed on the client, for example with `xfreerdp --version`, and compare it to the fixed release in the vendor advisory.\n- Find out whether applications or tools that embed FreeRDP are installed and which version they bundle.","fix":"- FreeRDP versions after `3.32.1` are the sources' stated range; the specific fixed version is unknown from the sources.","status":"open","published_at":"2026-11-04T16:17:48+00:00","first_seen_at":"2026-11-04T16:28:14+00:00","triaged_at":"2026-11-04T16:28:33+00:00","updated_at":"2026-11-04T16:28:33+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-04T16:28:33Z","model":"claude-haiku-5-5","output":{"fix":"- FreeRDP versions after `3.32.1` are the sources' stated range; the specific fixed version is unknown from the sources.","reach":"network","title":"FreeRDP: malicious RDP server can overwrite client memory via graphics channel","impact":"high","summary":"FreeRDP through 3.32.1 has a heap out-of-bounds write in its RDPGFX graphics client, caused by a surface-key truncation bug in the delete_surface callback. A malicious or man-in-the-middle RDP server can trigger it with crafted surface delete and frame messages, corrupting client memory.","audience":"developers","category":"package","nicknames":[],"who_cares":["freerdp","rdp","remote-desktop","c"],"confidence":0.6,"fix_status":"unknown","needs_auth":"no","worst_case":"heap memory corruption in client, possibly code execution","analyst_note":"Confirm the fixed FreeRDP version and whether RDPGFX is enabled by default, using the vendor advisory on github.com and the VulnCheck advisory.","how_to_check":"- Check the FreeRDP version installed on the client, for example with `xfreerdp --version`, and compare it to the fixed release in the vendor advisory.\n- Find out whether applications or tools that embed FreeRDP are installed and which version they bundle.","plain_action":"","needs_analyst":true,"not_affected_if":["no-freerdp-clients","trusted-servers-only"],"who_is_affected":"Any client built on FreeRDP that connects to RDP servers with the RDPGFX graphics channel, which is the default graphics path in many builds. The exploit needs the client to connect to a hostile or intercepted server, so teams that only connect to trusted internal servers face lower risk. unknown whether the sources list default settings beyond this.","user_interaction":"unknown","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000754,"input_tokens":4255,"output_tokens":656,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-121958':14A,17A '-2026':13A,16A '0xffff':134C '16':102C '3.32.1':27B,79C 'alloc':115C 'array':117C 'bit':103C 'bound':34B,86C 'bug':48B 'c':18B 'callback':53B,96C 'caus':41B 'channel':11A,138C 'client':7A,40B,75B,91C 'close':135C 'corrupt':74B 'craft':68B 'creat':132C 'cve':12A,15A 'delet':51B,70B,94C 'deletesurfac':141C 'desktop':24B 'endfram':146C 'exploit':129C 'frame':72B 'freerdp':1A,19B,25B,77C 'getkey':111C 'graphic':10A,39B 'hash':99C 'hashtabl':110C 'heap':30B,82C 'inconsist':108C 'key':46B,100C,116C 'leav':104C 'malici':2A,55B,119C 'man':58B,122C 'man-in-the-middl':57B,121C 'memori':8A,76B 'messag':73B 'middl':61B,125C 'out-of-bound':31B,83C 'overwrit':6A 'packag':20B 'past':113C 'pdus':142C 'rdp':3A,21B,62B,126C 'rdpgfx':38B,90C,137C 'remot':23B 'remote-desktop':22B 'repeat':140C 'resetgraph':148C 'send':139C,145C 'server':4A,63B,127C 'surfac':45B,52B,69B,95C,98C,106C 'surface-key':44B 'surfaceid':133C 'tabl':107C 'trigger':65B 'truncat':47B,97C 'via':9A 'write':35B,87C,112C","nicknames":[],"mitigations":[],"who_affected":"Any client built on FreeRDP that connects to RDP servers with the RDPGFX graphics channel, which is the default graphics path in many builds. The exploit needs the client to connect to a hostile or intercepted server, so teams that only connect to trusted internal servers face lower risk. unknown whether the sources list default settings beyond this.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["c","freerdp","high","package","rdp","remotedesktop"],"campaign_type":null,"first_public_at":"2026-10-20T17:15:28+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/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-121958","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-121958","severity":null,"published_at":"2026-11-04T16:17:48+00:00","modified_at":"2026-11-04T16:17:48+00:00","first_seen_at":"2026-11-04T16:28:14+00:00","fetched_at":"2026-11-04T16:28:14+00:00","note":null}],"documents":[{"id":68489,"url":"https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-m59q-wm7v-mp57","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-20T17:15:28+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":68490,"url":"https://www.vulncheck.com/advisories/freerdp-through-3.32.1-heap-out-of-bounds-write-via-rdpgfx-hashtable-getkeys","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"}