####################################################################### Luigi Auriemma Applicazione: Team Factor (aka US Special Forces) http://ms7fx.iccc.cz/teamfactor/ Versioni: <= 1.25 (nota: 1.25 e 1.25m usano lo stesso eseguibile vulnerabile) Piattaforme: Windows e Linux Bug: lettura di memoria non allocata (crash) Exploitation: remoto, contro il server Data: 20 Feb 2004 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Dal sito degli sviluppatori: "Team Factor e' un gioco di azione multi-player sviluppato con il gioco di squadra in mente. La missione, l'ambiente e l'obbiettivo del gioco sono ispirati alle operazioni militari 'ombra'" Il gioco e' stato sviluppato da 7FX (http://www.7fx.com) e pubblicato da Singularity Software (http://www.singularitysoftware.co.uk) a Maggio 2002. ####################################################################### ====== 2) Bug ====== All'offset 12 di ogni pacchetto c'e' un valore a 16bit usato per specificare la grandezza del blocco dati che lo segue. Tale valore e' letto come numero con segno quindi se noi usiamo un numero negativo il gioco leggera' della memoria non allocata (istruzione memcpy()) ed il gioco crashera' immediatamente. Le istruzioni seguenti sono quelle che causano il crash nella versione 1.25 per Win32: :00530D23 0FBF6C240E movsx ebp, word ptr [esp+0E] ... :00530D6B F3A5 repz movsd :00530D23 numero a 16bit letto come signed short, movsx :00530D6B copia del blocco dati nel nuovo buffer, memcpy() ####################################################################### =========== 3) The Code =========== http://aluigi.org/poc/tfboom.zip ####################################################################### ====== 4) Fix ====== No fix. Gli sviluppatori non hanno risposto alle mie e-mails. Fortunatamente correggere il problema e' molto semplice infatti dobbiamo solo gestire il valore a 16bit come UNsigned short anziche' come signed short: from :00530D23 0FBF6C240E movsx ebp, word ptr [esp+0E] to :00530D23 0FB76C240E movzx ebp, word ptr [esp+0E] La mia patch non ufficiale per la versione 1.25/m Win32 e' disponibile qui: http://aluigi.org/patches/tfboomw125.zip #######################################################################