JohannesLks/CVE-2026-32945

GitHub: JohannesLks/CVE-2026-32945

该项目提供了针对 PJSIP DNS 解析器堆越界读取漏洞的概念验证代码及测试工具,用于复现远程拒绝服务攻击。

Stars: 0 | Forks: 0

# CVE-2026-32945 PJSIP DNS 压缩指针堆越界读取(远程 DoS) ## 描述 `pjlib-util/src/pjlib-util/dns.c` 中的 `get_name_len()` 和 `get_name()` 通过 `pj_memcpy(&offset, p, 2)` 读取 2 字节的 DNS 压缩指针,但未检查这两个字节是否位于数据包缓冲区内。当 `0xC0` 字节(压缩指针标记)是 DNS 响应的最后一个字节时,`memcpy` 会读取堆分配边界之外的一个字节。 单个 20 字节的特制 DNS 响应即可触发越界读取,并导致任何通过受网络控制的 DNS 服务器解析域名的 PJSIP 应用程序(包括 Asterisk 和 FreeSWITCH)崩溃。 ASan 确认:在 `get_name_len()` 中发生 `heap-buffer-overflow READ of size 2, 0 bytes after 20-byte region`。 这是自 2022 年以来 pjproject `dns.c` 中的第三个 DNS 解析器 CVE(继 CVE-2022-24793 和 CVE-2023-27585 之后)。CVE-2022-24793 的修复在解析器中添加了长度检查,但遗漏了压缩指针路径。 受影响版本:pjproject <= 2.16。已在 pjproject 2.17 中修复(提交 5311aee)。 ## 使用方法 ``` # Standalone ASan harness (无需安装 pjproject): ./run.sh # 或者手动构建和运行: gcc -fsanitize=address,undefined -g -O0 harness.c -o harness ./harness # Network PoC -- rogue DNS server: python3 poc.py --port 5353 # 然后将 PJSIP 应用程序指向该 rogue server: # pjsua --nameserver 127.0.0.1:5353 sip:user@target.example # Docker (从源码使用 ASan 构建 pjproject 2.16): docker compose build docker compose run harness ``` ## 环境要求 - 对于独立测试工具:支持 AddressSanitizer 的 `gcc` - 对于网络 PoC:Python 3(仅标准库,无外部依赖) - 对于 Docker:Docker + Docker Compose ## 文件说明 | 文件 | 描述 | |------|-------------| | `harness.c` | 独立 ASan 测试工具 —— 使用精确的 pjproject 类型重新实现易受攻击的 `get_name_len()` | | `harness_pjlib.c` | 调用真实 `pj_dns_parse_packet()` 的替代测试工具(用于 Docker) | | `poc.py` | 恶意 DNS 服务器 —— 使用特制的 20 字节数据包响应任何查询 | | `run.sh` | 构建并运行 ASan 测试工具 | | `Dockerfile` | 从源码构建带有 ASan 的 pjproject 2.16 | | `docker-compose.yml` | 用于 pjlib 测试工具的 Docker 设置 | | `proof_output.txt` | 来自实时验证的完整 ASan 输出 | ## 参考资料 - https://github.com/pjsip/pjproject/security/advisories/GHSA-jr2p-p2w4-rr9q - https://github.com/pjsip/pjproject/commit/5311aee398ae9d623829a6bad7b679a193c9e199 ## 法律声明 本项目在 GNU GPLv3 下发布。 它仅用于防御性安全研究、教育和授权测试。未经所有者明确许可,请勿将此代码用于针对系统或服务的测试。 未经授权的使用可能违反适用法律。作者未授予测试第三方系统的权限,也不对滥用行为负责。 有关保修和责任条款,请参阅 LICENSE 文件。
标签:AddressSanitizer, ASan, Asterisk, C/C++, CVE-2026-32945, DNS压缩指针, DNS解析, FreeSWITCH, Heap Buffer Overflow, PJProject, PJSIP, PoC, Remote DoS, SIP安全, VoIP安全, 事务性I/O, 内存安全, 堆越界读取, 开源项目, 暴力破解, 漏洞复现, 网络安全, 请求拦截, 远程拒绝服务, 逆向工具, 隐私保护