Skip to content
KitploitKITPLOIT
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2019-11933 — Corrupción de heap en el selector de medios de WhatsApp | Kitploit
Herramientas/GitHubGitHub/natleoj/cve-2019-11933
Seguridad AndroidForensia de MemoriaAnálisis de VulnerabilidadesExplotaciónSeguridad MóvilExplotación de Binarios
GitHubnatleoj/cve-2019-11933

CVE-2019-11933

Corrupción de heap en el selector de medios de WhatsApp

Ver Repositorio
hace 6 añosAún no revisado

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

CVE-2019-11933

Corrupción de montón en el selector de medios de WhatsApp que afecta a WhatsApp para Android antes de la versión 2.19.291

Antecedentes

Un archivo GIF está dividido en segmentos, marcados por un byte específico:

  • Imagen (0x2C)
    • La sección de imagen describe un solo fotograma en el archivo GIF y contiene información como la altura, el ancho, así como la propia imagen comprimida. Un GIF puede tener múltiples fotogramas y, por lo tanto, múltiples secciones de imagen.
  • Extensión (0x21)
    • La sección de extensión contiene datos que se utilizan para modificar una imagen.
  • Terminación (0x3B)
    • Marca el final del archivo GIF.

Según el código fuente, renderFrame llama a DDGifSlurp para analizar un GIF y a getBitmap para mostrar el GIF. La función asigna un búfer rasterBits, cuyo tamaño se calcula multiplicando el ancho por la altura de la imagen que está procesando en ese momento. Quizá para ahorrar espacio de memoria y tiempo, el mismo búfer rasterBits se utilizará para todos los fotogramas/imágenes del GIF. Por lo tanto, se requiere que el búfer sea capaz de contener la imagen más grande descrita en el archivo. Así, el búfer se reasigna en consecuencia si otra sección de imagen dentro del mismo GIF describe una imagen más grande (requiere más espacio).

Vulnerabilidad

DDGifSlurp analiza el archivo GIF en un bucle, procesando cada imagen/fotograma del archivo, y termina cuando se encuentra el registro de terminación. Cuando DGifGetImageDesc devuelve GIF_ERROR (a), se produce una terminación anticipada (en el caso del switch), lo que hace que se omita el código que reasigna el búfer rasterBits. A continuación se muestra un fragmento de DDGifSlurp:

root@kitploit:~
void DDGifSlurp(GifInfo *info, bool decode, bool exitAfterFrame) {
    ...
    do {
        ...
        switch (RecordType) {
            case IMAGE_DESC_RECORD_TYPE:
             
                if (DGifGetImageDesc(gifFilePtr, isInitialPass) == GIF_ERROR) {   <-- [a]
                    break;
                }
                ...
                if (decode) {
                    ...
                    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, sizeof(GifPixelType));
                        ...
                    }
    }while (RecordType != TERMINATE_RECORD_TYPE);
}

Una imagen GIF con el siguiente formato provocará un fallo:

  • Imagen válida (10 x 10)
  • Imagen más grande (10000 x 10000) con un descriptor de imagen no válido

Etapas que conducen al fallo

  1. Fase de análisis
    1. Analizar la primera imagen (pequeña)
    2. Asignar el búfer rasterBits de tamaño (altura pequeña * ancho pequeño)
    3. Analizar la segunda imagen (grande)
    4. DGifSetupDecompress/DGifGetImageDesc devuelve GIF_ERROR
    5. Omitir la reasignación
  2. Fase de renderizado
    1. Renderizar la primera imagen (éxito)
    2. Renderizar la segunda imagen (OOB)
Descargar herramienta