CVE-2026-23884CVE-2026-23884是FreeRDP远程桌面协议实现中的一个严重安全漏洞,CVSS评分高达9.8分(严重级别)。该漏洞存在于FreeRDP 3.21.0之前的版本中,根源在于offscreen bitmap(屏幕外位图)的删除处理逻辑存在缺陷。具体而言,当offscreen bitmap被删除时,程序未能正确将gdi->drawing指针置空,导致该指针仍然指向已被释放的堆内存区域。随后当客户端接收到来自恶意服务器的更新数据包(update packets)时,系统会尝试访问这个已释放的内存地址,从而触发Use After Free(UAF)漏洞。攻击者可以利用此漏洞在受害者客户端上引发应用程序崩溃(拒绝服务攻击),在特定条件下还可能实现堆内存损坏,进而可能达到远程代码执行(RCE)的危险后果。攻击成功的可能性取决于内存分配器的行为以及堆内存布局的具体情况。由于该漏洞允许恶意RDP服务器对连接到此服务器的客户端发起攻击,因此任何使用受影响版本FreeRDP的用户都可能成为潜在受害者。
该漏洞的技术根源在于FreeRDP的位图缓存管理机制中的内存管理错误。在libfreerdp/cache/offscreen.c文件的第114-122行和第87-91行代码中,offscreen bitmap的删除操作未能正确清理相关指针。具体攻击流程如下:1)攻击者搭建恶意RDP服务器;2)客户端连接到此恶意服务器;3)服务器发送指令触发offscreen bitmap的删除操作;4)删除操作释放了bitmap对应的内存,但gdi->drawing指针未被置零;5)服务器随后发送update packets;6)客户端处理这些数据包时,gdi->drawing已被释放的内存被访问;7)触发UAF漏洞,可能导致进程崩溃或堆损坏。在堆内存管理中,释放后的内存可能被分配给其他对象,攻击者可利用此特性构造信息泄露或代码执行场景。由于RDP协议允许服务器主动推送图形更新,客户端在接收和处理服务器数据时处于被动地位,这使得恶意服务器能够精确控制触发漏洞的时机。该漏洞影响所有使用FreeRDP作为RDP客户端的应用程序,包括但不限于桌面环境、远程办公工具等。