####################################################################### Luigi Auriemma Applicazione: Unreal Engine http://unreal.epicgames.com Giochi vulnerabili: - DeusEx <= 1.112fm - Devastation <= 390 - Mobile Forces <= 20000 - Nerf Arena Blast <= 1.2 - Postal 2 <= 1337 - Rune <= 107 - Tactical Ops <= 3.4.0 - TNN Pro Hunter (?) - Unreal 1 <= 226f - Unreal II XMP <= 7710 - Unreal Tournament <= 451b - Unreal Tournament 2003 <= 2225 - Unreal Tournament 2004 < 3236 - Wheel of Time <= 333b - X-com Enforcer NON vulnerabili: - America's Army - Dead man's hand - Magic Battlegrounds - Rainbow Six: Raven Shield - Splinter Cell: Pandora tomorrow - Star Trek: Klingon Honor Guard - Unreal Tournament 2004 >= 3236 - XIII Piattaforme: Windows, Linux and MacOS Bug: scrittura di memoria con possibile esecuzione di codice Exploitation: remoto, contro servers Data: 18 June 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 ed al momento e' il piu' usato nel mondo dei videogioco. Chi non conosce la grandiosa serie di Unreal??? ####################################################################### ====== 2) Bug ====== Quasi tutti i giochi basati sul motore di Unreal supportano la query "secure". Questo tipo di query e' parte del cosiddetto Gamespy query protocol ed e' utilizzato per sapere se un server di gioco e' capace di calcolare l'esatta stringa di risposta utilizzando un dato specifico: http://unreal.epicgames.com/IpServer.htm http://aluigi.org/papers/gsmsalg.h La query e' un semplice pacchetto UDP come \secure\ABCDEF Se un attacker usa un valore troppo grande nella sua query, nel server di gioco basato sul motore di Unreal verranno sovrascritte importanti zone di memoria. L'esecuzione di codice remoto e lo spoofing della query sono possibili. ####################################################################### =========== 3) The Code =========== http://aluigi.org/poc/unsecure.zip oppure basta inviare un pacchetto UDP simile al seguente alla porta query del server di gioco: \secure\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aaaa ####################################################################### ====== 4) Fix ====== Il bug e' stato notificato ad EpicGames il 24 Maggio 2004. Al momento solo UnrealTournament 2004 e' stato corretto con la recente patch 3236. Controlla i siti web degli altri giochi vulnerabili per possibili patch future. Comunque correggere il problema dovrebbe essre abbastanza semplice, almeno per chi ha esperienza con il linguaggio UnrealScript. Infatti le istruzioni che gestiscono la query \secure\ e passano il suo valore alla funzione vulnerabile sono scritte proprio con codice UnrealScript e sono localizzate nei files IpDrv.u o IpServer.u (dipendono dalla versione del motore utilizzata). #######################################################################