
PJSIP cve-2026-25994 BUFFER OVERFLOW POC
CVE-2026-25994 è una vulnerabilità di overflow del buffer di stack che colpisce l'implementazione di ICE (Interactive Connectivity Establishment) in pjsip ≤ 2.16, in particolare nel componente PJNATH.
La vulnerabilità è presente nella funzione:
pj_ice_sess_create_check_list()
situata in:
pjnath/src/pjnath/ice_session.c
Il problema è causato da una gestione non sicura delle stringhe durante la costruzione dell'username 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 viene prelevato direttamente dall'attributo SDP:
a=ice-ufrag:
Non viene eseguita alcuna validazione della lunghezza prima della copia in un buffer di stack di 128 byte
Ciò consente a un aggressore di provocare un overflow dello stack, sovrascrivendo potenzialmente:
Indirizzo di ritorno
Stack frame
Canary / dati di allineamento
Un SIP INVITE malintenzionato contenente un ice-ufrag molto lungo attiva l'overflow
Uno sfruttamento affidabile si ottiene con payload ≥ ~130 byte
In pratica, ~500+ byte (ad es. 520) producono un comportamento di crash costante
✅ Vulnerabile: pjsip ≤ 2.16
❌ Corretto: pjsip ≥ 2.17
La correzione introduce un adeguato controllo dei limiti:
if (rem_ufrag->slen >= MAX_USERNAME_LEN ||
(rem_ufrag->slen + ice->rx_ufrag.slen + 1) >= 512)
{
return PJ_ETOOBIG;
}
Denial of Service (DoS) tramite segmentation fault Potenziale di esecuzione di codice remoto (RCE) in base a:
Protezioni dello stack (ASLR, NX, canary) Layout della memoria Sofisticatezza dell'exploit
1.200.000 macchine interessate
Shodan link : https://www.shodan.io/search?query=pjmedia
La PoC fornita invia un SIP INVITE appositamente modificato contenente un ice-ufrag sovradimensionato per attivare l'overflow.
Completamente sincrono (niente asyncio) Configurabile da riga di comando Retry automatici Payload SDP realistico Rilevamento del crash tramite timeout
Avvia pjsua con ICE abilitato:
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

Aggiorna a pjsip ≥ 2.17
Applica la validazione degli input per gli attributi SDP
Utilizza le protezioni dello stack: Canary di stack ASLR NX (stack non eseguibile)
Questa PoC è fornita esclusivamente a scopo didattico e di ricerca sulla sicurezza.
Non utilizzare questo codice contro sistemi che non possiedi o per i quali non hai ricevuto un'esplicita autorizzazione al test.
V.Nos