Una vulnerabilità critica, sfruttabile da remoto, è stata scoperta nella shell da riga di comando – meglio conosciuta come Bash – di Linux e Unix.
Rende vulnerabili innumerevoli siti web, server, PC, Mac OS, vari router domestici, e molti altri dispositivi. In questo articolo cercheremo di analizzare gli aspetti tecnici della vulnerabilità Shellshock aka BashBug.
Che cosa è “Shellshock”?
Il bug in questione è una vulnerabilità legata all’esecuzione di codice in modalità remota, o RCE. L’attaccante è in grado di ingannare Bash e “forzarlo” ad eseguire codice arbitrario sulla macchina target.
Shellshock è il nome utilizzato dai media per un bug di sicurezza trovato in Bash, un programma di shell di comando comunemente utilizzato su sistemi Linux e UNIX.
Che cosa è una shell di comando?
Una shell di comando in Linux e UNIX è un programma che consente di eseguirne altri, molto simile al prompt dei comandi in Windows.
È possibile utilizzare Bash in modalità interattiva, digitando i comandi e visualizzando immediatamente i risultati, o come tool di supporto all’esecuzione di una serie di programmi, specificati in un file di testo, chiamato shell script.
Bash è estremamente popolare: è infatti la shell di default di qualsiasi sistema Linux. Potete ottenere una stima del suo utilizzo, osservando le ultime statistiche Netcraft , reative ai server web.
(Per una stima relativa al suo utilizzo, potete osservare le ultime statistiche Netcraft, relative ai server web)
Metà dei server web utilizzano Apache (che generalmente si trova su Linux) e esistono molti altri server in esecuzione su Linux.
Bash può essere utilizzato per funzioni tipicamente amministrative, dalla configurazione di siti web al controllo di software embedded di un dispositivo (es. webcam, smart tv, lavatrici intelligenti). Naturalmente questa funzionalità è, in teoria, destinata ad essere utilizzata da utenti autenticati, con privilegi specifici. In teoria…
Se Bash è pensato per eseguire codice, come può avere un “code execution” bug?
Può sembrare una contraddizione ma Shellshock esiste perché è possibile ingannare Bash ed eseguire un programma quando non dovrebbe farlo.
Il Software Server che trasmette i dati forniti dall’utente a Bash (e agli altri programmi installati) è di solito molto attento ai trucchi noti.
Ad esempio, una riga di comando Bash che contiene un punto e virgola è effettivamente trattato da Bash come se fossero due comandi separati.
Quindi, il comando Bash:
echo Be careful; rm removes files
si trasforma effettivamente in due comandi in sequenza, prima eco e poi rm, che è il comando UNIX per rimuovere o eliminare i file.
Così la linea unica di cui sopra in realtà finisce per fare questo:
rm removes files ← Elimina i file “removes” e “files”
Il punto e virgola trasforma rm in un comando a sé stante, causando così un errore di command injection.
Per questo motivo, l’interprete è attento ai vari caratteri e costruzioni che hanno un significato speciale per Bash: così tutto ciò che sembra pericoloso viene bloccato, o modificato per renderlo sicuro.
Come può essere sfruttato?
Il problema è che, a differenza dell’esempio riguardante il punto e virgola, nessuno sapeva dell’esistenza di questo problema.
Il bug Shellshock si verifica in una parte di Bash, che consente di definire le funzioni, ovvero una sequenza di comandi che vengono “salvati” per un successivo utilizzo.
In teoria definire una funzione, anche se pericolosa o dannosa, è innocuo a condizione che non venga effettivamente utilizzata.
A causa del bug Shellshock, tuttavia, Bash può essere ingannato nell’esecuzione di comandi specificati in una definizione di funzione.
Mentre la vulnerabilità interessa potenzialmente qualsiasi computer con Bash, essa può essere sfruttata solo da un attaccante remoto in determinate circostanze. Un utente malintenzionato deve forzare un’applicazione ad inviare una variabile d’ambiente dannosa a Bash.
La più probabile via di attacco è attraverso i server Web che utilizzano CGI (Common Gateway Interface), un sistema ampiamente utilizzato per la generazione di contenuti Web dinamici. Un utente malintenzionato può potenzialmente utilizzare CGI per inviare una variabile di ambiente valida per un server Web vulnerabile. Poiché il server utilizza Bash per interpretarla, sarà anche eseguito qualsiasi comando dannoso inserito in essa.
Oltre ai server Web, altri dispositivi vulnerabili sono i router basati su Linux che dispongono di un’interfaccia Web che utilizza CGI, Internet of Things (IoT) e i dispositivi embedded, che possono essere vulnerabili se hanno in esecuzione Bash.
I dispositivi che eseguono BusyBox non sono vulnerabili al BashBug.
Quali sono le potenziali ramificazioni dell’attacco?
Il potenziale è enorme: infatti “ottenere una shell” su un computer è da sempre una vittoria importante per un attaccante a causa del controllo che viene offerto oltre l’ambiente target. Alcuni esempi sono l’accesso ai dati interni, la riconfigurazione degli ambienti, l’esecuzione di codice malevolo, il numero è quasi illimitato ed è anche facilmente automatizzabile. Esistono già molti esempi di exploit funzionanti.
Uno degli attacchi più evidenti è il dumping di file interni , file di password e file di configurazione. Lo stesso approccio potrebbe essere applicato per scrivere file sul sistema.
Questo è potenzialmente il più semplice vettore di web defacement mai visto, nonché un modo molto semplice per la distribuzione di malware.
Quali versioni di Bash sono interessate?
Tutte, ovvero circa 25 anni di versioni Bash.
Come controllo se sono vulnerabile?
Per determinare se un sistema Linux o Unix è vulnerabile, eseguite le seguenti righe di comando nella shell:
env X = “() {:;}; echo Shellshock” `che bash` c” echo completato “
Se vedete le parole “Shellshock” nell’output allora siete a rischio.
Come posso risolvere questo problema?
Se il vostro sistema è vulnerabile a bashbug, vi consiglio vivamente di aggiornare il pacchetto software Bash il più presto possibile.
Potrebbe interessarti: