Vulnerabilità nel kernel Linux che colpisce il protocollo di rete CAN BCM

È stata identificata una vulnerabilità nel kernel Linux (CVE-2021-3609) che consente a un utente locale di elevare i propri privilegi nel sistema. Il problema è causato da una condizione di competizione nell'implementazione del protocollo CAN BCM e si manifesta in versioni del kernel Linux dalla 2.6.25 alla 5.13-rc6. Nei vari distribuzioni, il problema rimane irrisolto (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).

Il ricercatore che ha scoperto la vulnerabilità è riuscito a preparare un exploit per ottenere diritti di root su sistemi con kernel Linux 5.4 e versioni successive; è stata dimostrata la possibilità di eseguire un attacco con successo su Ubuntu 20.04.02 LTS. Non si esclude la possibilità di adattare l'exploit per funzionare con kernel più vecchi (nel kernel 5.4 il codice CAN BCM (net/can/bcm.c) è stato convertito da hrtimer_tasklet a HRTIMER_MODE_SOFT).

Il protocollo CAN BCM consente di registrare un proprio gestore di messaggi in arrivo tramite il bus CAN (controller area network) e di associarlo a un determinato socket di rete. Quando arriva un messaggio in ingresso, viene chiamata la funzione bcm_rx_handler(). L'attaccante può sfruttare la condizione di competizione e ottenere la chiusura del socket di rete contemporaneamente all'esecuzione di bcm_rx_handler(). Alla chiusura del socket, viene chiamata la funzione bcm_release(), che libera la memoria allocata per le strutture bcm_op e bcm_sock, che continuano ad essere utilizzate in un gestore bcm_rx_handler() ancora in esecuzione. Si verifica così una situazione che porta all'accesso a un blocco di memoria già liberato (use-after-free).

L'attacco consiste nell'aprire due socket CAN BCM e associarli all'interfaccia vcan. Nel primo socket viene effettuata una chiamata sendmsg() con il flag RX_SETUP per configurare il gestore dei messaggi CAN in arrivo, mentre nel secondo socket viene effettuata una chiamata sendmsg() per inviare un messaggio al primo socket. Dopo che il messaggio è stato ricevuto, viene attivata la chiamata bcm_rx_handler(), e l'attaccante sceglie il momento giusto per chiudere il primo socket, il che porta all'esecuzione di bcm_release() e al rilascio delle strutture bcm_op e bcm_sock, sebbene l'esecuzione di bcm_rx_handler() non sia ancora terminata.

Attraverso operazioni sui contenuti di bcm_sock, l'attaccante può sostituire il puntatore alla funzione sk->sk_data_ready(sk), dirottare l'esecuzione e, con tecniche di programmazione orientata al ritorno (ROP - Return-Oriented Programming), organizzare la scrittura del parametro modprobe_path e far eseguire il proprio codice con diritti di root. Utilizzando la tecnica ROP, l'attaccante non cerca di posizionare il proprio codice in memoria, ma opera su frammenti di istruzioni di macchina già presenti nelle librerie caricate, che terminano con l'istruzione di ritorno (di solito, sono le conclusioni delle funzioni di libreria). Il funzionamento dell'exploit si riduce a costruire una catena di chiamate a tali blocchi (

Vulnerabilità nel kernel Linux che colpisce il protocollo di rete CAN BCM

Per l'attacco è necessaria l'accessibilità per creare socket CAN e un'interfaccia di rete vcan configurata. I privilegi necessari per eseguire l'attacco possono essere ottenuti da un utente non privilegiato all'interno di container creati in sistemi con supporto attivato per gli spazi dei nomi degli identificatori utente (user namespaces). Ad esempio, i nomi di utenti sono abilitati di default su Ubuntu e Fedora, ma non attivati su Debian e RHEL.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster