Nuovo bug del kernel Linux: netfilter consente di fare privilege escalation

0

Non è decisamente un buon periodo per i team responsabili della sicurezza dei sistemi. E’ di pochi giorni fa la segnalazione di un problema all’interno del codice del kernel Linux che permette escaping dei container e persino una privilege escalation completa su tutti i sistemi Linux con le estensioni netfilter abilitate.

Dietro qualsiasi sistema high-level di firewalling, che sia iptables, nftables, firewalld o ufw c’è netfilter, che in kernel-space gestisce l’accesso allo stack di rete. Ed è proprio in kernel-space che è presente il bug, tra i più classici della programmazione C: un incremento di index di riferimento nell’accesso ad un array, senza il controllo della dimensione dell’array stesso. E’ quindi possibile, nel caso di accesso fuori dai limiti, di sfruttare l’overflow per far eseguire, completamente in kernel-mode, del codice a nostro piacimento, chiaramente con privilegi elevati: ad esempio, una shell.

Il problema nasce dalle funzionalità di hardware offload offerte da netfilter nelle sue più recenti incarnazioni – difatti, data la quantità di banda disponibile nei sistemi di networking più moderni, è necessario effettuare packet processing con un certo livello di performance, che andrebbe quindi a occupare eccessivamente i cicli di CPU. Esistono delle soluzioni come quella proposta da SolidRun, macchiatobin, che presentano accelerazioni hardware di packet processing e che diventano quindi ideali per gestire carichi di rete elevati. Per sfruttare però queste estensioni hardware è necessario implementare l’offloading a livello di kernel, ed è qui che entra in gioco netfilter – ed il nostro bug. E’ importante sottolineare che anche se l’hardware su cui gira netfilter non abbia alcuna funzionalità di offloading, il bug sia comunque presente.

Il CVE ha ottenuto un punteggio di 7.8, classificato come alto. Permette ad un qualsiasi utente locale di avere accesso a segmenti di memoria al di fuori dello stack – che in un contesto user-space porterebbe ad un segmentation fault, con conseguenze drammatiche per binari eseguiti con suid bit o tramite sudo, mentre in kernel-space può portare ad un crash di sistema o, come detto, ad una privilege escalation. Tutte le versioni del kernel dalla 5.4 fino alla 5.6.10 sono impattate.

Il gruppo di sviluppo di netfilter ha già prodotto una patch per mitigare il problema, ma purtroppo le maggiori distribuzioni non hanno ancora prodotto un update di sicurezza. Mentre aspettiamo, è possibile mitigare il problema sulle macchine RHEL in questo modo:

# echo 0 > /proc/sys/user/max_user_namespaces
# sysctl --system

Mentre per le Debian e Ubuntu, procedere così:

# sysctl kernel.unprivileged_userns_clone=0

Ricordatevi ovviamente di rendere effettive le modifiche al reboot creando i corrispondenti file di configurazione in /etc/sysctl.d.

Sostenitore di lunga data dell’Open Source, Sysadmin ma anche programmatore, mi appassiona qualsiasi cosa nell’IT che possa permettere un’espressione di creatività. Nostalgico della filosofia dei tempi andati, ma incuriosito dalle potenzialità dei paradigmi moderni.