CVE-2026-33984FreeRDP是一款远程桌面协议的开源实现。在3.24.2版本之前,libfreerdp/codec/clear.c文件中的resize_vbar_entry()函数存在安全漏洞。该函数在调用winpr_aligned_recalloc()前错误更新了size值。若重分配失败,size值膨胀但缓冲区仍指向旧的小块内存。后续调用时,程序会将攻击者控制的数据写入该缓冲区,导致堆缓冲区溢出。
该漏洞源于FreeRDP在处理远程桌面连接时的内存管理逻辑错误。具体存在于libfreerdp/codec/clear.c的resize_vbar_entry()函数中。代码在执行内存重分配(winpr_aligned_recalloc)之前,提前将结构体中的size成员更新为请求的新大小。如果在重分配过程中操作失败(例如内存耗尽),函数返回错误,但size成员已经被修改为较大的值,而pixels指针依然指向原先较小的内存块。当下一次调用该函数时,由于新的请求数量小于等于已被膨胀的size值,代码会错误地认为不需要重新分配内存,直接使用旧的缓冲区。随后,程序尝试写入大量像素数据,导致超出旧缓冲区的边界,引发堆缓冲区溢出。攻击者可以通过精心构造的RDP数据包触发该逻辑,从而可能实现远程代码执行。