####################################################################### Luigi Auriemma Applicazione: SpeakFreely http://www.fourmilab.ch/speakfree/ http://speak-freely.sourceforge.net Versioni: <= 7.6a Piattaforme: Windows (le versioni per Unix NON sono vulnerabili) Bug: Crash remoto causato da immagine GIF malformata Date: 22 Sep 2003 Author: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== SpeakFreely e' un'applicazione di chat vocale in tempo reale con supporto crittografico sviluppato da John Walker ed ora il progetto verra' continuato su SourceForge da un gruppo di programmatori e appassionati. Il programma e' multipiattaforma, opensource e viene anche usato come add-on di ICQ. ####################################################################### ====== 2) Bug ====== SpeakFreely per Windows ha una divertente funzione chiamata "Show your face" che permette agli utenti di inviare un'immagine (bmp e gif) ai propri interlocutori ed e' abilitata di default. Sfortunatamente nel programma c'e' un "mancato controllo", quindi se la funzione GlobalAlloc() fallisce non c'e' nessuna istruzione che ne verifichera' il valore di ritorno. Il problema avviene con files GIF che hanno un contenuto troppo grande od uguale a zero e quindi non allocabile in memoria (parametri "Image width" e "Image height" dell'itestazione del file GIF). Il crash avverra' quando il programma provera' ad usare il puntatore ritornato dalla funzione che non e' stata controllata. I seguenti sono 2 esempi: A] 0000.gif 0000000: 4749 4638 3961 0000 0000 0000 002c 0000 GIF89a.......,.. 0000010: 0000 0000 0000 00 ....... | | Crash: :00416227 8A0439 mov al, byte ptr [ecx+edi] (ecx+edi e' una zona di memoria irragiungibile dal programma) B] ffff.gif 0000000: 4749 4638 3961 0000 0000 0000 002c 0000 GIF89a.......,.. 0000010: 0000 ffff ffff 00 ....... | | Crash: 00415CF8 668910 mov word ptr [eax], dx (eax e' 0) ####################################################################### =========== 3) The Code =========== Step by step: A] Innanzitutto bisogna creare un file GIF manualmente (tramite un editor esadecimale) oppure usando un mio tool ("gifbug file.gif" o "gifbug -iw 0 -ih 0 file.gif"): http://aluigi.org/testz/gifbug.zip B] Dopodiche' bisogna selezionare il file GIF dal client SpeakFreely (Options -> Show your face -> Browse) C] Bisogna connettersi alla vittima (Connection -> New) D] Ed ora bisogna parlare o basta anche solo premere il tasto sinistro del mouse sulla finestra di dialogo apparsa dopo la connessione E] La vittima dovrebbe essere crashata (NOTA: si puo' anche aspettare una connessione in entrata e crashare il client) ####################################################################### ====== 4) Fix ====== Disabilita l'opzione "Show faces of other users" dal menu' Options -> Show your face #######################################################################