
Programma ideale per rubare tutte le informazioni da un dispositivo da remoto tramite l'applicazione AirDroid. [CVE-2019-9599] (https://www.exploit-db.com/exploits/46337)
Video PoC dell'exploit: https://www.youtube.com/watch?v=0QDM224_6DM
CVE: https://nvd.nist.gov/vuln/detail/CVE-2019-9599
Exploit-db: https://www.exploit-db.com/exploits/46337
AirDroid è uno degli strumenti più noti e utilizzati per controllare da remoto un computer, in particolare tramite il browser.
Per controllare e gestire il dispositivo che ospita il servizio, è necessaria una fase preliminare di accettazione da parte del cliente, dove appare un 'Message Box' come quello mostrato di seguito:
Una volta accettata la connessione, il responsabile della sessione può gestire il dispositivo dal browser, potendo svolgere tra le altre le seguenti attività:
Nonostante non abbia condiviso il PoC che si occupa di bypassare la validazione lato client, ho condiviso alcuni script di utilità per l'estrazione di informazioni privilegiate una volta accettata la connessione.
Allo stesso modo, ho condiviso gli script 'airdroid_dos.sh' e 'airdroid_fast_dos.sh', che si occupano di eseguire un'azione di tipo 'Remote DoS Application & System Crash', tramite i quali si riesce a far corrompere il servizio da remoto, oltre a congelare il dispositivo mobile riempiendo tutta la memoria fino a renderlo inoperativo:
Iniziamo eseguendo lo script 'AirDroidPwner.py', dove sarà necessario fornire la nostra KEY di Shodan per trovare un bel po' di dispositivi con il servizio AirDroid in esecuzione:
# Usa la tua API KEY di Shodan
SHODAN_API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
api = shodan.Shodan(SHODAN_API_KEY)
L'esecuzione avviene nel seguente modo:
python AirDroidPwner.py
Come si può vedere, molto complesso. Dopo la sua esecuzione, tramite l'API di Shodan in una prima istanza verranno memorizzate in un array tutti gli IP che Shodan stesso indicizza sulla ricerca effettuata, in questo caso del servizio AirDroid (porta 8888).
Una volta trovati, si procede con un processo di validazione per verificare che gli Host trovati abbiano effettivamente il servizio abilitato, basandosi sul codice di stato restituito dalla risposta lato server dopo una semplice richiesta.
Dopo aver ottenuto il nuovo array con gli elementi corrispondenti agli Host attivi, questi vengono esportati in un file chiamato 'ips'. Attualmente esistono le seguenti modalità operative:
Dopo l'accettazione della connessione (la richiesta viene lanciata contro gli Host e sta al fatto che qualcuno di essi la accetti [Purtroppo, vedrai che molti lo fanno...]), l'identificatore della sessione viene memorizzato nel parametro 7bb, dal quale successivamente vengono gestite le interrogazioni:
def get_identifier(r_json):
identifier_session = r_json["7bb"]
return identifier_session
Nel caso in cui il cliente non accetti la connessione, questi verranno memorizzati in un vettore di connessioni rifiutate per poi avviare un attacco di tipo (L'attaccante può decidere <y/n>):
Dove utilizzando i 'Message Box', tramite un ciclo principale di iterazioni modificabili (per default 10) insieme a sottocicli che eseguono 3.000 richieste in thread sulle vittime, si riesce a riempire la RAM del dispositivo, causando non solo una negazione di servizio remota dell'applicazione ma anche un Remote System Crash, dove il dispositivo rimane completamente inoperativo forzando un riavvio del sistema.
Questa vulnerabilità non colpisce solo l'ultima versione di AirDroid ma anche tutte le precedenti.
Nel caso in cui la vittima accetti la connessione, queste sono le operazioni che attualmente lo strumento ha implementato:
In aggiunta, possiamo anche eseguire gli script 'airdroid_dos.sh' e 'airdroid_fast_dos.sh'. La differenza principale tra i due è che il secondo va direttamente all'attacco, il primo esegue un breve controllo iniziale per vedere se l'Host ha il servizio attivo, ecc. (Lato più commerciale).
Nel caso si voglia gestire l'accesso dal browser web, una volta eseguito lo script 'AirDroidPwner.py' ed esportato l'elenco degli IP nel file 'ips', è possibile eseguire lo script 'web_browser.py' per aprire in un browser tutti i servizi attivi.
Attività: