Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2019-11932 — Resoconto tecnico e codice exploit per CVE-2019-11932, una vulnerabilità di double-free in WhatsApp per Android che porta all'esecuzione di codice remoto tramite un file GIF appositamente modificato. | Kitploit
Strumenti/GitHubGitHub/infiniteloopers/cve-2019-11932
Sicurezza AndroidAnalisi delle VulnerabilitàExploitSicurezza MobileApprendimento e FormazioneBinary Exploitation
GitHubinfiniteloopers/cve-2019-11932

CVE-2019-11932

Resoconto tecnico e codice exploit per CVE-2019-11932, una vulnerabilità di double-free in WhatsApp per Android che porta all'esecuzione di codice remoto tramite un file GIF appositamente modificato.

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
4296 anni faNon ancora revisionato

CVE-2019-11932

Come un bug di double-free in WhatsApp si trasforma in RCE

Condividerò informazioni su una vulnerabilità di double-free che ho scoperto in WhatsApp per Android e su come l'ho trasformata in un RCE. L'ho segnalata a Facebook. Facebook l'ha riconosciuta e corretta ufficialmente nella versione 2.19.244 di WhatsApp. Facebook ha contribuito a riservare CVE-2019-11932 per questo problema.

Utenti di WhatsApp, aggiornate all'ultima versione di WhatsApp (2.19.244 o superiore) per essere al sicuro da questo bug.

I passaggi sono i seguenti:

0:16 L'attaccante invia un file GIF all'utente tramite qualsiasi canale

Uno di questi potrebbe essere come Documento tramite WhatsApp (cioè premendo il pulsante Graffetta e scegliendo Documento per inviare il GIF corrotto) Se l'attaccante è nella rubrica dell'utente (cioè un amico), il GIF corrotto viene scaricato automaticamente senza alcuna interazione da parte dell'utente.

0:24 L'utente vuole inviare un file multimediale a un suo amico su WhatsApp. Quindi preme il pulsante Graffetta e apre la Galleria di WhatsApp per scegliere un file multimediale da inviare al suo amico.

Nota che l'utente non deve inviare nulla perché solo l'apertura della Galleria di WhatsApp attiva il bug. Nessun tocco aggiuntivo dopo aver premuto Galleria di WhatsApp è necessario.

0:30 Poiché WhatsApp mostra le anteprime di ogni file multimediale (incluso il GIF ricevuto), attiverà il bug di double-free e il nostro exploit RCE.

Vulnerabilità di double-free in DDGifSlurp in decoding.c in libpl_droidsonroids_gif

Quando un utente WhatsApp apre la vista Galleria in WhatsApp per inviare un file multimediale, WhatsApp lo analizza con una libreria nativa chiamata libpl_droidsonroids_gif.so per generare l'anteprima del file GIF. libpl_droidsonroids_gif.so è una libreria open-source con il codice sorgente disponibile su https://github.com/koral–/android-gif-drawable/tree/dev/android-gif-drawable/src/main/c.

Un file GIF contiene più frame codificati. Per memorizzare i frame decodificati, viene utilizzato un buffer chiamato rasterBits. Se tutti i frame hanno la stessa dimensione, rasterBits viene riutilizzato per memorizzare i frame decodificati senza riallocazione. Tuttavia, rasterBits viene riallocato se una delle tre condizioni seguenti è soddisfatta:

width * height > originalWidth * originalHeight

width - originalWidth > 0

height - originalHeight > 0

La riallocazione è una combinazione di free e malloc. Se la dimensione della riallocazione è 0, è semplicemente un free. Supponiamo di avere un file GIF che contiene 3 frame con dimensioni 100, 0 e 0.

Dopo la prima riallocazione, abbiamo un buffer info->rasterBits di dimensione 100.

Nella seconda riallocazione di 0, il buffer info->rasterBits viene liberato.

Nella terza riallocazione di 0, info->rasterBits viene liberato di nuovo.

Ciò provoca una vulnerabilità di double-free. La posizione di attivazione si trova in 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 qui sizeof(GifPixelType)); if (tmpRasterBits == NULL) { gifFilePtr->Error = D_GIF_ERR_NOT_ENOUGH_MEM; break; } info->rasterBits = tmpRasterBits; info->rasterSize = newRasterSize; }

