####################################################################### Luigi Auriemma Applicazione: motore di Unreal http://unreal.epicgames.com Giochi: - America's Army - DeusEx - Devastation - Magic Battlegrounds - Mobile Forces - Nerf Arena Blast - Postal 2 - Rainbow Six: Raven Shield - Rune - Sephiroth: 3rd episode the Crusade - Star Trek: Klingon Honor Guard x Tactical Ops (NON VULNERABILE) - TNN Pro Hunter - Unreal 1 - Unreal II XMP - Unreal Tournament <= 451b - Unreal Tournament 2003 x Unreal Tournament 2004 (NON VULNERABILE) - Wheel of Time - X-com Enforcer - XIII (la lista contiene tutti giochi basati sul motore di Unreal con supporto multiplayer rilasciati sino ad oggi, io NON li ho testati tutti) Piattaforme: Windows, Linux and MacOS Bug: format string bug remoto Exploitation: remoto, verso server Data: 10 Mar 2004 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Il motore di Unreal e' il famoso motore di gioco sviluppato da EpicGames (http://www.epicgames.com) ed usato da un vasto numero di videogiochi. ####################################################################### ====== 2) Bug ====== Il problema e' un format string bug nella gestione delle Classi. Ogni volta che un client si connette ad un server, invia i nomi degli oggetti che usa (chiamati classi). Se un attacker usa il nome di una classe contenente dei parametri per la formattazione (come %n, %s e cosi' via) sara' capace di far crashare od anche eseguire codice malevolo sul server remoto. Il bug e' un in-game bug quindi l'attacker deve avere accesso al server, per esempio se il server e' protetto da password l'attacker deve conoscere tale password. ####################################################################### =========== 3) The Code =========== http://aluigi.org/poc/unrfs-poc.zip Questo proof-of-concept e' un server proxy capace di modificare i pacchetti di Unreal al volo permettendo l'inserimento di "%n" nei nomi delle classi inviati dal client al server col conseguente crash di quest'ultimo. Dovrebbe essere compatibile con qualsiasi gioco basato sul motore di Unreal e richiede lo stesso videogioco che gira sul server per essere utilizzato. Un altro metodo di testare la vulnerabilita' e' l'aggiunta di %n dopo il valore Class nel file system/user.ini Esempio: da: Class=Engine.Pawn a: Class=%n%nEngine.Pawn Se il gioco e' vulnerabile allora crashera' appena lanciato. ####################################################################### ====== 4) Fix ====== Questo bug venne segnalato ad EpicGames ESATTAMENTE il 2 Settembre 2003 (oggi e' il 10 Marzo quindi oltre 6 mesi fa') ma all'inizio fu' sottovalutato e venne preso un po' piu' seriamente solo a Novembre. Tutti gli sviluppatori dei videogiochi vulnerabili sono stati avvertiti da EpicGames attraverso la loro mailing-list interna. #######################################################################