CVE-2026-32853LibVNCServer是广泛使用的VNC协议开源实现库。在其0.9.15及更早版本中,发现了一个严重的堆越界读取安全漏洞。该漏洞产生于UltraZip编码处理器的HandleUltraZIPBPP函数内部。由于对子矩形头计数的边界检查存在缺陷,恶意的VNC服务器可以通过精心构造的数据包来操纵计数参数。这会导致连接的VNC客户端在处理数据时,读取超出已分配堆缓冲区范围的内存。成功利用此漏洞,攻击者不仅可以导致应用程序崩溃,造成拒绝服务,还可能窃取内存中的敏感信息。该漏洞CVSS v3.1评分为8.1,属于高危级别,需要用户交互才能触发。
该漏洞的技术核心在于LibVNCServer在解码UltraZip压缩流时缺乏对关键参数的严格校验。UltraZip是一种用于高效传输屏幕更新的编码方式。在HandleUltraZipBPP函数中,程序解析来自服务器的子矩形头部信息。攻击者可以将子矩形数量设置为一个极大的值,或者在数据包布局上做手脚,使得预期的读取长度超过了实际分配给UltraZip缓冲区的堆内存大小。当程序进入循环处理这些子矩形时,由于使用了受污染的输入作为读取长度或索引,便会发生堆越界读取。这种读取操作不仅破坏了程序的稳定性,更重要的是,它允许攻击者探测内存布局。由于堆内存中通常包含堆元数据、函数指针或其他连接的上下文信息,通过分析读取到的异常数据,攻击者可能绕过ASLR等保护机制,进一步实施信息泄露攻击。