####################################################################### Luigi Auriemma Applicazione: Soldier of Fortune II con PunkBuster abilitato http://www.ravensoft.com/soldier2.html http://www.PunkBuster.com Versioni: PB server < 1.180 Piattaforme: Windows, Linux e Mac Bug: format string Exploitation: remoto, contro server (in-game) Data: 16 Feb 2006 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== PunkBuster e' un amato/odiato sistema anti-cheat sviluppato da Even Balance (http://www.evenbalance.com) ed e' utilizzato ufficialmente in molti giochi conosciuti come America's Army, Battlefield 1942/Vietnam/II, Call of Duty, Doom 3 e quasi tutti i giochi che usano il motore di Quake 3. ####################################################################### ====== 2) Bug ====== Il modulo server di PunkBuster supporta il kick e ban automatico dei giocatori che usano cvars invalide, come ad esempio con valori al di fuori di quanto impostato dal server. Quando avviene questa situazione PB kicka il client usando le funzioni del gioco (come il comando clientkick). Il messaggio inviato al client contiene sia il nome della cvar monitorata che il suo valore sul client, il tutto identificato come "reason". Il problema e' che naturalmente Soldier of Fortune II non effettua controlli sul parametro "reason" (dare un'occhiata a trap_DropClient) passato da PB o dall'amministratore del server per kickare un giocatore, quindi la successiva chiamata a sprintf() e' vulnerabile ad un attacco di tipo format string (in pratica si tratta di un doppio sprintf()). Normalmente non c'e' modo di sfruttare il bug se non si e' amministratori (digitando: clientkick 0 %n%n%n%n%n) ma PunkBuster diventa il mezzo che permette a qualsiasi giocatore nel server di far crashare o possibilmente prendere il controllo del sistema remoto. ####################################################################### =========== 3) The Code =========== - lancia il client - entra in un server (naturalmente con PunkBuster abilitato) - digita /pb_cvarlist - scegli una delle cvar monitorate come ad esempio "snaps" - digita: /set CVAR %n%n%n%n%n%n esempio: /set snaps %n%n%n%n%n%n - il server crashera' dopo qualche secondo mentre prova a kickare il client ####################################################################### ====== 4) Fix ====== Evenbalance ha corretto il bug immediatamente dopo il mio report, versione 1.180. #######################################################################