Exploit kernel Linux (security news)
Brad Spengler noto sviluppatore che lavora al progetto Grsecurity ha recentemente pubblicato un exploit che sfrutta una vulnerabilità nell’interfaccia di rete virtuale di tipo TUN/TAP nel kernel Linux 2.6.30 e 2.6.18, usati in Red Hat Enterprise Linux 5 (RHEL5).
La stessa vulnerabilità permette ad un malintenzionato di ottenere i privilegi di root e la scalata ai permessi. E’ anche stato dimostrato che tale exploit è anche in grado di bypassare il modulo di sicurezza SELinux. Secondo Spengler, la vulnerabilià è stata trovata solo in queste due versioni del kernel. Il problema è causato da una funzione di ottimizzazione del GCC.
Il codice riportato di seguito è il responsabile del problema:
static unsigned int tun_chr_poll(struct file *file, poll_table * wait)
struct sock *sk = tun->sk; // initialize sk with tun->sk
…
if (!tun)
return POLLERR; // if tun is NULL return error
E’ proprio l’istruzione if(!Tun) che se TUN è uguale a 0 (nullo) dovrebbe restituire un errore mentre invece il compilatore ottimizza quest’ultimo blocco eliminando il controllo per puntatori nulli in quanto la variabile è già deferenziata. L’operazione più importante che viene eseguita sui puntatori e quella di dereferenziazione al fine di ottenere accesso all’oggetto puntato. A questo punto, il kernel potrebbe tentare di accedere all”indirizzo 0x00000000 e quindi un utente malintenzionato può cambiare il puntatore ed eseguire uno shellcode.
L’exploit quindi deve essere in grado di aprire il dispositivo /dev/net/tun e utilizzare i moduli caricabili da PulseAudio, che in alcune distribuzioni hanno il bit di SUID attivo che come affermato da Torvalds sembra proprio essere la vera causa del problema e non del kernel stesso in quanto il bit SUID rappresenta già un buco di sicurezza il quale consente all’utente di caricare i propri moduli.
Il codice deve essere in grado deve anche disattivare il “mmap_min_addr” che praticamente limita la quantità di spazio di indirizzamento di un processo.
Le prossimeversioni del kernel saranno compilate utilizzando l’opizione “FNO-eliminare-null” in modo che il compilatore non elimina i controlli per puntatori nulli.
Scarica il codice dell’exploit:
Commenti recenti