
PJSIP cve-2026-25994 Buffer Overflow POC
A CVE-2026-25994 é uma vulnerabilidade de estouro de buffer baseado em pilha que afeta a implementação ICE (Interactive Connectivity Establishment) no pjsip ≤ 2.16, especificamente no componente PJNATH.
A vulnerabilidade existe na função:
pj_ice_sess_create_check_list()
localizada em:
pjnath/src/pjnath/ice_session.c
O problema é causado pelo tratamento inseguro de strings ao construir o nome de usuário 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 é obtido diretamente do atributo SDP:
a=ice-ufrag:
Nenhuma validação de comprimento é realizada antes da cópia para um buffer de pilha de 128 bytes
Isso permite que um atacante estoure a pilha, potencialmente sobrescrevendo:
Endereço de retorno
Quadro de pilha
Dados de canário / alinhamento
Um SIP INVITE malicioso contendo um ice-ufrag longo aciona o estouro
A exploração confiável ocorre com payloads ≥ ~130 bytes
Na prática, ~500+ bytes (por exemplo, 520) proporciona um comportamento de crash consistente
✅ Vulnerável: pjsip ≤ 2.16
❌ Corrigido: pjsip ≥ 2.17
A correção introduz a verificação adequada de limites:
if (rem_ufrag->slen >= MAX_USERNAME_LEN ||
(rem_ufrag->slen + ice->rx_ufrag.slen + 1) >= 512)
{
return PJ_ETOOBIG;
}
Negação de Serviço (DoS) via falha de segmentação Potencial para Execução Remota de Código (RCE) dependendo de:
Proteções de pilha (ASLR, NX, canários) Layout de memória Sofisticação do exploit
1.200.000 máquinas afetadas
Shodan link : https://www.shodan.io/search?query=pjmedia
O PoC fornecido envia um SIP INVITE manipulado contendo um ice-ufrag superdimensionado para acionar o estouro.
Totalmente síncrono (sem asyncio) Configurável por linha de comando Tentativas automáticas Payload SDP realista Detecção de crash via timeout
Inicie o pjsua com ICE habilitado:
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
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
Atualize para pjsip ≥ 2.17
Aplique validação de entrada para atributos SDP
Use proteções de pilha: Canários de pilha ASLR NX (pilha não executável)
Esta Prova de Conceito é fornecida apenas para fins educacionais e de pesquisa em segurança.
Não use este código contra sistemas que você não possui ou para os quais não tem permissão explícita para testar.
V.Nos