Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2019-11933 — Heap corruption in WhatsApp's media picker | Kitploit
Ferramentas/GitHubGitHub/natleoj/cve-2019-11933
Android SecurityMemory ForensicsVulnerability AnalysisExploitationMobile SecurityBinary Exploitation
GitHubnatleoj/cve-2019-11933

CVE-2019-11933

Heap corruption in WhatsApp's media picker

Ver Repositório
há 6 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2019-11933

Corrupção de heap no seletor de mídia do WhatsApp afetando o WhatsApp para Android antes da versão 2.19.291

Contexto

Um arquivo GIF é dividido em segmentos, marcados por um byte específico:

  • Imagem (0x2C)
    • A seção de imagem descreve um único quadro no arquivo GIF e contém informações como altura, largura, bem como a própria imagem compactada. Um GIF pode ter vários quadros e, portanto, várias seções de imagem.
  • Extensão (0x21)
    • A seção de extensão contém dados usados para modificar uma imagem.
  • Terminação (0x3B)
    • Marca o fim do arquivo GIF

De acordo com o código-fonte, renderFrame chama DDGifSlurp para analisar um GIF, e getBitmap para exibir o GIF. Um buffer rasterBits é alocado pela função, e seu tamanho é calculado multiplicando a largura pela altura da imagem que está sendo processada no momento. Talvez para economizar espaço de memória e tempo, o mesmo buffer rasterBits será usado para todos os quadros/imagens no GIF. Portanto, é necessário que o buffer seja capaz de conter a maior imagem descrita no arquivo. Assim, o buffer é realocado conforme necessário se outra seção de imagem dentro do mesmo GIF descrever uma imagem maior (exigir mais espaço).

Vulnerabilidade

DDGifSlurp analisa o arquivo GIF em um loop, processando cada imagem/quadro no arquivo, e termina quando o registro de terminação é encontrado. Quando DGifGetImageDesc retorna GIF_ERROR (a), isso resulta em terminação antecipada (no caso do switch), fazendo com que o código que realoca o buffer rasterBits seja ignorado. Um trecho de DDGifSlurp é mostrado abaixo:

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);
}

Uma imagem GIF que possui o seguinte formato causará um travamento:

  • Imagem válida (10 x 10)
  • Imagem maior (10000 x 10000) com um descritor de imagem inválido

Etapas que levam ao travamento

  1. Fase de análise
    1. Analisar primeira imagem (pequena)
    2. Alocar buffer rasterBits de tamanho (altura pequena * largura pequena)
    3. Analisar segunda imagem (grande)
    4. DGifSetupDecompress/DGifGetImageDesc retorna GIF_ERROR
    5. Ignorar realocação
  2. Fase de renderização
    1. Renderizar primeira imagem (sucesso)
    2. Renderizar segunda imagem (OOB)
Baixar ferramenta