Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2019-11932 — Informe técnico y código de exploit para CVE-2019-11932, una vulnerabilidad de doble liberación en WhatsApp para Android que conduce a la ejecución remota de código mediante un archivo GIF manipulado. | Kitploit
Herramientas/GitHubGitHub/infiniteloopers/cve-2019-11932
Seguridad AndroidAnálisis de VulnerabilidadesExplotaciónSeguridad MóvilAprendizaje y EducaciónExplotación de Binarios
GitHubinfiniteloopers/cve-2019-11932

CVE-2019-11932

Informe técnico y código de exploit para CVE-2019-11932, una vulnerabilidad de doble liberación en WhatsApp para Android que conduce a la ejecución remota de código mediante un archivo GIF manipulado.

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
4210hace 6 añosAún no revisado

CVE-2019-11932

Cómo un fallo de doble liberación en WhatsApp se convierte en RCE

Voy a compartir una vulnerabilidad de doble liberación que descubrí en WhatsApp para Android, y cómo la convertí en un RCE. Informé de esto a Facebook. Facebook lo reconoció y lo parcheó oficialmente en la versión 2.19.244 de WhatsApp. Facebook ayudó a reservar CVE-2019-11932 para este problema.

Usuarios de WhatsApp, por favor actualicen a la última versión de WhatsApp (2.19.244 o superior) para mantenerse a salvo de este fallo.

Los pasos son los siguientes:

0:16 El atacante envía un archivo GIF al usuario a través de cualquier canal

Una de ellas podría ser como Documento a través de WhatsApp (es decir, presionando el botón del clip y eligiendo Documento para enviar el GIF corrupto). Si el atacante está en la lista de contactos del usuario (es decir, es un amigo), el GIF corrupto se descarga automáticamente sin ninguna interacción del usuario.

0:24 El usuario quiere enviar un archivo multimedia a cualquiera de sus amigos de WhatsApp. Entonces presiona el botón del clip y abre la Galería de WhatsApp para elegir un archivo multimedia que enviar a su amigo.

Tenga en cuenta que el usuario no tiene que enviar nada, porque con solo abrir la Galería de WhatsApp se desencadena el fallo. No es necesario tocar nada más después de presionar la Galería de WhatsApp.

0:30 Como WhatsApp muestra vistas previas de cada archivo multimedia (incluido el GIF recibido), se desencadenará el fallo de doble liberación y nuestro exploit de RCE.

Vulnerabilidad de doble liberación en DDGifSlurp en decoding.c en libpl_droidsonroids_gif

Cuando un usuario de WhatsApp abre la vista de Galería en WhatsApp para enviar un archivo multimedia, WhatsApp lo parsea con una biblioteca nativa llamada libpl_droidsonroids_gif.so para generar la vista previa del archivo GIF. libpl_droidsonroids_gif.so es una biblioteca de código abierto cuyo código fuente está disponible en https://github.com/koral–/android-gif-drawable/tree/dev/android-gif-drawable/src/main/c.

Un archivo GIF contiene múltiples fotogramas codificados. Para almacenar los fotogramas decodificados, se utiliza un búfer llamado rasterBits. Si todos los fotogramas tienen el mismo tamaño, rasterBits se reutiliza para almacenar los fotogramas decodificados sin reasignación. Sin embargo, rasterBits se reasignaría si se cumple una de las tres condiciones siguientes:

width * height > originalWidth * originalHeight

width - originalWidth > 0

height - originalHeight > 0

La reasignación es una combinación de free y malloc. Si el tamaño de la reasignación es 0, simplemente es un free. Supongamos que tenemos un archivo GIF que contiene 3 fotogramas con tamaños de 100, 0 y 0.

Después de la primera reasignación, tenemos el búfer info->rasterBits de tamaño 100.

En la segunda reasignación de 0, el búfer info->rasterBits se libera.

En la tercera reasignación de 0, info->rasterBits se libera de nuevo.

Esto da como resultado una vulnerabilidad de doble liberación. El punto de activación se puede encontrar en decoding.c:

int_fast32_t widthOverflow = gifFilePtr->Image.Width - info->originalWidth; int_fast32_t heightOverflow = gifFilePtr->Image.Height - info->originalHeight; const uint_fast32_t newRasterSize = gifFilePtr->Image.Width * gifFilePtr->Image.Height; if (newRasterSize > info->rasterSize || widthOverflow > 0 || heightOverflow > 0) { void *tmpRasterBits = reallocarray(info->rasterBits, newRasterSize, <<-- double-free here sizeof(GifPixelType)); if (tmpRasterBits == NULL) { gifFilePtr->Error = D_GIF_ERR_NOT_ENOUGH_MEM; break; } info->rasterBits = tmpRasterBits; info->rasterSize = newRasterSize; }

