CVE-2026-33986FreeRDP是一个开源的远程桌面协议实现。在3.24.2版本之前的代码中,libfreerdp/codec/h264.c文件的yuv_ensure_buffer()函数存在逻辑缺陷。该函数在执行内存重新分配循环之前预先更新了h264的宽度和高度。如果后续的winpr_aligned_recalloc()调用失败,函数虽然返回FALSE,但宽度和高度数据已经被错误地放大。这种状态不一致可能导致内存破坏,进而引发拒绝服务或代码执行风险。
该漏洞位于FreeRDP处理H.264视频流的解码组件中,具体源文件为libfreerdp/codec/h264.c。问题出在yuv_ensure_buffer()函数的执行顺序上。函数首先将h264结构体中的width和height成员更新为新值,然后才调用winpr_aligned_recalloc()进行内存重分配。如果内存分配失败(例如资源耗尽),函数返回错误,但尺寸参数已被修改。这导致h264对象内部状态不一致,后续代码如果基于这些膨胀的尺寸参数访问未分配或过小的内存区域,将导致缓冲区溢出或释放后重用。攻击者可通过发送特制的RDP数据包触发该路径,利用此漏洞实现远程代码执行。