CVE-2026-29775CVE-2026-29775是FreeRDP远程桌面协议实现中的一个客户端侧堆越界读写漏洞。该漏洞存在于FreeRDP的位图缓存子系统,由于bitmap_cache_put函数中存在off-by-one边界检查错误,恶意服务器可以发送特制的CACHE_BITMAP_ORDER (Rev1)数据包,当cacheId参数设置为等于maxCells值时,可以绕过安全检查并访问cells[]数组最后一个有效元素之后的内存位置,从而导致堆越界读写。这一漏洞影响FreeRDP 3.24.0之前的所有版本,攻击者可通过恶意的RDP服务器利用此漏洞对连接到此服务器的RDP客户端进行攻击,可能导致客户端崩溃或执行任意代码。该漏洞已在FreeRDP 3.24.0版本中得到修复。
漏洞根源在于FreeRDP的位图缓存处理逻辑中的边界检查缺陷。在bitmap_cache_put函数中,代码需要对cacheId进行范围检查以防止越界访问cells[]数组。正常情况下,cacheId的有效范围应该是0到maxCells-1之间。然而,由于边界检查存在off-by-one错误,当cacheId等于maxCells时,检查逻辑未能正确阻止访问。攻击者控制的恶意RDP服务器可以构造一个CACHE_BITMAP_ORDER (Rev1)命令,将cacheId字段设置为maxCells值,从而绕过保护机制。当程序执行到访问cells[cacheId]时,实际上是在访问数组边界之外的内存位置,造成堆越界读取或写入。这种越界访问可能导致敏感信息泄露、程序崩溃或在特定条件下实现远程代码执行。攻击利用的前提是受害者客户端连接到攻击者控制的恶意RDP服务器。