
PJSIP cve-2026-25994 DÉBORDEMENT DE TAMPON POC
CVE-2026-25994 est une vulnérabilité de débordement de tampon basé sur la pile affectant l'implémentation ICE (Interactive Connectivity Establishment) dans pjsip ≤ 2.16, plus précisément dans le composant PJNATH.
La vulnérabilité existe dans la fonction :
pj_ice_sess_create_check_list()
située dans :
pjnath/src/pjnath/ice_session.c
Le problème est causé par une gestion non sécurisée des chaînes lors de la construction du nom d'utilisateur 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 est extrait directement de l'attribut SDP :
a=ice-ufrag:
Aucune validation de longueur n'est effectuée avant la copie dans un tampon de pile de 128 octets
Cela permet à un attaquant de faire déborder la pile, en écrasant potentiellement :
Adresse de retour
Cadre de pile
Canari / données d'alignement
Un INVITE SIP malveillant contenant un ice-ufrag long déclenche le débordement
Une exploitation fiable se produit avec des charges utiles ≥ ~130 octets
En pratique, ~500+ octets (par exemple 520) produit un crash cohérent
✅ Vulnérable: pjsip ≤ 2.16
❌ Corrigé: pjsip ≥ 2.17
Le correctif introduit une vérification des limites appropriée :
if (rem_ufrag->slen >= MAX_USERNAME_LEN ||
(rem_ufrag->slen + ice->rx_ufrag.slen + 1) >= 512)
{
return PJ_ETOOBIG;
}
Déni de service (DoS) via une erreur de segmentation Potentiel d'exécution de code à distance (RCE) selon :
Protections de pile (ASLR, NX, canaris) Disposition de la mémoire Sophistication de l'exploit
1.200.000 machines affectées
Shodan link : https://www.shodan.io/search?query=pjmedia
Le PoC fourni envoie un INVITE SIP malveillant contenant un ice-ufrag surdimensionné pour déclencher le débordement.
Entièrement synchrone (pas d'asyncio) Configurable en ligne de commande Nouvelles tentatives automatiques Charge utile SDP réaliste Détection de crash via délai d'attente
Démarrez pjsua avec ICE activé :
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
Mettez à niveau vers pjsip ≥ 2.17
Appliquez une validation des entrées pour les attributs SDP
Utilisez des protections de pile : Canaris de pile ASLR NX (pile non exécutable)
Cette preuve de concept est fournie à des fins éducatives et de recherche en sécurité uniquement.
N'utilisez pas ce code contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.
V.Nos