
Preuve de concept d'exploitation pour un débordement de tampon avant authentification dans GNU InetUtils telnetd (CVE-2026-32746), incluant un environnement de laboratoire Docker et un script de détection pour les tests de sécurité autorisés.
Exécution de code à distance avant authentification via un débordement de tampon dans le gestionnaire SLC (Set Local Characters) LINEMODE du telnetd GNU InetUtils.
CVSS 3.1 : 9.8 (Critique) | CWE : CWE-120, CWE-787
La fonction add_slc() dans telnetd/slc.c ajoute 3 octets par triplet SLC à un tampon fixe de 108 octets (slcbuf) sans vérification des limites. Un attaquant non authentifié peut envoyer une sous-option SLC spécialement conçue avec 40+ triplets (codes de fonction > 18/NSLC) pendant la négociation des options - avant toute invite de connexion - provoquant un débordement du tampon, corrompant le pointeur slcptr dans le BSS, et réalisant une écriture arbitraire lorsque end_slc() utilise le pointeur corrompu.
# Construire l'environnement de laboratoire vulnérable
docker compose up -d
# Détection (non destructif)
python3 detect.py 127.0.0.1 2323
# Exploitation (fait planter telnetd - confirme la vulnérabilité)
python3 exploit.py 127.0.0.1 2323
# Nettoyage
docker compose down
La configuration Docker exécute un conteneur Debian avec inetutils-telnetd 2.4 sous xinetd, exposé sur le port 2323. Totalement isolé - rien ne touche à votre hôte.
WILL LINEMODE pour déclencher la négociation LINEMODEDO LINEMODE et entre dans le traitement de la sous-option SLCadd_slc() met en file d'attente une réponse "non pris en charge" (3 octets) pour chaque triplet dans un tampon de 104 octetsslcptr et les données BSS adjacentesend_slc() écrit le marqueur de fin de sous-option via le slcptr corrompu (écriture arbitraire)| Fichier | Description |
|---|---|
exploit.py | PoC de crash/DoS |
Dockerfile | Laboratoire telnetd vulnérable |
docker-compose.yml | Configuration de laboratoire en une commande |
xinetd-telnet.conf | Configuration du service xinetd |
detect.py | Script de détection de version non destructif |
Pour aller au-delà du DoS, vous auriez besoin de :
slcbuf → slcptr)end_slc() écrit via le slcptr corrompuCet outil est fourni uniquement pour des tests de sécurité autorisés et à des fins éducatives. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester. L'auteur n'est pas responsable d'une mauvaise utilisation.
MIT