CVE-2026-40614PJSIP是一个开源多媒体通信库。在2.16及更早版本中,Opus编解码器解码路径存在堆缓冲区溢出漏洞。由于FEC解码缓冲区的大小基于PCM公式计算(仅960字节),但处理函数可接收最大1280字节的编码帧,导致在拷贝数据时发生越界写入。攻击者可诱导受害者处理恶意音频流,从而触发内存破坏,可能导致远程代码执行或服务拒绝。
该漏洞源于PJSIP在Opus解码时对FEC缓冲区(dec_frame[].buf)的分配逻辑错误。缓冲区大小计算公式为(sample_rate/1000) * 60 * channel_cnt * 2,在8kHz单声道下仅分配960字节。然而,codec_parse()通过opus_repacketizer_out_range()输出的帧大小可达MAX_ENCODED_PACKET_SIZE(1280字节)。在codec_decode()函数中,三次pj_memcpy()调用直接拷贝input->size字节数据,未检查目标缓冲区边界。当输入数据大于960字节时,即发生堆溢出。由于CVSS评分为8.8,攻击者可通过网络无需认证发送特制RTP包利用此漏洞,覆盖堆上的关键数据结构,实现远程代码执行。