CVE-2026-22858CVE-2026-22858是FreeRDP远程桌面协议实现中的一个严重安全漏洞。该漏洞存在于FreeRDP的Base64解码路径中,是一种全局缓冲区溢出(global-buffer-overflow)问题。在3.20.1版本之前,受影响的FreeRDP在处理Base64编码数据时存在缺陷,特别是在Arm/AArch64架构构建版本中,由于C语言中char类型的有符号性在实现定义上的差异,导致安全检查可以被绕过。攻击者可以通过发送特制的Base64编码数据,利用非ASCII字节(0x80-0xFF)绕过预期的范围限制,将其作为索引访问全局查找表,从而触发越界内存访问。该漏洞CVSS评分高达9.1,属于严重级别,无需认证即可远程利用,对系统机密性和可用性造成严重影响。
该漏洞的根本原因在于FreeRDP Base64解码器中字符有符号性的实现定义问题。在C语言标准中,char类型可以是有符号或无符号的,具体取决于实现。在Arm/AArch64架构上,plain char被当作无符号字符处理,这导致安全检查c <= 0被编译器优化为简单的c != 0检查。正常的Base64解码应该只接受ASCII范围内的可打印字符(通常为0-63的索引值),但由于这个优化,非ASCII字节(0x80-0xFF)可以绕过范围检查。这些恶意字节随后被用作访问全局查找表的索引,而该查找表的大小并未针对这些异常值进行边界保护。当这些越界的索引值访问查找表时,会触发全局缓冲区溢出,可能导致敏感内存内容泄露或程序崩溃。在远程桌面协议的实际应用场景中,攻击者可以通过RDP连接发送包含恶意Base64编码的数据包来触发此漏洞,实现远程信息泄露或拒绝服务攻击。