CVE-2026-31884CVE-2026-31884是FreeRDP远程桌面协议实现中的一个拒绝服务漏洞。FreeRDP是开源的远程桌面协议(RDP)客户端软件,广泛应用于Linux和Windows系统。该漏洞存在于ADPCM音频解码器组件中,当处理恶意构造的音频格式数据时,解码器未对nBlockAlign参数进行有效性验证。当nBlockAlign值为0时,代码执行取模运算(size % block_size)会触发除零错误,导致进程崩溃并产生SIGFPE(浮点异常)信号。攻击者可通过诱骗用户连接到恶意RDP服务器或在RDP通信过程中注入恶意音频格式数据来触发此漏洞,造成客户端应用程序崩溃,影响远程桌面服务的可用性。由于该漏洞需要用户交互才能触发,且只影响可用性不影响机密性和完整性,因此被评定为中危漏洞。
漏洞根源位于FreeRDP的libfreerdp/codec/dsp.c源文件中,具体涉及MS-ADPCM和IMA-ADPCM两种音频解码器。这两个解码器在处理音频数据时执行取模运算:size % block_size,其中block_size的值来自context->common.format.nBlockAlign参数。nBlockAlign参数本应表示音频数据的块对齐大小,其值来自RDPSND通道上的Server Audio Formats PDU(协议数据单元)。问题在于nBlockAlign值从网络接收后,在进入解码器之前没有被进行零值验证。当攻击者构造nBlockAlign=0的恶意音频格式并发送给FreeRDP客户端时,解码器执行取模运算会导致除零错误。CPU在遇到除零操作时会产生SIGFPE(浮点异常)信号,导致FreeRDP进程异常终止。要利用此漏洞,攻击者需要控制一个RDP服务器,或者能够中间人攻击RDP连接。受害者客户端在连接时会自动接收服务器发送的音频格式数据,触发漏洞条件。修复方案已在版本3.24.0中实现,主要是在解码前添加nBlockAlign值的有效性检查。