CVE-2025-68118CVE-2025-68118是FreeRDP远程桌面协议实现中的一个严重安全漏洞。该漏洞存在于FreeRDP在Windows平台上的证书处理代码中,具体位于freerdp_certificate_data_hash_uses函数。该函数使用微软特定的_snprintf函数来格式化证书缓存文件名,但在缓冲区大小不足时无法保证NUL终止。当格式化输出超过目标缓冲区大小时,_snprintf不会追加终止NUL字节。如果攻击者能够控制主机名值(例如通过服务器重定向或精心制作的.rdp文件),生成的文件名缓冲区可能未以NUL字符终止。随后对此缓冲区执行的字符串操作可能会读取超过已分配内存区域的边界,导致基于堆的越界读取。在默认配置中,连接通常在敏感数据被有意义地暴露之前就被终止,但在某些条件下仍可能发生非预期的内存读取或客户端崩溃。FreeRDP 3.20.0之前的版本均受此漏洞影响,版本3.20.0已包含修复补丁。
该漏洞的核心问题在于FreeRDP使用_snprintf函数处理证书缓存文件名时的NUL终止问题。在Windows平台上,_snprintf的行为与标准的snprintf不同——当输出超过缓冲区大小时,它不会自动追加NUL终止符。具体来说,freerdp_certificate_data_hash_uses函数负责生成证书缓存的文件名,该文件名包含主机名信息。如果攻击者通过服务器重定向攻击或提供恶意的.rdp文件来控制主机名值,当主机名长度超过预期缓冲区大小时,_snprintf会截断输出但不添加NUL字符。这导致后续的字符串操作(如strcpy、strlen等)继续读取超出分配缓冲区的内存内容,形成堆越界读取。由于证书缓存文件名通常存储在堆内存中,攻击者可能利用此漏洞读取堆中的其他敏感数据。在某些攻击场景下,这种越界读取可能导致信息泄露或程序崩溃,从而影响服务的可用性。