Come un bug di double-free in WhatsApp si trasforma in RCE Tempo di lettura: 14 minuti SU QUESTA PAGINA DEMO VULNERABILITÀ DI DOUBLE-FREE IN DDGIFSLURP IN DECODING.C IN LIBPL_DROIDSONROIDS_GIF CONTROLLO DEL REGISTRO PC GESTIONE DI ASLR E W^X METTENDO TUTTO INSIEME VERSIONI AFFETTE VETTORI DI ATTACCO In questo post del blog, condividerò informazioni su una vulnerabilità di double-free che ho scoperto in WhatsApp per Android e su come l'ho trasformata in un RCE. L'ho segnalata a Facebook. Facebook l'ha riconosciuta e corretta ufficialmente nella versione 2.19.244 di WhatsApp. Facebook ha contribuito a riservare CVE-2019-11932 per questo problema.

Utenti di WhatsApp, aggiornate all'ultima versione di WhatsApp (2.19.244 o superiore) per essere al sicuro da questo bug.

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

Link Google Drive per scaricare se il link sopra non è accessibile https://drive.google.com/open?id=1X9nBlf5oj5ef2UoYGOfusjxAiow8nKEK

I passaggi sono i seguenti:

0:16 L'attaccante invia un file GIF all'utente tramite qualsiasi canale Uno di questi potrebbe essere come Documento tramite WhatsApp (cioè premendo il pulsante Graffetta e scegliendo Documento per inviare il GIF corrotto) Se l'attaccante è nella rubrica dell'utente (cioè un amico), il GIF corrotto viene scaricato automaticamente senza alcuna interazione da parte dell'utente. 0:24 L'utente vuole inviare un file multimediale a un suo amico su WhatsApp. Quindi preme il pulsante Graffetta e apre la Galleria di WhatsApp per scegliere un file multimediale da inviare al suo amico. Nota che l'utente non deve inviare nulla perché solo l'apertura della Galleria di WhatsApp attiva il bug. Nessun tocco aggiuntivo dopo aver premuto Galleria di WhatsApp è necessario. 0:30 Poiché WhatsApp mostra le anteprime di ogni file multimediale (incluso il GIF ricevuto), attiverà il bug di double-free e il nostro exploit RCE. Vulnerabilità di double-free in DDGifSlurp in decoding.c in libpl_droidsonroids_gif Quando un utente WhatsApp apre la vista Galleria in WhatsApp per inviare un file multimediale, WhatsApp lo analizza con una libreria nativa chiamata libpl_droidsonroids_gif.so per generare l'anteprima del file GIF. libpl_droidsonroids_gif.so è una libreria open-source con il codice sorgente disponibile su https://github.com/koral–/android-gif-drawable/tree/dev/android-gif-drawable/src/main/c.

Un file GIF contiene più frame codificati. Per memorizzare i frame decodificati, viene utilizzato un buffer chiamato rasterBits. Se tutti i frame hanno la stessa dimensione, rasterBits viene riutilizzato per memorizzare i frame decodificati senza riallocazione. Tuttavia, rasterBits viene riallocato se una delle tre condizioni seguenti è soddisfatta:

width * height > originalWidth * originalHeight width - originalWidth > 0 height - originalHeight > 0 La riallocazione è una combinazione di free e malloc. Se la dimensione della riallocazione è 0, è semplicemente un free. Supponiamo di avere un file GIF che contiene 3 frame con dimensioni 100, 0 e 0.

Dopo la prima riallocazione, abbiamo un buffer info->rasterBits di dimensione 100. Nella seconda riallocazione di 0, il buffer info->rasterBits viene liberato. Nella terza riallocazione di 0, info->rasterBits viene liberato di nuovo. Ciò provoca una vulnerabilità di double-free. La posizione di attivazione si trova in 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 qui sizeof(GifPixelType)); if (tmpRasterBits == NULL) { gifFilePtr->Error = D_GIF_ERR_NOT_ENOUGH_MEM; break; } info->rasterBits = tmpRasterBits; info->rasterSize = newRasterSize; } In Android, un double-free di una memoria di dimensione N porta a due successive allocazioni di memoria di dimensione N che restituiscono lo stesso indirizzo.

Scarica lo strumento