En Android, una doble liberación de una memoria de tamaño N hace que dos asignaciones de memoria posteriores de tamaño N devuelvan la misma dirección.

(lldb) expr int $foo = (int) malloc(112) (lldb) p/x $foo (int) $14 = 0xd379b250

(lldb) p (int)free($foo) (int) $15 = 0

(lldb) p (int)free($foo) (int) $16 = 0

(lldb) p/x (int)malloc(12) (int) $17 = 0xd200c350

(lldb) p/x (int)malloc(96) (int) $18 = 0xe272afc0

(lldb) p/x (int)malloc(180) (int) $19 = 0xd37c30c0

(lldb) p/x (int)malloc(112) (int) $20 = 0xd379b250

(lldb) p/x (int)malloc(112) (int) $21 = 0xd379b250

Cómo un fallo de doble liberación en WhatsApp se convierte en RCE 14 minutos de lectura EN ESTA PÁGINA DEMO VULNERABILIDAD DE DOBLE LIBERACIÓN EN DDGIFSLURP EN DECODING.C EN LIBPL_DROIDSONROIDS_GIF CONTROL DEL REGISTRO PC LIDIAR CON ASLR Y W^X UNIENDO TODO VERSIONES AFECTADAS VECTORES DE ATAQUE In this blog post, I’m going to share about a double-free vulnerability that I discovered in WhatsApp for Android, and how I turned it into an RCE. I informed this to Facebook. Facebook acknowledged and patched it officially in WhatsApp version 2.19.244. Facebook helped to reserve CVE-2019-11932 for this issue.

WhatsApp users, please do update to latest WhatsApp version (2.19.244 or above) to stay safe from this bug.

Demo https://drive.google.com/file/d/1T-v5XG8yQuiPojeMpOAG6UGr2TYpocIj/view

Google Drive link to download if the above link is not accessible https://drive.google.com/open?id=1X9nBlf5oj5ef2UoYGOfusjxAiow8nKEK

Los pasos son los siguientes:

0:16 El atacante envía un archivo GIF al usuario a través de cualquier canal Una de ellas podría ser como Documento a través de WhatsApp (es decir, presionando el botón del clip y eligiendo Documento para enviar el GIF corrupto). Si el atacante está en la lista de contactos del usuario (es decir, es un amigo), el GIF corrupto se descarga automáticamente sin ninguna interacción del usuario. 0:24 El usuario quiere enviar un archivo multimedia a cualquiera de sus amigos de WhatsApp. Entonces presiona el botón del clip y abre la Galería de WhatsApp para elegir un archivo multimedia que enviar a su amigo. Tenga en cuenta que el usuario no tiene que enviar nada, porque con solo abrir la Galería de WhatsApp se desencadena el fallo. No es necesario tocar nada más después de presionar la Galería de WhatsApp. 0:30 Como WhatsApp muestra vistas previas de cada archivo multimedia (incluido el GIF recibido), se desencadenará el fallo de doble liberación y nuestro exploit de RCE. Vulnerabilidad de doble liberación en DDGifSlurp en decoding.c en libpl_droidsonroids_gif Cuando un usuario de WhatsApp abre la vista de Galería en WhatsApp para enviar un archivo multimedia, WhatsApp lo parsea con una biblioteca nativa llamada libpl_droidsonroids_gif.so para generar la vista previa del archivo GIF. libpl_droidsonroids_gif.so es una biblioteca de código abierto cuyo código fuente está disponible en https://github.com/koral–/android-gif-drawable/tree/dev/android-gif-drawable/src/main/c.

Un archivo GIF contiene múltiples fotogramas codificados. Para almacenar los fotogramas decodificados, se utiliza un búfer llamado rasterBits. Si todos los fotogramas tienen el mismo tamaño, rasterBits se reutiliza para almacenar los fotogramas decodificados sin reasignación. Sin embargo, rasterBits se reasignaría si se cumple una de las tres condiciones siguientes:

width * height > originalWidth * originalHeight

width - originalWidth > 0

height - originalHeight > 0

La reasignación es una combinación de free y malloc. Si el tamaño de la reasignación es 0, simplemente es un free. Supongamos que tenemos un archivo GIF que contiene 3 fotogramas con tamaños de 100, 0 y 0.

Después de la primera reasignación, tenemos el búfer info->rasterBits de tamaño 100.

En la segunda reasignación de 0, el búfer info->rasterBits se libera.

En la tercera reasignación de 0, info->rasterBits se libera de nuevo.

Esto da como resultado una vulnerabilidad de doble liberación. El punto de activación se puede encontrar en decoding.c:

Descargar herramienta