CVE-2026-22856FreeRDP是Remote Desktop Protocol(远程桌面协议)的开源实现,广泛应用于Linux和Unix系统。该漏洞存在于FreeRDP的串行通道(serial channel)组件中,具体为IRP(I/O Request Packet)线程跟踪机制的竞态条件问题。在多线程并发场景下,一个线程可能从serial->IrpThreads链表中移除某个条目,而与此同时另一个线程正在读取该条目,导致出现堆内存使用后释放(Heap Use-After-Free)漏洞。攻击者可通过构造特定的RDP会话请求触发此竞态条件,在目标系统上实现远程代码执行。由于CVSS评分达到8.1且攻击复杂度较低(AC:H),加上无需认证和用户交互即可利用,此漏洞对使用FreeRDP的服务器和客户端构成严重威胁。该漏洞已在版本3.20.1中得到修复。
该漏洞的根本原因在于FreeRDP串行通道的IRP线程管理缺乏适当的同步保护机制。在Windows和RDP协议中,IRP是用于处理I/O请求的核心数据结构。FreeRDP的串行通道实现中,IrpThreads被用作管理待处理IRP请求的链表或队列结构。当多个线程同时访问这个共享数据结构时,会产生经典的TOCTOU(Time-of-Check to Time-of-Use)竞态条件。具体来说:1) 线程A检查并准备使用某个IRP条目;2) 线程B在此时删除了该条目并释放了对应的堆内存;3) 线程A继续使用已释放的内存指针,导致UAF漏洞。攻击者可以通过发起多个并发的RDP连接或请求,诱导目标系统进入这种竞态状态。一旦成功触发UAF,攻击者可利用堆喷射等技术控制释放的内存内容,最终实现代码执行。攻击者需要控制一个RDP服务器或诱使受害者连接到恶意RDP服务器。