###################################################################### Luigi Auriemma Applicazione: Half-Life (http://half-life.sierra.com). I bugs sono causati dai MODs Versioni: 1.1.1.0 e tutte le versioni future per uno dei bugs che dovro' spiegare Piattaforma: Windows Bugs: Buffer-overflow nel file liblist.gam ed esecuzione di codice tramite file DLL customizzati Date: 29 Jul 2003 Author: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ###################################################################### 1) Introduzione 2) Bugs 3) Il Codice 4) Fix ###################################################################### =============== 1) Introduzione =============== Half-Life e' stato rilasciato nel 1998 e anche dopo tutti questi anni e' considerato a tutti gli effetti uno dei FPS piu' popolari. Ma piu' che il gioco in se', la vera fortuna e' stata data dalla comunita' di utenti che ha contribuito al suo successo con i suoi MODs per questo gioco e sicuramente il piu' famoso e giocato on-line e' CounterStrike. E' stato sviluppato da Valve (http://www.valvesoftware.com) e pubblicato da Sierra (http://www.sierra.com). Proprio i MODs sono la causa dei bugs che andro' a spiegare. Uno di questi (il piu' pericoloso) consiste proprio in un problema nella struttura di Half-Life che non puo' essere risolto da Valve. Gli amministratori e gli utenti dovrebbero stare attenti a questo problema. ###################################################################### ======= 2) Bugs ======= I 2 bugs sono: ---------------------------------- [A] Buffer-overflow in liblist.gam ---------------------------------- Liblist.gam e' un file di testo presente in ogni MOD ed e' usato per contenere alcune informazioni importanti del MOD. Il problema e' un buffer-overflow causato da un valore troppo grande. Il file liblist.gam seguente spiega il problema meglio delle mie parole: ---liblist.gam--- game "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEIPxaaaaaaaaaaaa" gamedll "what you want" ----------------- Il buffer-overflow avviene quando tale valore e' grande 276 bytes e quando c'e' il parametro gamedll (senza gamedll non avviene il buffer-overflow). NOTA: La cosa importante e "strana" e' che l'indirizzo di ritorno viene sovrascritto dai 4 bytes all'offset 260 del valore. Abbiamo bisogno di aggiungere altri 12 bytes per causare il buffer-overflow e sovrascrivere l'indirizzo di ritorno. Non conosco tutti i dettagli a riguardo comunque e' interessante. -------------------------------------- [B] Conosci i file DLL usati dai MODs? -------------------------------------- Molti MODs sono distribuiti con dei file DLL contenuti nelle cartelle "dlls" e "cl_dlls". Il problema e' facilmente spiegato: I file DLL usati dai MODs sono vere librerie binarie che possono contenere tutto il codice che si vuole! Cio' significa che io possono creare un file DLL da distribuire con un MOD e far eseguire il mio codice da chiunque usi tale MOD. Questo problema "NON" puo' essere risolto da Valve, quindi bisogna fare molta attenzione quando si scarica un MOD sconosciuto o un MOD da un sito non sicuro. ###################################################################### ============ 3) Il Codice ============ ---------------------------------- [A] Buffer-overflow in liblist.gam ---------------------------------- ---liblist.gam--- game "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEIPxaaaaaaaaaaaa" gamedll "what you want" ----------------- -------------------------------------- [B] Conosci i file DLL usati dai MODs? -------------------------------------- Crea una DLL per Half-Life o aggiungi il tuo codice ad una DLL gia' esistente. ####################################################################### ====== 4) Fix ====== Valve e' stata contattata oltre 3 mesi fa' (a partire dal 14 Aprile 2003) e mi informo' che stavano lavorando per rilasciare una patch. Da allora ho contattato Valve diverse volte... ma fino ad ora non si e' ancora vista una patch. #######################################################################