VABISMO/cve-2026-25994_PJSIP
GitHub: VABISMO/cve-2026-25994_PJSIP
该项目提供了针对PJSIP库CVE-2026-25994栈缓冲区溢出漏洞的概念验证代码。
Stars: 2 | Forks: 0
## CVE-2026-25994 – PJNATH ICE 栈缓冲区溢出 (pjsip ≤ 2.16)
### 概述
CVE-2026-25994 是一个基于栈的缓冲区溢出漏洞,影响了 pjsip ≤ 2.16 中的 ICE (Interactive Connectivity Establishment) 实现,具体位于 PJNATH 组件中。
该漏洞存在于以下函数中:
pj_ice_sess_create_check_list()
位于:
pjnath/src/pjnath/ice_session.c
### 漏洞详情
该问题是由构建 ICE 用户名时不安全的字符串处理引起的:
```
char buf[128]; // Fixed-size stack buffer
username.ptr = buf;
pj_strcpy(&username, rem_ufrag); // No bounds checking
pj_strcat2(&username, ":");
pj_strcat(&username, &ice->rx_ufrag);
```
### 根本原因
rem_ufrag 直接取自 SDP 属性:
```
a=ice-ufrag:
```
在复制到 128 字节的栈缓冲区之前未执行长度验证
这允许攻击者溢出栈,可能覆盖:
返回地址
栈帧
Canary / 对齐数据
### 利用
包含长 ice-ufrag 的恶意 SIP INVITE 会触发溢出
使用 ≥ ~130 字节的 payload 即可实现可靠利用
实际上,~500+ 字节(例如 520 字节)可提供一致的崩溃行为
### 受影响版本
✅ 易受攻击版本: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;
}
```
### 影响
通过段错误 (segmentation fault) 导致拒绝服务 (DoS)
根据以下情况,可能实现远程代码执行 (RCE):
栈保护机制 (ASLR, NX, canaries)
内存布局
利用技术的复杂程度
1,200,000 台机器受影响
```
Shodan link : https://www.shodan.io/search?query=pjmedia
```
### 概念验证 (PoC)
提供的 PoC 发送一个包含超长 ice-ufrag 的精心构造的 SIP INVITE,以触发溢出。
### 功能
完全同步(无 asyncio)
可通过命令行配置
自动重试
逼真的 SDP payload
通过超时检测崩溃
### 运行易受攻击的服务器
启动 pjsua 并启用 ICE:
```
pjsua-x86_64-unknown-linux-gnu --use-ice --local-port=5060 --log-level=5 --no-tcp --auto-answer=200
```
### 运行 PoC
```
python3 pjsip.py -i -p 5060 -a 3
```
```
Arguments
Option Description Default
-i, --ip Target IP address 127.0.0.1
-p, --port SIP port 5060
-a, --attempts Number of attempts 3
Expected Behavior
Vulnerable Target
No response from server
```
### 缓解措施
升级到 pjsip ≥ 2.17
对 SDP 属性应用输入验证
使用栈保护机制:
Stack canaries
ASLR
NX (不可执行栈)
### 免责声明
此概念验证 (PoC) 仅供教育和安全研究目的使用。
请勿将此代码用于您不拥有或未获得明确测试许可的系统。
### 作者
V.Nos
[BinSmasher Team](https://github.com/VABISMO/binsmasher/)
### 缓解措施
升级到 pjsip ≥ 2.17
对 SDP 属性应用输入验证
使用栈保护机制:
Stack canaries
ASLR
NX (不可执行栈)
### 免责声明
此概念验证 (PoC) 仅供教育和安全研究目的使用。
请勿将此代码用于您不拥有或未获得明确测试许可的系统。
### 作者
V.Nos
[BinSmasher Team](https://github.com/VABISMO/binsmasher/)标签:CVE-2026-25994, Go语言工具, ICE, PJNATH, PJSIP, PoC, RCE, SDP, SIP, VoIP, 内存安全, 拒绝服务, 暴力破解, 栈溢出, 红队技术, 缓冲区溢出, 网络安全, 逆向工具, 配置错误, 隐私保护