
PJSIP cve-2026-25994 PUFFERÜBERLAUF POC
CVE-2026-25994 ist eine Stack-basierte Pufferüberlauf-Schwachstelle, die die ICE-Implementierung (Interactive Connectivity Establishment) in pjsip ≤ 2.16 betrifft, insbesondere die PJNATH-Komponente.
Die Schwachstelle existiert in der Funktion:
pj_ice_sess_create_check_list()
in:
pjnath/src/pjnath/ice_session.c
Das Problem wird durch unsichere Zeichenkettenverarbeitung beim Erstellen des ICE-Benutzernamens verursacht:
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 wird direkt aus dem SDP-Attribut übernommen:
a=ice-ufrag:
Vor dem Kopieren in einen 128-Byte-Stack-Puffer wird keine Längenvalidierung durchgeführt.
Dies ermöglicht einem Angreifer, den Stack zu überlaufen und möglicherweise Folgendes zu überschreiben:
Rücksprungadresse
Stack-Frame
Canary-/Ausrichtungsdaten
Eine böswillige SIP-INVITE mit einem langen ice-ufrag löst den Überlauf aus.
Eine zuverlässige Ausnutzung erfolgt mit Payloads ≥ ~130 Bytes.
In der Praxis führen ~500+ Bytes (z. B. 520) zu konsistentem Absturzverhalten.
✅ Verwundbar: pjsip ≤ 2.16
❌ Behoben: pjsip ≥ 2.17
Der Fix führt eine ordnungsgemäße Grenzprüfung ein:
if (rem_ufrag->slen >= MAX_USERNAME_LEN ||
(rem_ufrag->slen + ice->rx_ufrag.slen + 1) >= 512)
{
return PJ_ETOOBIG;
}
Denial of Service (DoS) durch Segmentation Fault Potenzial für Remote Code Execution (RCE) abhängig von:
Stack-Schutzmaßnahmen (ASLR, NX, Canaries) Speicherlayout Komplexität des Exploits
1.200.000 betroffene Maschinen
Shodan link : https://www.shodan.io/search?query=pjmedia
Der bereitgestellte PoC sendet eine präparierte SIP-INVITE mit einem übermäßig großen ice-ufrag, um den Überlauf auszulösen.
Vollständig synchron (kein asyncio) Über die Befehlszeile konfigurierbar Automatische Wiederholungsversuche Realistische SDP-Payload Absturzerkennung per Timeout
Starten Sie pjsua mit aktiviertem ICE:
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
Upgrade auf pjsip ≥ 2.17 durchführen
Eingabevalidierung für SDP-Attribute anwenden
Stack-Schutzmaßnahmen verwenden: Stack-Canaries ASLR NX (nicht ausführbarer Stack)
Dieses Proof of Concept wird ausschließlich zu Bildungs- und Sicherheitsforschungszwecken bereitgestellt.
Verwenden Sie diesen Code nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Testberechtigung haben.
V.Nos