####################################################################### Luigi Auriemma Applicazione: Hired Team: Trial http://eng.nmg.ru/rubrs.asp?rubr_id=165 e probabilmente anche il motore Shine sul quale e' basato http://www.3dengine.ru/index.asp?id=4 Versioni: Hired Team <= 2.0/2.200 (dal momento che questo e' l'unico gioco che utilizza lo Shine engine e non ho ricevuto risposte dagli sviluppatori non posso confermare se l'intero motore e quali sue versioni sono vulnerabili) Piattaforme: Windows Bugs: A] in-game format string B] match interruption through malformed packet C] status and kick problems Exploitation: remoto A] contro il server (in-game) B] contro il server C] contro i giocatori (in-game) Data: 15 Novembre 2004 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bugs 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Hired Team e' un gioco FPS sviluppato da by New Media Generation (http://eng.nmg.ru) e rilasciato alla fine del 2000. Sembra che esso sia l'unico gioco basato sullo Shine engine (creato dagli stessi sviluppatori) quindi non posso confrontare i bugs trovati in questo gioco con altri giochi creati con lo stesso motore per sapere con precisione se sono specifici di questo gioco soltanto o dell'intero motore. ####################################################################### ======= 2) Bugs ======= ------------------------ A] in-game format string ------------------------ Il gioco e' vulnerabile ad un format string bug localizzato nella console di gioco. Cio' permette ad un attacker di entrare in un server (che non supporta le password, quindi chiunque ha libero accesso) e farlo crashare od eseguire codice malevolo semplicemente con l'invio di un messaggio contenente gli argomenti per la formattazione (come il classico %n%n%n). ---------------------------------------------- B] match interruption through malformed packet ---------------------------------------------- Ogni volta che un nuovo giocatore entra, il server gli assegna una porta UDP (solitamente sono le porte sequenziali dopo quella del server, di default la 29199). Se il server riceve un pacchetto su una di queste porte contenente dati diversi da quelli che stava aspettando, il match verra' interrotto immediatamente. --------------------------- C] status and kick problems --------------------------- Durante il test di questo gioco/motore ho scoperto anche che se un client utilizza il comando status, il server crasha immediatamente. L'altra cosa strana e' che qualsiasi giocatore puo' kickare gli altri (compreso l'admin) senza limitazioni. ####################################################################### =========== 3) The Code =========== ------------------------ A] in-game format string ------------------------ Lancia un server ed un client, entra nel server ed usa la console premendo il tasto ~. Poi digita: say %n%n%n il server crashera' immediatemente. Un test piu' semplice e veloce e' il seguente: lancia il gioco, seleziona Console dal menu' principale e digita %x. Verra' mostrato il messaggio: Unknown command "1015c888" ---------------------------------------------- B] match interruption through malformed packet ---------------------------------------------- Invia un pacchetto alla porta UDP 29200 del server (o 29220 se si sta testando il demo) contenente qualsiasi dato si vuole, come ciao, asdf o qualsiasi altro tipo di dato. --------------------------- C] status and kick problems --------------------------- Quando tu (client) sei nel server, usa la console e digita: status per crashare il server o kick NAME dove NAME e' il nome del giocatore che si vuole kickare. ####################################################################### ====== 4) Fix ====== No fix. Gli sviluppatori non hanno risposto alle mie mail. Probabilmente lo Shine engine e Hired Team: Trial non sono piu' supportati. #######################################################################