####################################################################### Luigi Auriemma Applicazione: PunkBuster http://www.punkbuster.com Versioni: PunkBuster per servers, versioni antecedenti la v1.229: America's Army <= v1.228 Battlefield 1942 <= v1.158 Battlefield 2 <= v1.184 Battlefield Vietnam <= v1.150 Call of Duty <= v1.173 Call of Duty 2 <= v1.108 DOOM 3 <= v1.159 Enemy Territory <= v1.167 Far Cry <= v1.150 F.E.A.R. <= v1.093 Joint Operations <= v1.187 Quake III Arena <= v1.150 Quake 4 <= v1.181 Rainbow Six 3: Raven Shield <= v1.169 Rainbow Six 4: Lockdown <= v1.093 Return to Castle Wolfenstein <= v1.175 Soldier of Fortune II <= v1.183 Piattaforme: Win32, Linux e Mac Bug: buffer overflow nel web server per l'amministrazione remota (WebTool) Exploitation: remoto, contro server Data: 23 May 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 sistema anti-cheat sviluppato da Even Balance (http://www.evenbalance.com) ed e' usato e distribuito ufficialmente in quasi tutti i giochi FPS multiplayer piu' giocati e famosi attualmente in commercio. ####################################################################### ====== 2) Bug ====== PunkBuster contiene un server HTTP interno chiamato WebTool per permettere agli amministratori di gestire il proprio server di gioco remotamente attraverso un normalissimo browser web: http://www.evenbalance.com/publications/admins/#webtool Questo web server non e' abilitato di default ma deve essere attivato selezionando la porta TCP sulla quale far girare il servizio usando il comando: pb_sv_httpport PORT Il meccanismo di autenticazione e' gestito attraverso un parametro chiamato webkey seguito dalla password ed inviato dal client usando il metodo POST o direttamente nell'URL. Una webkey lunga piu' di 1024 bytes evidenzia un buffer-overflow che avviene quando il programma usa la funzione memcpy per copiare la stringa inviata dall'attacker in questo buffer di dimensioni limitate utilizzato per il confronto con la password valida del servizio. Quello che segue e' il codice tratto da pbsv.dll 1.183 del gioco Soldier of Fortune II quando avviene l'eccezione che interrompe il gioco: ... 0511B3A8 8BB424 58100000 MOV ESI,DWORD PTR SS:[ESP+1058] 0511B3AF 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18] 0511B3B3 6A 41 PUSH 41 0511B3B5 50 PUSH EAX 0511B3B6 C68424 55100000 >MOV BYTE PTR SS:[ESP+1055],0 0511B3BE FF96 54010000 CALL DWORD PTR DS:[ESI+154] 0511B3C4 8BBC24 64100000 MOV EDI,DWORD PTR SS:[ESP+1064] ... Il registro ESI e' controllato dall'attacker. La funzione memcpy descritta piu' sopra invece e' situata all'offset 0512aea7. ####################################################################### =========== 3) The Code =========== Inviare il seguente file di testo alla porta dove gira il servizio WebTool di PunkBuster: http://aluigi.org/poc/pbwebbof.txt o piu' semplicemente costruire ed usare un link come quello che segue: http://SERVER:80/pbsvweb/plist=1&webkey=aaaaaaaaaaaaa...1044...aaa ####################################################################### ====== 4) Fix ====== Versioni v1.229 e superiori. #######################################################################