CVE-2026-25994 是一个基于栈的缓冲区溢出漏洞,影响 pjsip ≤ 2.16 中的 ICE(交互式连接建立)实现,具体位于 PJNATH 组件内。
该漏洞存在于以下函数中:
pj_ice_sess_create_check_list()
位于文件:
pjnath/src/pjnath/ice_session.c
该问题由构造 ICE 用户名时的不安全字符串处理导致:
char buf[128]; // 固定大小的栈缓冲区
username.ptr = buf;
pj_strcpy(&username, rem_ufrag); // 缺少边界检查
pj_strcat2(&username, ":");
pj_strcat(&username, &ice->rx_ufrag);
rem_ufrag 直接取自 SDP 属性:
a=ice-ufrag:
在复制到 128 字节的栈缓冲区之前,未进行长度验证。
攻击者因此可以溢出栈,可能覆盖:
ice-ufrag 的恶意 SIP INVITE 会触发溢出✅ 受影响:pjsip ≤ 2.16
❌ 已修复:pjsip ≥ 2.17
修复引入了适当的边界检查:
if (rem_ufrag->slen >= MAX_USERNAME_LEN ||
(rem_ufrag->slen + ice->rx_ufrag.slen + 1) >= 512)
{
return PJ_ETOOBIG;
}
受影响的机器数量:1,200,000
Shodan 链接:https://www.shodan.io/search?query=pjmedia
提供的 PoC 发送一个包含超大 ice-ufrag 的精心构造的 SIP INVITE 以触发溢出。
使用以下命令启动启用了 ICE 的 pjsua:
pjsua-x86_64-unknown-linux-gnu --use-ice --local-port=5060 --log-level=5 --no-tcp --auto-answer=200
python3 pjsip.py -i <target_ip> -p 5060 -a 3
参数
选项 描述 默认值
-i, --ip 目标 IP 地址 127.0.0.1
-p, --port SIP 端口 5060
-a, --attempts 尝试次数 3
预期行为
存在漏洞的目标
服务器无响应
本概念验证仅用于教育和安全研究目的。
请勿将此代码用于非您所有或未经明确许可测试的系统。
V.Nos