Lo sviluppatore Brad Spengler che lavora per il proggetto Grsecurity, ha recentemente pubblicato un exploit che sfrutta una vulnerabilità nell'interfaccia TUN nel kernel Linux 2.6.30 e 2.6.18, usati in Red Hat Enterprise Linux 5 (RHEL5). Come sappiamo i driver che permettono la creazine di periferiche di rete virtuali vengono chiamati TUN/TAP. Rispetto alle comuni periferiche (ad es. eth0) che sono controllate direttamente dalle schede di rete, i pacchetti spediti da o verso dispositivi TUN/TAP sono spediti da o verso programmi software. TUN è in grado di simulare una periferica di rete di tipo punto-punto e lavora con pacchetti di tipo IP mentre TAP è in grado di simulare un dispositivo Ethernet e logicamente utilizza i frame Ethernet. Questa vulnerabilità permette ad un malintenzionato di ottenere i privilegi di root. Di particolare interesse è il fatto che l'exploit è anche in grado di aggirare le estensioni di sicurezza come 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
In cuore della vulnerabilità, è in particolare l'istruzine if(!Tun) che dovrebbe restituire un errore se TUN è 0 (nullo). Il compilatore praticamente ottimizza il blocco if eliminando il controllo per puntatori nulli, in quanto la variabile è già deferenziata. L'operazione piu` 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. 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 future versioni del kernel saranno compilate utilizzando l'opizione "FNO-eliminare-null in modo che il compilatore non elimina i controlli per puntatori nulli.
Exploit: http://www.grsecurity.net/~spender/cheddar_bay.tgz
Nessun commento:
Posta un commento