Un semplice controllo di sicurezza su un router fornito dal provider Internet ha portato alla scoperta di vulnerabilità rimaste nel firmware del prodotto consegnato a milioni di abbonati. Durante l’attività di analisi, un ricercatore indipendente ha individuato una falla di command injection post autenticazione che, combinata con altre debolezze già note, ha consentito di ottenere una shell completa sul dispositivo.
Router, modem e gateway residenziali rappresentano uno dei punti più delicati dell’infrastruttura domestica e aziendale. Secondo diversi rapporti pubblicati negli ultimi anni da produttori di sicurezza e organismi di settore, questi apparati rimangono tra i bersagli preferiti di botnet e gruppi criminali perché spesso ricevono aggiornamenti con grande ritardo oppure continuano a utilizzare firmware derivati da codice sviluppato molti anni prima. Facile comprendere quanto il consiglio di riavviare il router sia davvero puerile.
Nel caso specifico, il ricercatore aveva iniziato l’analisi dopo aver verificato la presenza di due vulnerabilità già registrate come CVE (Common Vulnerabilities and Exposures) e riconosciute dal produttore del router.
Una command injection scoperta durante l’analisi del firmware
Come anticipato nell’introduzione, l’indagine ha evidenziato una vulnerabilità di command injection accessibile dopo l’autenticazione nell’interfaccia di amministrazione. In pratica, un utente già in possesso di credenziali valide potrebbe eseguire comandi arbitrari sul sistema operativo sottostante del router sfruttando una gestione non corretta degli input.
Si tratta di una categoria di vulnerabilità particolarmente insidiosa. Anche quando richiede un accesso preliminare, può trasformare un account con privilegi limitati in un punto d’ingresso per il controllo completo del dispositivo.
Nel caso dei router, questo scenario assume un’importanza maggiore perché l’apparato gestisce traffico Internet, configurazioni VoIP, DNS, regole firewall e, in molti casi, l’intera segmentazione della rete locale.
Il ricercatore è riuscito a ottenere una reverse shell, ossia una connessione remota interattiva che consente di controllare il router compromesso, dimostrando che l’exploit non permetteva soltanto di eseguire singoli comandi, ma garantiva un accesso remoto completo e continuativo al dispositivo di rete.
L’accesso nascosto tramite account supervisor
Uno degli aspetti più interessanti emersi durante l’analisi riguarda la presenza di un account chiamato supervisor. Tale utenza utilizzava credenziali differenti rispetto agli altri account amministrativi normalmente accessibili attraverso l’interfaccia web.
Dopo aver ottenuto l’accesso alla shell, il ricercatore ha modificato la password associata a questo utente e ha verificato la possibilità di collegarsi tramite SSH. A differenza dell’ambiente limitato normalmente offerto da alcuni router, l’accesso ottenuto conduceva a una shell Linux standard e metteva a disposizione funzionalità aggiuntive nell’interfaccia amministrativa.
Il ruolo del provisioning remoto e del protocollo TR-069
Un elemento citato riguarda l’utilizzo di TR-069, protocollo ampiamente adottato dagli operatori telefonici per configurare automaticamente modem e router installati presso i clienti.
Attraverso il protocollo, noto anche come CWMP, il dispositivo comunica con un server ACS dell’operatore e riceve impostazioni relative alla connettività, ai servizi VoIP, agli aggiornamenti firmware e ad altri parametri operativi. La procedura semplifica enormemente la gestione degli apparati, ma introduce anche una complessità significativa dal punto di vista della sicurezza.
Un router che supporta provisioning remoto deve infatti esporre componenti software aggiuntivi, meccanismi di autenticazione, servizi di gestione e processi che rimangono attivi per l’intero ciclo di vita del dispositivo. Ogni componente aggiuntivo aumenta il numero di potenziali punti deboli da monitorare.
Dentro il firmware: come i ricercatori scoprono vulnerabilità, account nascosti e password hardcoded nei router
L’approccio più realistico consiste nell’utilizzare una workstation Linux: come primo passo, si identifica precisamente l’hardware. Attraverso SSH, seriale o semplicemente leggendo le informazioni esposte dall’interfaccia web, si raccolgono modello, versione firmware, versione kernel e chipset sui quali il router basa il suo funzionamento.
Su Linux si usano strumenti come nmap per enumerare i servizi esposti e verificare la presenza di porte amministrative, servizi TR-069, SSH, Telnet e API web.
Una volta identificata la versione del firmware, il ricercatore scarica l’immagine di aggiornamento dal sito del produttore.
Completato il download sul terminale Linux, si possono usare comandi come file firmware.bin e strings firmware.bin | less che spesso restituiscono informazioni interessanti. Esempi: BusyBox v1.35, OpenSSL 1.1.1, TR069 Client, dropbear. Questi dettagli consentono già di capire quali componenti software potrebbero essere presenti.
Usare Binwalk per “radiografare” il firmware
Il passo seguente consiste nel far accedere al campo da gioco uno degli strumenti più utilizzati nella ricerca embedded: Binwalk.
Il suo scopo consiste nello scomporre il firmware nelle sue componenti interne. Attraverso Binwalk si individuano filesystem SquashFS, CramFS, UBIFS, kernel Linux compressi e archivi incorporati: l’estrazione consente di ottenere una copia navigabile del filesystem del router.
Binwalk cerca automaticamente firme note all’interno del file e individua filesystem, kernel e archivi compressi: l’utilizzo base è binwalk firmware.bin.
Estrazione del filesystem
A questo punto l’analisi diventa sorprendentemente simile a quella di un normale server Linux: i ricercatori iniziano cercando file interessanti.
I comandi da usare sono binwalk -e firmware.bin oppure binwalk -Me firmware.bin, con il secondo (opzione ricorsiva) che permette di estrarre filesystem annidati e archivi compressi.
Le directory che ricevono maggiore attenzione sono generalmente /etc, /usr/bin, /usr/sbin, /www, /cgi-bin, /var/config e tutte le aree contenenti script di configurazione. Molti produttori inseriscono configurazioni XML, JSON o database SQLite che descrivono utenti, privilegi e impostazioni di provisioning.
Caccia alle credenziali
La ricerca di account nascosti avviene, di solito, prendendo in esame i file che definiscono utenti e gruppi. Si cercano stringhe come admin, supervisor, support, engineer o debug e si confrontano con gli account realmente visibili nell’interfaccia web. Molte volte emergono ruoli amministrativi utilizzati dall’assistenza tecnica o dal provisioning remoto, nascosti all’utente finale.
La maggior parte degli account tecnici sono scoperti usando comandi come grep -Ri supervisor .
Se il firmware contiene elementi come /etc/passwd e /etc/shadow, si possono individuare gli utenti previsti dal sistema.
La prima cosa che molti ricercatori fanno dopo aver estratto un firmware non è lanciare Ghidra, come vedremo più avanti, bensì eseguono semplicemente ricerche come grep -Ri "password" ., grep -Ri "admin" ., grep -Ri "root" ., grep -Ri "supervisor" . e così via.
Può sembrare banale, ma una quantità sorprendente di account tecnici, URL nascosti, credenziali di test e configurazioni dimenticate appaiono proprio attraverso queste ricerche elementari.
Password hardcoded e interfaccia web
Per individuare password hardcoded si utilizzano strumenti di ricerca testuale e analisi statica. In un firmware possono essere presenti chiavi API, credenziali di default, password cifrate o hash. Anche quando non si trovano password in chiaro, la presenza di algoritmi di generazione basati su MAC address o serial number può emergere analizzando script e binari. I ricercatori cercano costanti, stringhe sospette e riferimenti a sistemi di autenticazione: molte vulnerabilità storiche sono state scoperte proprio analizzando il firmware offline, senza nemmeno accendere il router.
La fase successiva consiste nell’analisi dell’interfaccia web. Estratti dal firmware, i file HTML, JavaScript e CGI permettono di capire come funzionano i pannelli amministrativi.
Un ricercatore può in questo caso studiare quali richieste HTTP vengono inviate, quali API richiamate e quali parametri passati al backend. Strumenti come Burp Suite Community Edition, OWASP ZAP o gli Strumenti per gli sviluppatori integrati nel browser permettono di osservare il traffico e mappare tutte le funzionalità disponibili.
Reverse engineering dei binari
Quando il firmware contiene binari proprietari, entra in gioco il reverse engineering: gli strumenti più utilizzati sono Ghidra e IDA Pro. Attraverso la disassemblazione è possibile individuare routine di autenticazione, controlli di accesso, stringhe nascoste, URL interni, percorsi di debug e menu amministrativi non esposti pubblicamente.
I binari più interessanti sono spesso httpd, mini_httpd, boa, lighttpd, cgi. Con Ghidra si possono quindi individuare account nascosti, URL segreti, password hardcoded, token e API interne. Spesso basta esplorare le stringhe presenti nel binario per ottenere indizi fondamentali.
Scoprire la presenza di CVE già note
Una volta identificati i componenti software utilizzati dal router, si confrontano le versioni con le vulnerabilità pubbliche.
Si supponga di aver accertato la presenza di questi elementi: BusyBox 1.31, Dropbear 2019.78, OpenSSL 1.0.2, dnsmasq 2.78. Molti produttori utilizzano software ormai ampiamente superati e vulnerabili: non è quindi infrequente accorgersi che il router sta adoperando componenti esposti da falle di sicurezza ormai da anni!
Analisi della sequenza di avvio
Un’altra tecnica ampiamente impiegata prevede l’analisi della sequenza di avvio del dispositivo. Aprendo il router e accedendo alla scheda madre, si individuano i connettori UART (Universal Asynchronous Receiver-Transmitter), utilizzati per la comunicazione seriale a basso livello. Collegando un economico adattatore USB-TTL è possibile monitorare il bootloader, il componente che avvia il sistema, e seguire il caricamento del kernel Linux. La console seriale fornisce spesso informazioni preziose difficilmente reperibili in altri modi, come nomi degli utenti di sistema, percorsi dei file di configurazione, messaggi diagnostici e parametri utilizzati durante l’avvio.
L’analisi del bootloader è un capitolo a sé. U-Boot, molto diffuso nei router, espone variabili ambientali che possono contenere URL di provisioning, configurazioni di rete, credenziali o riferimenti ai server del produttore. Anche senza modificare nulla, la semplice osservazione del boot può fornire una grande quantità di informazioni utili per comprendere l’architettura del dispositivo.
Emulazione del firmware
Infine, molti ricercatori utilizzano l’emulazione del firmware. Framework come FirmAE e altri ambienti di emulazione consentono di avviare una parte del firmware in una macchina virtuale Linux. Questo permette di osservare il comportamento delle applicazioni web, analizzare il traffico generato e studiare i processi interni senza dover interagire continuamente con l’hardware fisico.
È proprio l’unione di queste tecniche – estrazione del firmware, analisi dei file di configurazione, reverse engineering, studio delle API, osservazione della console seriale ed emulazione – che porta alla scoperta di nuove CVE, account nascosti, password hardcoded e altre debolezze che periodicamente emergono nei router e nei dispositivi IoT.
Un ricercatore raramente trova una vulnerabilità con un singolo strumento: quasi sempre il risultato nasce dall’incrocio di molte fonti di informazione diverse.
Dalla ricerca di CVE note alla scoperta di un account nascosto
È proprio la curiosità del ricercatore che, una volta ricevuto un nuovo router dal provider Internet, lo ha spinto innanzi tutto a verificare lo stato del firmware installato nel dispositivo.
Oltre alla presenza di due vulnerabilità note e ufficialmente catalogate tramite CVE, per le quali non era ancora disponibile alcun aggiornamento correttivo, proprio utilizzando le tecniche illustrate nell’articolo, il tecnico ha approfondito l’analisi individuando un’ulteriore vulnerabilità di tipo command injection. Dopo aver segnalato il problema al produttore secondo le procedure di responsible disclosure (divulgazione responsabile dei dati tecnici legati a nuove vulnerabilità di sicurezza), il ricercatore ha continuato l’attività di analisi in laboratorio per comprendere fino a che punto fosse possibile estendere l’accesso ottenuto.
A questo punto si è poi accorto della presenza dell’account supervisor, dotato di credenziali differenti rispetto agli utenti normalmente accessibili dall’interfaccia amministrativa. Modificando la password associata a tale account e utilizzandolo per l’accesso SSH, ha scoperto che il dispositivo offriva funzionalità e privilegi aggiuntivi non disponibili agli amministratori standard.
La vicenda offre un promemoria utile per amministratori e utenti avanzati: anche dispositivi appena ricevuti dal proprio operatore meritano verifiche approfondite. Il fatto che un router provenga direttamente da provider non garantisce automaticamente un livello di sicurezza elevato. Firmware complessi, servizi di provisioning remoto e codice accumulato nel tempo continuano a generare vulnerabilità che emergono soltanto dopo analisi tecniche dettagliate.