Autor: .cCuMiNn. | 10.10.2007 |
Po bezpečnostním testu věnovaném freemailu společnosti Seznam.cz, který skončil s oznámením zranitelnosti na CSRF útoky, jsem se tentokrát zaměřil na web Volny.cz společnosti Telekom Austria. Výsledkem bezpečnostního testu je tento report, který informuje o nalezených zranitelnostech.
Jako první jsem se zaměřil na hledání zranitelností v podobě XSS. Tyto by měly být na portálech této velikosti podchyceny, protože jde snad o nejvíce diskutovaný a zdokumentovaný druh zranitelnosti. Ač jsem náchylnost na útoky XSS nečekal, našel jsem jich na webu Volny.cz spousty. Dá se dokonce říci, že bylo spíše výjimkou, pokud přihlašovací nebo vyhledávací formulář touto chybou netrpěl.
Po zjištění, že na XSS zranitelnost je možné narazit na webu Volny.cz opravdu na každém kroku, jsem se rozhodl, že se trochu blíže podívám na bezpečnost poskytovaných e-mailových schránek. Vzhledem k tomu, že úvodní web na www.mail1.volny.cz jako jeden z mále nejevil známky náchylnosti na XSS útoky, jsem se pustil do zkoušky CSRF útoku. Pro změnu hesla je vyžadováno zadání hesla původního, což útok na změnu hesla vylučovalo. Za cíl jsem si tedy zvolil, stejně jako v případě dříve publikované chyby na seznamu, přesměrování příchozí pošty na útočníkův mail. Pomocí níže uvedeného kódu se mi sice podařilo útok uskutečnit, ale pouze ve fázi testování.
Náš kód totiž nutně potřebuje znát URL stránky, na které se nachází skript pro změnu údajů. Tato adresa se ale s každým přihlášením mění, protože URL sestává kromě jiného také ze session řetězce. Právě díky tomu, že se mi nepodařilo na doméně, v níž freemail běží, nalézt žádnou xss zranitelnost, neměl jsem tak šanci přinutit oběť, aby mi session řetězec odeslala. Začal jsem zkoumat, ve které chvíli se identifikační řetězec vytváří a zjistil jsem tak, že ve chvíli kdy vstoupím na úvodní stránku web.volny.cz, je tento řetězec již vytvořen a vložen do odkazu ve formuláři pro odeslání přihlašovacích údajů. Tento řetězec vždy na začátku obsahuje hodnotu ffffff. To sice délku session řetězce, kterou je potřeba dohledat zmenšuje z 32 na 27 znaků, nicméně to stále nevede k úspěšnému překonání. Proč session, která je přiřazena na hlavní stránce, vždy obsahuje v úvodu těchto šest písmen, jsem nepochopil. Pokud se totiž uživatel přihlašuje přímo na stránce www.mail1.volny.cz, obsahuje session řetězec náhodné znaky v celé své délce. Zřejmě jde o drobnou chybu ve skriptu, který identifikátor session vytváří. Nicméně, pokud se skript, který má tvorbu session řetězce na starosti, časem nezblázní a nezačne tam těchto stejných znaků dávat hned 25, je bezpečný.
Dostal jsem se do fáze, kdy jsem věděl, že potřebuji zjistit identifikátor session, ale nebyla možnost jej získat. Napadlo mě zkusit tuto session sám přiřadit podle vlastního uvážení a tak jsem tuto hodnotu v url zeditoval na http://www1.mail.volny.cz/~~12345678901234567890123456789012 /app/index.php?orig_host=www1.mail.volny.cz&time=1191523728
Tato adresa byla serverem přijata. Dokonce jsem si mohl i zvolit server, ke kterému budu přistupovat mezi www1-www5. Po chvíli však tento odkaz přestal fungovat a vždy se automaticky změnil. Bylo to dáno hodnotou parametru time, který určuje čas, kdy byla hodnota přiřazena. Pokud je rozdíl oproti současnému času příliš velký, pak se session považuje za neplatnou a změní se. Toto lze jednoduše obejít, když hodnotu dostatečně navýšíme. Systém si již sám nekontroluje, zda hodnotu někdo nezměnil a propustí i takové hodnoty času, které ještě nenastaly. http://www1.mail.volny.cz/~~12345678901234567890123456789012 /app/index.php?orig_host=www1.mail.volny.cz&time=2191523728
V této chvíli jsem již věděl, jak zjistím hodnotu url, protože jsem si ji mohl sám zvolit. Zbývá už jen nalákat případnou oběť, aby se přes útočníkem vytvořenou adresu přihlásila ke svému účtu. Možností má útočník hned několik, od vložení odkazu do diskuzních fór nebo přes ústní nadiktování, pokud by použil sociotechniku. Jak však celkem automaticky může nalákat na tento odkaz předem vytipovanou oběť? Útočníku by stačilo, pokud by své oběti odeslal takto upravený odkaz právě na mail, který se pokouší napadnout. E-mail by okořenil důmyslně zvoleným sociotechnickým textem a pak už by jen vyčkával, než oběť na odkaz klikne. Ve chvíli, kdy by se tak stalo, dojde k přesměrování na úvodní stránku s přihlášením k e-mailovému účtu. Testování na náhodně zvoleném okruhu uživatelů ukázalo, že se většina z nich automaticky přihlašuje znovu. Jsou totiž přesvědčeni, že došlo k nějaké chybě, která je od účtu odhlásila. Tentokrát se však již přihlašují s takovým identifikátorem session, který jim připravil útočník. Jakmile se oběť znovu přihlásí ke svému účtu, stačí aby útočník navštívil jakoukoliv mailovou schránku a změnil v url hodnotu session řetězce, čímž se rázem ocitne uvnitř schránky oběti. Odkaz, který vkládá do e-mailu navíc nemusí směřovat přímo na nové přihlášení. Útočník může oběť nejprve nalákat například na stránku, kde čeká skript, jenž zaznamená kliknutí oběti na odkaz, poté ji přesměruje na přihlášení ke schránce a po vhodně zvolené době, provede CSRF útok, kterým u oběti nastaví přeposílání příchozích e-mailů.
Jednu z možných variant útoku můžete vidět na tomto videu.
Chyby v mailovém serveru, které jsem uvedl, nepatří mezi ty nejnebezpečnější, protože vyžadují od oběti jistou spoluúčast. Přesto si myslím, že na tak významném portálu jakým Volny.cz bezpochyby je, nemají co dělat. Pokud bych měl bezpečnost mailového serveru zhodnotit, pak musím říct, že až na chyby, které jsem popsal, je navržen bezpečeným způsobem. Na druhou stranu si vzhledem ke zbytku webu této společnosti říkám, zda není jen náhoda, že jsem na mailovém serveru nenarazil na XSS chybu. Po jejím nalezení by totiž bylo možné napáchat daleko větší škody. Předávání identifikátoru session v url je sice jednou z variant, jak jej přenášet mezi stránkami, ale může se také stát cílem sociotechniků, kteří mohou po telefonu navést oběť k přihlášení a nechají si tuto hodnotu nadiktovat. Ne všichni lidi jsou natolik zběhlí, aby si uvědomili, že tím dávají svůj účet k dispozici.
Ke zbytku domén na Volny.cz se snad ani nebudu vyjadřovat. Zranitelnosti v podobě XSS čekají na každém kroku a chvílemi to pak vypadá, že webmaster této společnosti o útocích XSS snad ještě nikdy neslyšel. Měl by si uvědomit, že bude-li oběť následovat zákeřný odkaz vedoucí na Volny.cz, může útočník jakkoliv pozměnit obsah zobrazené stránky a to včetně cíle, na který jsou odesílány přihlašovací údaje.
10.10.2007
Po dvou dnech od upozornění provozovatele stránek Volny.cz se situace nijak nezměnila. Webové stránky jsou i nadále plné XSS zranitelností a na majitele e-mailových schránek lze stále prostřednictvím výše uvedeného postupu útočit. Volny.cz dostal příležitost se k celé věci vyjádřit ještě před zveřejněním tohoto reportu. Bohužel však této příležitosti nikdo nevyužil a tak nezbývá než věřit tomu, že jde této společnosti převážně o své klienty...
12.10.2007
Došlo k odstranění několika XSS zranitelností.
15.10.2007
Odstraněny zbývající XSS zranitelnosti.
Současně již také není možné podstrčit řetězec session.