SSL Pinning bypass con frida.
En este artículo, explicaremos cómo puedes hacer el bypass de SSL pinning, que nos permite interceptar las peticiones de las aplicaciones con burpsuite/caido
Frida es un kit de herramientas open source que nos permite inyectar código de JavaScript en Apps móviles para interceptar las peticiones y su comportamiento en tiempo real. Básicamente nos permite hacerle pentest, o hacerle un análisis dinámico.
Requisitos previos:
- Android x86 rooteado
- Burpsuite/caido con el certificado en el android (referencia: https://redfoxsec.com/blog/installing-burp-suites-ca-as-a-system-certificate-on-android)
- python instalado en la maquina anfitrión
-
adb
Setup
Mi setup actual es el siguiente: Android Studio con Pixel 3 y la API 24
Android Studio con emulador Android 7.0 x86 (API 24)
Requisitos para instalar frida
Si tenemos python instalado en el path nos debería salir el siguiente output:
C:\Users\aleja>py --version
Python 3.11.9
luego instalamos las siguientes librerías con pip:
pip install frida
pip install frida-tools
pip install objection
para verificar que frida se instalo, ponemos el siguiente comando(Android tiene que estar vinculado):
# nos saldrán todas las apps que están ejecutándose
C:\Users\aleja>frida-ps -U
PID Name
----- ----------------------------------------------
9963 0000-0000
14938 Chrome
16961 Clock
15546 ElJavillo
10215 Google App
10988 Maps
16092 YouTube
2606 adbd
9462 audioserver
9463 cameraserver
9751 com.android.inputmethod.latin
10281 com.android.launcher3
9915 com.android.phone
Ahora nos iremos al github de frida, e instalaremos frida-server la version x86: https://github.com/frida/frida/releases/download/17.3.2/frida-server-17.3.2-android-x86.xz Descomprimimos el .xz, cambiamos nombre a frida y pasamos el archivo frida a nuestro android en la ruta /data/local/tmp:
adb push frida /data/local/tmp
frida: 1 file pushed, 0 skipped. 88.7 MB/s (53074896 bytes in 0.571s)
Nos dirigimos al directorio de data y verificamos que existe el archivo frida:
generic_x86:/ # cd /data/local/tmp/
generic_x86:/data/local/tmp # ls -la
total 103704
drwxrwx--x 4 shell shell 4096 2025-10-05 21:42 .
drwxr-x--x 3 root root 4096 2025-09-26 10:01 ..
drwxr-xr-x 2 shell shell 4096 2025-10-02 08:56 .studio
-rw-rw-rw- 1 shell shell 1330 2025-09-26 10:21 9a5ba575.0
-rwxr-xr-x 1 shell shell 53074896 2025-10-01 19:36 frida
le damos permisos de ejecución:
generic_x86:/data/local/tmp # chmod 755 frida
Ahora vamos al siguiente link:
https://codeshare.frida.re/@akabe1/frida-multiple-unpinning
y copiamos TODO el contenido, abrimos un notepad lo pegamos y lo guardamos como frida_multiple_unpinning.js
Guardando el script frida_multiple_unpinning.js
Burpsuite
activamos el proxy con el puerto 8080
adb shell settings put global http_proxy <IP-Android>:8080
en mi caso seria:
adb shell settings put global http_proxy 10.0.2.2:8080
Instalar nuestra app objetivo
Si tenemos un android rooteado en AndroidStudio, tendremos que tener un Android Puller básicamente seria instalar otro android x86 sin rootear: 1.Create virtual device
Creación de un dispositivo virtual secundario (no rooteado) — Android Puller
2.Imagen del sistema
Selección de imagen de sistema (Oreo/x86)
Iniciamos sesión en un playstore y descargamos algún app. evitar instalar apps bancarias.
Luego de haber instalado, vamos a listar los paquetes con adb shell list packages
nos saldrán todos los paquetes de nuestras apps, buscaremos la que instalamos, en este caso fue elJavillo.
para una búsqueda mas fácil, podemos buscarlo por su nombre:
adb shell pm list packages | findstr eljavillo
package:comsisfarma.eljavillo
con esto vamos a listar todas las rutas de los APK instaladas:
adb shell pm path comsisfarma.eljavillo
nos salen todas las apks
package:/data/app/comsisfarma.eljavillo-1/base.apk
package:/data/app/comsisfarma.eljavillo-1/split_config.en.apk
package:/data/app/comsisfarma.eljavillo-1/split_config.x86.apk
package:/data/app/comsisfarma.eljavillo-1/split_config.xxhdpi.apk
vamos a hacer adb pull para pasarlo a nuestro host anfitrión, para luego pasarlo al android rooteado
adb pull /data/app/comsisfarma.eljavillo-1/base.apk "C:\tu\ruta\base.apk"
adb pull /data/app/comsisfarma.eljavillo-1/split_config.x86.apk "C:\tu\ruta\eljavillo_x86.apk"
adb pull /data/app/comsisfarma.eljavillo-1/split_config.en.apk "C:\tu\ruta\eljavillo_en.apk"
adb pull /data/app/comsisfarma.eljavillo-1/split_config.xxhdpi.apk "C:\tu\ruta\split_config.xxhdpi.apk"
Luego de confirmar que tenemos todos los archivos en nuestro directorio preferido:
APKs extraídos en el host para instalación múltiple
en la terminal ponemos:
adb install-multiple eljavillo_base.apk eljavillo_x86.apk eljavillo_xxhdpi.apk eljavillo_en.apk
y verificamos que se instalo en nuestro android rooteado:
Aplicación instalada correctamente en el emulador rooteado
Disclaimer:
Esto es una prueba en un entorno controlado, no hay intenciones de vulnerar la aplicación del javillo.
SSL bypass
Luego de haber descargado nuestra aplicación objetivo, vamos a abrir 2 terminales, una con adb dentro de /data/local/tmp
Ejecución del binario frida en el emulador
y la otra en nuestro host donde tengamos nuestro archivo JavaScript para correr el siguiente comando
frida -U -f comsisfarma.eljavillo -l .\frida_multiple_unpinning.js
-f: nombre del paquete de nuestra app. -l: nombre del archivo .js
Hook inicial con frida y carga del script
esperamos 30s y nos saldrá [+], quiere decir que se hizo el bypass correctamente
Indicador de bypass exitoso tras la espera
si entramos a nuestro android, podemos confirmar que la app del javillo se abrió correctamente
Aplicación objetivo iniciada correctamente
para que el bypass funcione, tenemos que tener nuestra app objetivo cerrada, el script de frida corriendo, si funciona, frida abrirá la app sola con el bypass.
Interception successfully
en burp/caido ponemos intercept on y si enviamos una petición, vemos que nos sale sin problemas.
Intercepción activa de tráfico HTTP(S)
Con esto ya tendríamos nuestro entorno en android x86 listo para hacer pentesting/bug bounty.
Cualquier problema:
Contactarme por correo: snoody@toadsec.io
Referencias
https://github.com/frida/frida
https://redfoxsec.com/blog/installing-burp-suites-ca-as-a-system-certificate-on-android
https://codeshare.frida.re/@akabe1/frida-multiple-unpinning.js