Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2019-11933 — Heap-Korruption im Media-Picker von WhatsApp | Kitploit
Tools/GitHubGitHub/natleoj/cve-2019-11933
Android-SicherheitSpeicherforensikSchwachstellenanalyseExploitationMobile SicherheitBinary-Exploitation
GitHubnatleoj/cve-2019-11933

CVE-2019-11933

Heap-Korruption im Media-Picker von WhatsApp

Repository anzeigen
vor 6 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2019-11933

Heap corruption im Medienauswahldialog von WhatsApp, der WhatsApp für Android vor Version 2.19.291 betrifft

Hintergrund

Eine GIF-Datei ist in Segmente unterteilt, die durch ein bestimmtes Byte gekennzeichnet sind:

  • Image (0x2C)
    • Der Bildabschnitt beschreibt einen einzelnen Frame in der GIF-Datei und enthält Informationen wie Höhe, Breite sowie das komprimierte Bild selbst. Ein GIF kann mehrere Frames und somit mehrere Bildabschnitte haben.
  • Extension (0x21)
    • Der Erweiterungsabschnitt enthält Daten, die zur Modifikation eines Bildes verwendet werden.
  • Terminate (0x3B)
    • Markiert das Ende der GIF-Datei

Laut Quellcode ruft renderFrame DDGifSlurp auf, um ein GIF zu parsen, und getBitmap, um das GIF anzuzeigen. Ein rasterBits-Puffer wird von der Funktion allokiert, und seine Größe wird durch Multiplikation der Breite mit der Höhe des gerade verarbeiteten Bildes berechnet. Um möglicherweise Speicherplatz und Zeit zu sparen, wird derselbe rasterBits-Puffer für alle Frames/Bilder im GIF verwendet. Daher muss der Puffer in der Lage sein, das größte in der Datei beschriebene Bild aufzunehmen. Folglich wird der Puffer entsprechend neu allokiert, wenn ein anderer Bildabschnitt innerhalb desselben GIF ein größeres Bild beschreibt (mehr Platz benötigt).

Schwachstelle

DDGifSlurp parst die GIF-Datei in einer Schleife, verarbeitet jedes Bild/Frame in der Datei und endet, wenn der Terminate-Eintrag gefunden wird. Wenn DGifGetImageDesc GIF_ERROR zurückgibt (a), führt dies zu einem vorzeitigen Abbruch (im switch-case), sodass der Code zur Neuallokation des rasterBits-Puffers übersprungen wird. Ein Ausschnitt von DDGifSlurp ist unten gezeigt:

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

Ein GIF-Bild mit dem folgenden Format führt zu einem Absturz:

  • Gültiges Bild (10 x 10)
  • Größeres Bild (10000 x 10000) mit einem ungültigen Bilddeskriptor

Schritte, die zum Absturz führen

  1. Parse-Phase
    1. Erstes Bild parsen (klein)
    2. rasterBits-Puffer der Größe (kleine Höhe * kleine Breite) allokieren
    3. Zweites Bild parsen (groß)
    4. DGifSetupDecompress/DGifGetImageDesc gibt GIF_ERROR zurück
    5. Neuallokation überspringen
  2. Rendering-Phase
    1. Erstes Bild rendern (erfolgreich)
    2. Zweites Bild rendern (OOB)
Tool herunterladen