
Questo strumento calcola il complicato istogramma Huffman canonico per CVE-2023-4863.
Questo strumento calcola un istogramma canonico di Huffman ingannevole, in grado di innescare una scrittura OOB (Out Of Band) per la libreria libwebp vulnerabile (cioè libwebp <= 1.3.1). Questa vulnerabilità è nota come CVE-2023-4863 o CVE-2023-41064. Possiamo causare un overflow della tabella di Huffman preallocata di al massimo 132 voci.
La logica è che libwebp assume che l'istogramma di Huffman contenuto in ogni immagine webp sia ben formato. Cioè, l'albero di decodifica deve essere un albero completo. Con questa ipotesi, il gruppo libwebp ha sfruttato uno strumento enough per stimare la dimensione massima della memoria necessaria per costruire la tabella di Huffman di decodifica (una struttura potente per decodificare rapidamente i codici Huffman canonici). Tuttavia, gli hacker sono in grado di costruire un albero incompleto per andare oltre questo limite di memoria e quindi causare overflow nella memoria preallocata.
Questo strumento di hacking è stato creato modificando enough per supportare alberi incompleti.
Compila il codice usando il comando qui sotto:
gcc -o NotEnough ./main.c
Per una tabella di Huffman con 40 simboli, tabella radice a 8 bit e profondità massima 15, il numero massimo di voci della tabella è 410. Tuttavia, costruendo un albero incompleto, il numero di voci della tabella potrebbe essere 542. Prova il comando qui sotto:
./NotEnough 40 8 15
Un esempio di tali alberi è il seguente:
Nota che abbiamo potato i rami senza foglie per brevità.
Puoi quindi utilizzare lo strumento craft per costruire un'immagine webp efficace per causare overflow nello strumento dwebp (versione <= 1.3.1). Modifica l'istogramma del codice Huffman code_lengths_counts[4] in {0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 17, 1, 1, 3} di conseguenza, e ricostruisci lo strumento:
vim craft.c # Change huffman code histogram accordingly, i.e. about line 495.
gcc -o craft craft.c
./craft -o bad_542.webp
Si prega di consultare il blog di @benhawkes per avere un'idea migliore di CVE-2023-4863.