
Proof-of-concept exploit per un buffer overflow pre-autenticazione in GNU InetUtils telnetd (CVE-2026-32746), inclusi un ambiente di laboratorio Docker e uno script di rilevamento per test di sicurezza autorizzati.
Esecuzione di codice remota pre-autenticazione tramite overflow del buffer nel gestore SLC (Set Local Characters) LINEMODE di telnetd GNU InetUtils.
CVSS 3.1: 9.8 (Critico) | CWE: CWE-120, CWE-787
La funzione add_slc() in telnetd/slc.c aggiunge 3 byte per ogni tripletta SLC a un buffer fisso di 108 byte (slcbuf) senza controlli sui limiti. Un attaccante non autenticato può inviare una sotto-opzione SLC appositamente predisposta con 40+ triplette (codici funzione > 18/NSLC) durante la negoziazione delle opzioni - prima di qualsiasi prompt di login - facendo traboccare il buffer, corrompendo il puntatore slcptr in BSS e ottenendo una scrittura arbitraria quando end_slc() utilizza il puntatore corrotto.
# Costruisci l'ambiente di laboratorio vulnerabile
docker compose up -d
# Rilevamento (non distruttivo)
python3 detect.py 127.0.0.1 2323
# Exploit (fa crashare telnetd - conferma la vulnerabilità)
python3 exploit.py 127.0.0.1 2323
# Pulizia
docker compose down
La configurazione Docker esegue un container Debian con inetutils-telnetd 2.4 sotto xinetd, esposto sulla porta 2323. Completamente isolato - non tocca nulla sul tuo host.
WILL LINEMODE per attivare la negoziazione LINEMODEDO LINEMODE e avvia l'elaborazione della sotto-opzione SLCadd_slc() accoda una risposta "non supportato" (3 byte) per ogni tripletta in un buffer di 104 byteslcptr e i dati BSS adiacentiend_slc() scrive il marcatore di fine sotto-opzione tramite il slcptr corrotto (scrittura arbitraria)| File | Descrizione |
|---|---|
exploit.py | PoC di crash/DoS exploit |
Dockerfile | Laboratorio telnetd vulnerabile |
docker-compose.yml | Configurazione laboratorio con un comando |
xinetd-telnet.conf | Configurazione servizio xinetd |
detect.py | Script di rilevamento versione non distruttivo |
Per andare oltre il DoS, dovresti:
slcbuf → slcptr)end_slc() scrive tramite il slcptr corrottoQuesto strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. Non utilizzarlo contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test. L'autore non è responsabile per un uso improprio.
MIT