####################################################################### Luigi Auriemma Applicazione: RogerWilco (http://www.rogerwilco.com) Versioni: graphical server <= 1.4.1.6 dedicated server for win32 <= 0.30a dedicated server for linux/bsd <= 0.27 Piattaforme: TUTTE le piattaforme supportate dal server grafico e dal server dedicato (Win32, Linux e BSD) Bug: Buffer overflow remoto Date: 08 Sep 2003 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ####################################################################### 1) Introduzione 2) Bug 3) Il Codice 4) Fix ####################################################################### =============== 1) Introduzione =============== RogerWilco e' un programma di chat vocale in tempo reale sviluppato da Gamespy e particolarmente usato dai videogiocatori. ####################################################################### ====== 2) Bug ====== RogerWilco legge i dati inviati dal client nel seguente modo: 1 byte: 0x0f (un tag specifico) 1 byte: 0x00 (un tag specifico) 2 bytes: lunghezza dei dati da leggere. La chiameremo 'N' N bytes: dati Come chiunque puo' gia' capire da questa breve introduzione, il problema riguarda proprio la possibilita' per l'attacker di specificare quanti bytes il server dovra' leggere. Dopo cio' il server lancera' la funzione recv() usando lo stesso buffer (che naturalmente non e' stato allocato correttamente quindi sara' troppo piccolo) e leggera' N bytes: recv(sock, buffer, N_bytes, 0); Il risultato e' la completa sovrascrittura della memoria e naturalmente anche dell'indirizzo di ritorno della funzione principale. I primi dati che il client invia al server sono la password da usare, il canale a cui partecipare ed altri 12 bytes che non so' con precisione cosa rappresentino. Cio' significa che NON esiste un server non vulnerabile, anche se viene usata una password od il canale non viene reso pubblico. Infatti la password e' l'unica difesa per limitare gli accessi al proprio server pubblico. L'altro problema e' che TUTTE le versioni ed i tipi di servers di RogerWilco sono vulnerabili, sia dedicati che non e tutte le versioni rilasciate sino ad ora. ####################################################################### ============ 3) Il Codice ============ Una nuova opzione e' stata aggiunta al mio programma per testare le vulnerabilita' di RogerWilco: http://aluigi.org/poc/wilco.zip ####################################################################### ====== 4) Fix ====== Gamespy e' stata contattata oltre una settimana prima del rilascio di questo advisory come suggerito dalla comunita' di sicurezza quando il vendor non risponde alle segnalazioni di bugs. Correggere (e soprattutto prevenire) tale bug e' molto semplice quindi non capisco perche' non lo abbiano ancora fatto... Inoltre come spiegato nel mio advisory http://aluigi.org/adv/wilco-remix-adv.txt ho "continuamente" contattato Gamespy per molto tempo e l'unica cosa che hanno fatto e' stato ignorare le mie segnalazioni. #######################################################################