Portál AbcLinuxu, 20. května 2024 19:25

Cross-site Request Forgery

9.10.2006 14:58 | Přečteno: 1441× | poslední úprava: 10.10.2006 19:58

Znáte XSS? Ano? A CSRF?

Popis zneužití chyby

Obě zkratky označují slabinu webového prostředí, na kterou lze zaútočit. Obě vyžadují obětního uživatele, který funguje jako jakýsi hostitel. Obě zneužívají důvěru mezi uživatelem a webovým serverem. Dále se však rozcházejí. Ta první, cross-site scripting, je postavena na tom, že uživatel věří serveru. Ta druhá, cross-site request forgery, funguje naopak: Server věří uživateli.

Uživateli je obvykle nabídnuta stránka, která kromě jiného obsahuje kód, který přinutí prohlížeč odeslat HTTP požadavek na napadaný (chce se mi říci útočený) server. Tento požadavek je formálně zcela v pořádku, neobsahuje žádné zákeřnosti ve stylu XSS. On jen způsobuje vykonání akce v kontextu obětního uživatele. Akce, po které dychtí útočník, ale nebohý uživatel by s ní nikdy nesouhlasil.

Příklad

Zaslechl jsem následující historku: V jedné organizaci probíhala volba mezi dvěma kandidáty za pomoci hlasovaní kliknutím na patřičný odkaz. Hlasovací aplikace byla uschována v informačním systému, do kterého byl přístup umožněn jen po úspěšné autentizaci.

Jeden z kandidátů rozeslal zprávu prostřednictvím právě toho informačního systému, který obsahoval odkaz na stránku s jeho volebním programem. Když zvědavý volič klikl, zobrazil se pouze rýpavý text: Hádejte, kdo tohle kolo vyhraje! Ve skutečnosti odkazovaná stránka obsahovala v kódu takovýto odkaz na obrázek:

<img src="http://informacnisystem/hlasuju-pro-losnu">

Útok fungoval. V okamžiku, kdy se volič rozhodl přečíst si volební program, byl již do systému přihlášen a následně prohlížeč bez jeho vědomí za něj zahlasoval tím, že se snažil stáhnout neexistující obrázek.

Ochrana

Chyba je v tom, že server slepě věří požadavkům přicházejícím od uživatele. Ochrana proti CSRF útokům spočívá ve vyměnění trvalé autentizace uživatele na tranzitivní (např. předávání tokenu mezi stránkami přes skrytá pole formulářů) nebo vytváření unikátních URL, které nelze předem odhadnout.

Výsledky pokusu

Skrytou součástí tohoto článku byl pokus, který měl ověřit funkčnost výše uvedeného útoku na čtenářích Abíčka.

Text článku obsahoval následující kód:

<div class="hidden">
    <img src="http://www.abclinuxu.cz/blog/EditMonitor/153095?action=toggle"
        alt="Proof-of-concept exploit">
</div>

který způsobil, že při každém zobrazení článku byl přihlášenému čtenáři změněn stav Sledování. Tj. při prvním zobrazení mu bylo sledování zapnuto. Za dobu 1 dne článek přečetlo 236 registrovaných uživatelů, přičemž čítač funkce zapnutého sledovaní se vyšplhal na 80. Zdá ze, že po získání prvního komentáře se někteří vrátili k článku, aby vypnuli, již vypnuté sledování. Zároveň prvních 30 minut vedl skrytý odkaz jinam, tudíž první čtenáři (asi 28) byly přihlášeni k jiné diskuzi.

Tímto se všem čtenářům omlouvám, že se nedobrovolně zúčastnili tohoto testu.

       

Hodnocení: 95 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (40) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

9.10.2006 15:39 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Odpovědět | Sbalit | Link | Blokovat | Admin
Tenhle zápisek jsem potřeboval asi tak před půl rokem :-).
Weblate - překládání přes web | Gammu SMSD - posílání SMS | Blog
10.10.2006 15:59 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Odpovědět | Sbalit | Link | Blokovat | Admin

Skrytou součástí tohoto článku byl pokus, který měl ověřit funkčnost výše uvedeného útoku na čtenářích Abíčka.

Text článku obsahoval následující kód:

<div class="hidden">
    <img src="http://www.abclinuxu.cz/blog/EditMonitor/153095?action=toggle"
        alt="Proof-of-concept exploit">
</div>

který způsobil, že při každém zobrazení článku byl přihlášenému čtenáři změněn stav Sledování. Tj. při prvním zobrazení mu bylo sledování zapnuto. Za dobu 1 dne článek přečetlo 236 registrovaných uživatelů, přičemž čítač funkce zapnutého sledovaní se vyšplhal na 80. Zdá ze, že po získání prvního komentáře se někteří vrátili k článku, aby vypnuli, již vypnuté sledování. Zároveň prvních 30 minut vedl skrytý odkaz jinam, tudíž první čtenáři (asi 28) byly přihlášeni k jiné diskuzi.

Tímto se všem čtenářům omlouvám, že se nedobrovolně zůčastnili tohoto testu.

freshmouse avatar 10.10.2006 16:04 freshmouse | skóre: 42 | blog: Bruno Banány
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Hmm.
10.10.2006 16:34 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
To by mě zajímalo, kde se v CSS Abíčka vzala ta třída hidden - já ji tam určitě nepřidal.
10.10.2006 16:56 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Nemáte CVS? :-)
10.10.2006 17:12 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
To nebylo myšleno tak docela vážně. Přidal jsem to tam určitě buď já nebo Leoš :-) (a protože já to určitě nebyl...). Jen nechápu proč.
10.10.2006 20:19 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Tusim ze to bylo kvuli softwaru, nejak javascriptove schovavanym elementum.
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
Brabi avatar 10.10.2006 16:59 Brabi | skóre: 8 | blog: Fiend's records | Praha
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
A mě se zdálo, že vzhledem k počtu příspěvků post sleduje nějak moc lidí, ale myslel jsem, že je to atraktivitou tématu. :-)
Pets are always a great help in times of stress. And in times of starvation too, o'course.
David Watzke avatar 10.10.2006 19:19 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Odpovědět | Sbalit | Link | Blokovat | Admin
Můžeš ty výsledky popisu vytáhnout z tagu INS? :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
10.10.2006 20:03 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
A duvod? Krome toho, ze to vypada hnusne?

Pomoci CSS neni mozne testovat, zda element obsahuje nejakeho potomka, ze? INS totiz muze obsahovat blokove elementy. Mas nejaky napad, jak to na nakodit? Pridani nove tridy mi neprijde jako dobry napad.
David Watzke avatar 10.10.2006 20:21 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Cross-site Request Forgery
Krome toho, ze to vypada hnusne?
Nic jinýho mě nenapadá...
Pomoci CSS neni mozne testovat, zda element obsahuje nejakeho potomka, ze? INS totiz muze obsahovat blokove elementy. Mas nejaky napad, jak to na nakodit?
To bohužel netuším...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.