####################################################################### Luigi Auriemma Applicazione: libmikmod http://mikmod.raphnet.net http://sourceforge.net/projects/mikmod/ Versioni: <= 3.2.2 e CVS corrente le versioni 2.x.x e tutte le altre in cui il format GT2 non e' supportato non sono vulnerabili Piattaforme: Windows, POSIX, Mac Bug: heap overflow in GT2's loadChunk Exploitation: locale Data: 24 Jul 2006 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== libmikmod e' una libreria utilizzata principalmente da Mikmod per la riproduzione di diversi tipi di moduli audio (669, amf, asy, dsm, far, gdm, gt2, imf, it, m15, med, mod, mtm, okt, s3m, stm, stx, ult, uni ed xm). ####################################################################### ====== 2) Bug ====== GT2 e' il nome del modulo GRAOUMF TRACKER (http://thorkildsen.no/faqsys/docs/gt2-form.txt). Durante la lettura del chunk XCOM (un campo contenente un commento extra) libmikmod legge il numero a 32 bit che specifica la lunghezza del commento ed alloca un quantitativo di memoria equivalmente a tale numero piu' uno, probabilmente per un eventuale ma inutilizzato byte NULL alla fine del commento. Il risultato e' che la libreria alloca circa zero bytes di memoria ("circa" perche' MikMod_malloc alloca 20 bytes piu' di quanto richiesto) se un attacker utilizza il valore 0xffffffff (in quanto: 0xffffffff + 1 = 0) e prova a leggere la quantita' di memoria specificata dal valore originale causando un heap overflow. Da loaders/load_gt2.c: GT_CHUNK *loadChunk(void) ... if (!memcmp(new_chunk, "XCOM", 4)) { new_chunk->xcom.chunk_size = _mm_read_M_ULONG(modreader); new_chunk->xcom.comment_len = _mm_read_M_ULONG(modreader); new_chunk->xcom.comment = MikMod_malloc(new_chunk->xcom.comment_len + 1); _mm_read_UBYTES(new_chunk->xcom.comment, new_chunk->xcom.comment_len, modreader); return new_chunk; } ... ####################################################################### =========== 3) The Code =========== http://aluigi.org/poc/lmmgt2ho.zip ####################################################################### ====== 4) Fix ====== No fix. Nessuna risposta dagli sviluppatori. #######################################################################