Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Counter Strike: wykonanie kodu na komputerze ofiary poprzez… zfragowanie jej
Problem dotyczy gier opartych o podatny silnik Source: CS:Go, Team Fortress 2 czy Portal 2 – to tylko parę przykładów.
Jak piszą odkrywcy podatności:
Valve’s Source SDK contained a buffer overflow vulnerability which allowed remote code execution on clients and servers. The vulnerability was exploited by fragging a player, which casued a specially crafted ragdoll model to be loaded.
Na domiar złego okazało się, że wykorzystanie tej podatności było uproszczone – Valve wyłączyło ASLR (jedną z metod ochrony przez buffer overflow) w jednej ze swoich bibliotek: steamclient.dll.
Jak dostarczany jest exploit? Oddajmy głos badaczom:
The Source engine allows custom content to be packed into map files. Commonly this is used for adding extra content to maps, such as sounds or textures. By packing a ragdoll model file into a map file, with the same resource path as an original ragdoll model file, our version will be used instead.
Czyli prawdopodobnie trzeba dostarczyć swoją mapę, później zfragować delikwenta, co automatycznie odpali na jego komputerze podatną funkcję, do której przekazany jest nasz ragdoll… i voilà: mamy wykonanie kodu na komputerze ofiary:
Proof of Concept exploit ma być udostępniony za około 30 dni, ale warto dodać, że Valve załatało sporo tytułów w imponującym czasie jednego dnia…
PS
Dla fanów tego typu hacków polecamy też archiwalną notkę: OS command exec na żywo w Super Mario World – przez odpowiednią manipulację kontrolerami.
–ms
od kiedy resource’y są ładowane po 'sfragowaniu’? Że akurat overflow mozna zrobic w dowolnych danych to nie znaczy ze akurat koniecznie przy fragu.
„The method ParseKeyValue of class CRagdollCollisionRulesParse is called when processing ragdoll model data, such as when a player is fragged. This method calls nexttoken to tokenize the rule for further processing.
By supplying a collisionpair rule longer then 256 characters, the buffer szToken can be overflowed. Since szToken is stored on the stack, the return address of the ParseKeyValue method can be overwritten.”
Czyli podczas frag odpalana jest ~podatna funkcja a „lewy zasób” (~exploit) musi być umieszczony wcześniej – przynajmniej tak to rozumiemy i tak to jest opisane we wpisie.
Pamiętam jak się bawiłem trochę edytorem na tym silniku to zauważyłem, że po wykonaniu skryptu zabójstwa na NPC czy nawet na graczu, załącza się kolejny skrypt, który podmienia (w ułamku sekundy ale widać to jak się przyjrzeć) model ruchomy jakiejś tam postaci na model ragdoll („gumowa” lalka imitująca bezwładne zwłoki). Dodatkowo tą lalkę można podmienić – tj. jej „skórkę”, jak wszystko – nawet model pistoletu na model banana który strzela. Jak postawisz taki zmodyfikowany serwer to w silniku jest zaimplementowane automatyczne pobieranie brakujących plików na komputer klienta. Jak dla mnie to tak to działa – tylko, że osoba atakująca musi postawić swój serwer.