####################################################################### Luigi Auriemma Applicazione: Medal of Honor http://mohaa.ea.com Versioni: Allied Assault <= 1.11v9 Breakthrough <= 2.40b Spearhead <= 2.15 Piattaforme: Windows, Linux e MacOS Bug: buffer overflow Exploitation: remoto, verso server (i clients sono vulnerabili solo in LAN) Data: 17 July 2004 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Medal of Honor e' un famoso gioco FPS militare ambientato nella seconda guerra mondiale. E' stato sviluppato da 2015 (http://www.2015.com) e pubblicato da Electronic Arts (http://www.ea.com); venne rilasciato all'inizio del 2002 ma altre espansioni sono state rilasciate piu' recentemente. ####################################################################### ====== 2) Bug ====== Il problema e' un classico buffer-overflow localizzato in differenti parti del gioco, ma la prima funzione ad essere vulnerabile e' quella che si occupa della gestione delle query/reply ove vengono controllati gli slashs ed i bytes NULL ma non la grandezza dei valori prima di copiarli in un nuovo buffer. In Allied Assault 1.11v9 dedicated server per Win32 tale funzione e' visibile all'offset 0x00428f20 ove l'indirrizzo di ritorno (0x00429291) e' sovrascritto dai dati contenuti nel valore inviato dal client se di dimensioni maggiori od uguali a 520 bytes (1032 nella versione per Linux). I dati che causano l'overflow possono essere utilizzati in diversi tipi di pacchetti, come nella query "getinfo", nel pacchetto "connect" ed in altri. Il metodo piu' pericoloso per sfruttare questa vulnerabilita' e' attraverso l'uso della query getinfo in quanto e' un singolo pacchetto UDP non bloccabile dal server e l'attacker ha anche la possibilita' di spoofarne l'indirizzo IP mittente. Naturalmene anche i clients sono vulnerabili ma la funzione vulnerabile e' usata solo per le query in LAN, infatti online i clients usano il protocoolo di Gamespy che non e' vulnerabile. ####################################################################### =========== 3) The Code =========== http://aluigi.org/poc/mohaabof.zip ####################################################################### ====== 4) Fix ====== No fix. Gli sviluppatori di 2015 sono stati contattati il primo Luglio 2004 ma il gioco e' supportato solo da Electronic Arts (sto' ancora aspettando una patch od almeno una risposta da EA riguardo il buffer-overflow in Need for Speed Hot Pursuit 2 segnalatogli molti mesi fa'...). Comunque ho creato una patch universale che puo' essere applicata ad ogni versione, gioco e tipo di server/client (dedicato o normale, con l'unico requisito che naturalmente l'eseguibile della versione normale deve essere decrittato, ossia No-CD) perche' fortunatamente la parte di codice da modificare e' sempre lo stesso. Al momento la patch e' disponibile sono per gli eseguibili Win32, non per Linux: http://aluigi.org/patches/mohaaboffix.lpatch Tutti i dettagli riguardanti il fix sono nel file di testo all'interno dello zip comunque la funzione vulnerabile originale e' costituita da molto codice lento quindi l'ho ottimizzata per guadagnare lo spazio ove collocare il mio codice patchato ed ho anche risparmiato ben 38 bytes. Linux: http://icculus.org/betas/mohaa/ #######################################################################