####################################################################### Luigi Auriemma Applicazione: Soldier of Fortune II http://www.ravensoft.com/soldier2.html Versioni: 1.02x e 1.03 Piattaforme: Windows, Linux e Mac Bug: accesso invalido alla memoria Exploitation: remoto, contro server (in-game) Data: 29 Jun 2005 Autore: sconosciuto, il bug e' stato scoperto in rete e riportatomi da due amministratori Advisory: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) The Code 4) Fix ####################################################################### =============== 1) Introduzione =============== Soldier of Fortune II e' un gioco FPS sviluppato da Raven Software (http://www.ravensoft.com) e pubblicato da Activision (http://www.activision.com). E' stato rilasciato a Maggio 2002. ####################################################################### ====== 2) Bug ====== Il comando /ignore e' utilizzato per dire al server che noi (il client) no vogliamo piu' ricevere i messaggi di uno specifico utente. Il comando e' seguito da un numero che identifica l'ID del client da ignorare. Il client ID e' poi utilizzato dal server posizionarsi nell'array g_entities composto da 1024 elementi cosi' se noi specifichiamo un numero troppo grande come 123456789 il server crashera' immediatamente in quanto prova ad accedere ad una zona di memoria non allocata. Questo e' un bug in-game quindi non puo' essere sfrtuttato se si e' stati bannati o, se il server e' protetto da password, non si conosce la parola chiave. ####################################################################### =========== 3) The Code =========== Entra in un server e dalla console (tasto ~) digita: /ignore 123456789 ####################################################################### ====== 4) Fix ====== Il gioco non e' piu' supportato quindi non c'e' alcuna patch ufficiale. La via corretta per rimuovere il problema e' patchare il bug nell'ultimo SDK disponibile per il gioco (1.02 + 1.03) e ricompilarlo. La patch consiste nell'aggiungere l'istruzione seguente in g_cmds.c subito dopo "ignoree = atoi( buffer );" alla linea 1962: if((unsigned)ignoree >= MAX_GENTITIES) return; Basta soltanto compilare la cartella game (game.bat) e poi zippare il file vm\sof2mp_game.qvm in un nuovo file pk3 come update_fix.pk3. Invece se si vuole una via piu' veloce basta modificare il file vm\sof2mp_game.qvm rimuovendo il comando /ignore. Una semplice spiegazione passo-passo e' disponibile qui: http://aluigi.org/patches/q3lamefix.txt #######################################################################