CVE-2026-33069PJSIP是一个用C语言编写的免费开源多媒体通信库。在其2.16及更早版本中,`pjsip_multipart_parse()`函数存在级联越界堆读取漏洞。具体而言,在进行边界字符串匹配操作后,代码将指针`curptr`向前移动越过分隔符,但并未验证该指针是否已经到达缓冲区的末尾。这一缺陷允许攻击者读取相邻堆内存中的1到2个字节。任何处理包含多部分正文或SDP内容的传入SIP消息的应用程序均可能受此漏洞影响。该问题已在2.17版本中修复。
漏洞的核心在于PJSIP解析多部分SIP消息时的指针操作缺乏边界检查。当`pjsip_multipart_parse`函数处理包含`multipart`类型的SIP消息时,它会查找并匹配边界字符串以分隔不同的消息部分。在代码逻辑中,一旦检测到边界字符串,程序会更新当前读取指针`curptr`,使其跳过边界字符串指向后续数据。然而,该更新操作未验证`curptr`的新位置是否仍位于已分配的堆缓冲区范围内。如果恶意构造的SIP消息使得边界字符串恰好位于缓冲区末尾,指针更新后将指向缓冲区之外的地址。随后的读取操作将导致越界堆读取,泄露1-2字节相邻内存数据。虽然泄露量有限,但这可能破坏内存隔离,为后续攻击提供信息。该漏洞利用无需认证,通过网络即可触发。