CVE-2026-33983FreeRDP 3.24.2之前的版本存在安全漏洞,导致远程桌面协议客户端易受拒绝服务攻击。在`progressive_decompress_tile_upgrade`函数处理数据时,尽管检测到量化值不匹配,但代码仅发出警告而未中断执行。这导致将一个包装后的异常值(247)用作移位操作的指数,引发未定义行为。该错误会导致程序进入约800亿次迭代的循环,从而耗尽CPU资源,造成系统拒绝服务。
该漏洞源于FreeRDP处理Remote Desktop Protocol (RDP) 数据流时的逻辑缺陷。具体位于`progressive_decompress_tile_upgrade`函数中,该函数使用`progressive_rfx_quant_cmp_equal`来检查量化值的一致性。当检测到不匹配时,代码路径仅调用了`WLog_WARN`记录日志,未采取中断或错误处理措施。随后,一个被包装的整数值(247)被误用为位移操作的指数。在C/C++语言中,对32位或64位整数进行远超其位宽的移位(如1<<247)属于未定义行为。在FreeRDP的实现场景下,这并未直接导致崩溃,而是触发了逻辑错误,使得程序进入了一个包含约800亿次迭代的巨大循环。攻击者可诱导受害者连接到恶意RDP服务器,发送特制数据包触发该漏洞,导致受害者客户端CPU资源被瞬间耗尽。