Qualche giorno fa è uscita la notizia che è stata identificata una vulnerabilità in Netfilter (un sottosistema del kernel Linux utilizzato per filtrare e modificare i pacchetti di rete), che consente a un utente locale di ottenere i privilegi di root in un sistemaanche mentre si trova in un contenitore isolato.
La vulnerabilità CVE-2021-22555 è un problema che esiste dal kernel 2.6.19, lanciato 15 anni fa ed è causato da un bug nei driver IPT_SO_SET_REPLACE e IP6T_SO_SET_REPLACE, che provoca un overflow del buffer durante l'invio di parametri appositamente decorati tramite la chiamata setsockopt in modalità compat.
Forse molti a questo punto si chiederanno come sia possibile che una falla nel kernel Linux possa passare inosservata per così tanto tempo e la risposta è che anche se la falla era presente da Linux 2.6.19, la vulnerabilità è stata trovata attraverso il codice audit, anche se il codice C non era riproducibile, quindi non poteva essere sfruttato perché in quel momento non erano state trovate le risorse necessarie per aumentare i privilegi.
Ad esempio, il supporto per gli spazi dei nomi utente non privilegiati è nel kernel 3.8. Inoltre, alcune distribuzioni hanno una patch che aggiunge sysctl per disabilitare gli spazi dei nomi utente senza privilegi.
In circostanze normali, solo l'utente root può chiamare compat_setsockopt(), Ma i permessi necessari eseguire un attacco possono essere ottenuti anche da un utente non privilegiato sui sistemi con gli spazi dei nomi utente abilitati.
CVE-2021-22555 è una vulnerabilità di 15 anni fuori dallo stack di scrittura in Linux Netfilter che è abbastanza potente da aggirare tutte le moderne misure di sicurezza e ottenere l'esecuzione del codice del kernel.
Come tale, viene descritto che un utente locale può creare un contenitore con un utente root separato e sfruttare la vulnerabilità da lìio. Ad esempio, gli "spazi dei nomi utente" sono inclusi per impostazione predefinita in Ubuntu e Fedora, ma non in Debian e RHEL.
Questa vulnerabilità può essere sfruttata sovrascrivendo parzialmente il
m_list->nextpuntatoremsg_msgstruttura e il raggiungimento di un libero dopo l'uso. Questo è abbastanza potente da far funzionare il codice del kernel bypassando KASLR, SMAP e SMEP.
Inoltre, sorge un problema nella funzione xt_compat_target_from_user () a causa di un calcolo errato della dimensione della memoria durante il salvataggio delle strutture del kernel dopo la conversione dalla rappresentazione a 32 bit a quella a 64 bit.
Come tale, è menzionato che l'errore consente di scrivere quattro byte "zero" in qualsiasi posizione al di fuori del buffer assegnato, limitato dall'offset 0x4C. Per questo motivo si dice che questa caratteristica si è rivelata sufficiente per creare un exploit che permette di ottenere i diritti di root: cancellando il puntatore m_list-> next nella struttura msg_msg sono state create le condizioni per accedere ai dati dopo aver liberato memoria (use-after-free), che è stata poi utilizzata per ottenere informazioni su indirizzi e modifiche ad altre strutture manipolando la chiamata di sistema msgsnd().
Per quanto riguarda il report degli errori, come ogni vulnerabilità rilevata, questo comporta un processo e il report che è stato fatto agli sviluppatori del kernel ad aprile, con il quale è stato poi corretto in pochi giorni e la patch che è inclusa in tutte le distribuzioni supportate, in modo che le informazioni sul bug possono essere rilasciate in seguito.
I progetti Debian, Arch Linux e Fedora hanno già generato aggiornamenti dei pacchetti. A partire da Ubuntu, gli aggiornamenti di RHEL e SUSE sono in lavorazione. Perché l'errore è grave, sfruttabile in pratica e permette di fuoriuscire dal contenitore, Google ha stimato la sua scoperta a $ 10,000 e ha raddoppiato la ricompensa al ricercatore che ha identificato la vulnerabilità e per identificare un metodo per evitare di isolare i contenitori Kubernetes sul cluster kCTF.
Per il test, è stato preparato un prototipo funzionante di un exploit che aggira i meccanismi di protezione KASLR, SMAP e SMEP.
Infine se sei interessato a saperne di più, puoi controllare i dettagli nel seguente link