####################################################################### Luigi Auriemma Applicazione: Race Driver http://www.codemasters.com/tocaracedriver/ Versioni: <= 1.20 Piattaforme: Windows Bugs: A] broadcast format string B] broadcast buffer-overflow Exploitation: remoto, contro qualsiasi utente nella chat pubblica od attraverso informazioni malformi del server (broadcast) Data: 18 Jul 2005 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Race Driver e' un gioco di guida divertente ma per nulla supportato sviluppato e pubblicato da Codemasters (http://www.codemasters.com). E' stato rilasciato a Marzo 2003. ####################################################################### ====== 2) Bug ====== Race Driver utilizza sprintf() in modo errato per creare differenti tipi di stringhe di testo utilizzate solitamente per la visualizzazione dei dati. I posti in cui questo sprintf() puo' essere sfruttato sono almeno 2: la chat pubblica ospitata sul server IRC crittato peerchat.gamespy.com ed il server browser nel gioco. La chat pubblica e' il posto utilizzato da Race Driver mentre gli utenti aspettano che ci sia un server libero in cui giocare. Gli utenti entrano nella chat automaticamente quando viene scelta "Partita su Internet" dal menu Network... una tappa inutile ma obbligatoria. Oltre che i messaggi nel canale il gioco supporta anche i messaggi privati (mormorii) quindi un attacker puo' decidere se attaccare un utente specifico o direttamente tutti quelli nella stanza. Il server browser incluso nel gioco invece e' dove sono mostrati ed ordinati tutti i servers online attraverso le informazioni ricevute nelle loro replies. La funzione sprintf() e' vulnerabile a ben due bugs: un format string e un buffer-overflow causato da stringhe di testo di 264 caratteri. ####################################################################### =========== 3) The Code =========== Per testare i bugs attraverso la chat basta utilizzare il gioco stesso od un client IRC con un Peerchat proxy. I messaggi (od anche i nicknames) di esempio per sfruttare i bugs sono i seguenti: %n%n%n e aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRETA I nomi reali dei canali utilizzati da Race Driver sono: #GPG!511 (quello principale), #GPG!510, #GPG!508, #GPG!507, #GPG!506, #GPG!509, #GPG!513, #GPG!512, #GPG!485, #GPG!486 e (per alcuni millisecondi) #GSP!racedriver Per testare i bugs attraverso un server malevolo e' necessario soltanto creare un gioco in rete utilizzando il nome %n%n%n. ####################################################################### ====== 4) Fix ====== Il gioco non e' piu' supportato. 20 Jul 2005: I have released a patch here: http://aluigi.org/patches/rd120fix.zip #######################################################################