
Dieses Tool berechnet das knifflige kanonische Huffman-Histogramm für CVE-2023-4863.
Dieses Tool berechnet knifflige kanonische Huffman-Histogramme, die in der Lage sind, einen OOB-Schreibzugriff (Out Of Band) für die verwundbare libwebp-Bibliothek (d.h. libwebp <= 1.3.1) auszulösen. Diese Schwachstelle ist bekannt als CVE-2023-4863 oder CVE-2023-41064. Wir können die vorab zugewiesene Huffman-Tabelle um maximal 132 Einträge überlaufen lassen.
Die Begründung ist, dass libwebp annimmt, dass das in jedem Webp-Bild enthaltene Huffman-Histogramm wohlgeformt ist. Das heißt, der Dekodierungsbaum muss ein vollständiger Baum sein. Mit dieser Annahme nutzte die libwebp-Gruppe ein enough-Tool, um die maximale Speichergröße zum Aufbau der dekodierenden Huffman-Tabelle (eine leistungsfähige Struktur zum schnellen Dekodieren kanonischer Huffman-Codes) abzuschätzen. Allerdings sind Hacker in der Lage, einen unvollständigen Baum zu konstruieren, der über diese Speichergrenze hinausgeht und somit den vorab zugewiesenen Speicher überläuft.
Dieses Hacking-Tool wurde durch Anpassung von enough mit Unterstützung für unvollständige Bäume erstellt.
Kompilieren Sie den Code mit dem folgenden Befehl:
gcc -o NotEnough ./main.c
Für eine Huffman-Tabelle mit 40 Symbolen, einer 8-Bit-Wurzeltabelle und einer maximalen Tiefe von 15 beträgt die maximale Anzahl von Tabelleneinträgen 410. Durch die Konstruktion eines unvollständigen Baums könnte die Anzahl der Tabelleneinträge jedoch 542 betragen. Versuchen Sie den folgenden Befehl:
./NotEnough 40 8 15
Ein Beispiel für einen solcher Baum ist unten dargestellt:
Beachten Sie, dass wir der Kürze halber die Zweige ohne Blätter beschnitten haben.
Sie können dann das craft-Tool verwenden, um ein effektives Webp-Bild zu konstruieren, um das dwebp-Tool (Version <= 1.3.1) überlaufen zu lassen. Ändern Sie das Huffman-Code-Histogramm code_lengths_counts[4] entsprechend auf {0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 17, 1, 1, 3} und bauen Sie das Tool neu auf:
vim craft.c # Ändern Sie das Huffman-Code-Histogramm entsprechend, z. B. etwa Zeile 495.
gcc -o craft craft.c
./craft -o bad_542.webp
Bitte sehen Sie sich @benhawkes's Blog an, um ein besseres Verständnis von CVE-2023-4863 zu erhalten.