Vulnerabilità nel sottosistema del kernel Linux Netfilter

È stata identificata una vulnerabilità (CVE-2021-22555) in Netfilter, un sottosistema del kernel Linux utilizzato per filtrare e modificare i pacchetti di rete, che consente a un utente locale di ottenere privilegi di root sul sistema, anche mentre si trova in un contenitore isolato. È stato preparato per essere testato un prototipo funzionante di un exploit che aggira i meccanismi di protezione KASLR, SMAP e SMEP. Il ricercatore che ha scoperto la vulnerabilità ha ricevuto una ricompensa di 20 dollari da Google per aver identificato un metodo per aggirare l'isolamento dei contenitori Kubernetes in un cluster kCTF.

Il problema esiste dal kernel 2.6.19, rilasciato 15 anni fa, ed è causato da un bug nei gestori IPT_SO_SET_REPLACE e IP6T_SO_SET_REPLACE che causa un overflow del buffer quando si inviano parametri appositamente formattati tramite una chiamata setsockopt in modalità compat. In circostanze normali, solo l'utente root può effettuare una chiamata a compat_setsockopt(), ma i privilegi richiesti per eseguire l'attacco possono essere ottenuti anche da un utente non privilegiato su sistemi con supporto per gli spazi dei nomi utente abilitato.

Un utente può creare un contenitore con un utente root separato e sfruttare la vulnerabilità da lì. Ad esempio, "spazi dei nomi utente" è abilitato per impostazione predefinita su Ubuntu e Fedora, ma non abilitato su Debian e RHEL. La patch che risolve la vulnerabilità è stata adottata nel kernel Linux il 13 aprile. Gli aggiornamenti dei pacchetti sono già stati generati dai progetti Debian, Arch Linux e Fedora. In Ubuntu, RHEL e SUSE gli aggiornamenti sono in preparazione.

Il problema si verifica nella funzione xt_compat_target_from_user() a causa del calcolo errato della dimensione della memoria durante il salvataggio delle strutture del kernel dopo la conversione dalla rappresentazione a 32 bit a 64 bit. Il bug consente la scrittura di quattro byte null in qualsiasi posizione oltre il buffer allocato delimitato dall'offset 0x4C. Questa funzionalità si è rivelata sufficiente per creare un exploit che consentisse di ottenere i diritti di root: cancellando il puntatore m_list->next nella struttura msg_msg, sono state create le condizioni per l'accesso ai dati dopo aver liberato la memoria (use-after-free), che è stato poi utilizzato per ottenere informazioni sugli indirizzi e sulle modifiche ad altre strutture attraverso la manipolazione della chiamata di sistema msgsnd().

Fonte: opennet.ru

Aggiungi un commento