Milioni di popolari router prodotti, tra gli altri, da Netgear, TP-Link, DLink e Western Digital, sono affetti da una grave vulnerabilità di esecuzione di codice remoto (RCE, Remote Code Execution) tracciata come CVE-2021-45388 e identificata nel modulo NetUSB del kernel di KCodes.
Il firmware KCodes, basato su Linux, è un progetto su cui stanno lavorando i diversi produttori hardware con lo scopo di integrare la funzionalità USB over IP in dispositivi di rete inclusi router, stampanti e unità di archiviazione.
Il driver NetUSB è appunto il “connettore” virtuale per hardware USB che consente di poter collegare una gamma di diversi dispositivi USB direttamente al router e quindi accedervi in remoto da alcuni, molti o tutti gli altri dispositivi sulla rete. Un modo semplice per condividere con la propria rete una risorsa USB che i singoli utenti vedranno come una normale unità di archiviazione fisicamente collegata ai loro sistemi locali. Nella pagina di presentazione del progetto si legge che “oggi circa il 20% dei dispositivi di rete al mondo incapsula di fabbrica una soluzione KCodes”.
Indice degli argomenti
I dettagli della vulnerabilità in NetUSB
La vulnerabilità è stata scoperta dall’esperto di sicurezza informatica Max Van Amerongen di SentinelOne mentre esaminava un router Netgear. L’esperto ha scoperto che il modulo NetUSB del kernel non valutava correttamente la dimensione dei pacchetti recuperati dalle connessioni remote, consentendo una situazione di overflow del buffer di archiviazione dinamico.
Un attacco funzionale, secondo Amerongen, potrebbe portare all’esecuzione di codice remoto nel kernel anche se lo sviluppo di un payload dannoso per causare l’errore sarebbe difficile a causa dei limiti di codifica.
Il centro del problema sta nella gestione dell’allocazione di memoria del kernel, durante l’elaborazione del traffico in entrata nel driver KCodes, nel cui codice appunto è stata trovata l’anomala allocazione di memoria che viene effettuata in base alla dimensione di memoria richiesta dall’utente per quel “pacchetto dati”, più altri 17 byte da utilizzarsi per l’elaborazione.
Sono proprio questi 17 byte a creare il problema. Se infatti l’utente richiedesse un’allocazione di memoria enormemente più grande, la funzione kernel_alloc() quasi certamente fallirà per superamento della RAM. Ma se un utente malintenzionato richiedesse 232 -1 byte di dati (0xFFFFFFFF), riceverebbe erroneamente un buffer di soli 16 byte, che potrebbero quindi inviare tutti i dati desiderati, sia che fossero 100 byte, 1000 byte o, in effetti, qualsiasi numero fino a 0xFFFFFFFF byte. Qualsiasi byte dal diciassettesimo in poi causerebbe, invece, un overflow del buffer.
Le soluzioni di mitigazione
Questa ricerca è stata inviata direttamente a KCodes nel settembre 2021, poiché gli specialisti ritenevano necessario comunicare i dettagli della vulnerabilità alla fonte del software prima di contattare i produttori di dispositivi tecnici che si affidano a questo progetto. Da metà novembre in poi sono stati rilasciati gli aggiornamenti ufficiali del firmware. I vari produttori di router, invece, stanno per completare i loro aggiornamenti.
Al momento, comunque, non sono stati ancora scoperti tentativi di sfruttamento attivo o la presenza operativa di una versione di malware da utilizzare in un attacco.
Gli stessi ricercatori suggeriscono come unica, sicura e migliore mitigazione, la ricerca e l’applicazione di patch di aggiornamento firmware del router.
Allo stesso tempo, è importante effettuare una corretta gestione delle porte sul router (quelle che aprono dall’esterno) per essere sicuri dei privilegi assegnati e che sia realmente indispensabile tenerle aperte: non bisogna mai tenere il traffico Internet esterno instradato su porte che non si utilizzano e che non siano davvero realmente necessarie.
Facciamo presente, infine, che questo studio è stato divulgato solamente dopo che SentinelOne ha avuto la certezza della presenza di una patch da parte di KCodes, poi diffusa a tutti i produttori correlati a questo modulo kernel.