A8 - Cross-Site Request Forgery

A8 - Cross-Site Request Forgery (CSRF)

Zranitelnosti umožňující napadení podvržením požadavku webové aplikace.

CSRF útočníkovi umožňuje prohlížeč oběti donutit k vykonání předem autentizovaného požadavku nezabezpečenou aplikací. Tak může útočník např. provést transfer, odeslat zprávu, smazat účet, přidat záznam; útočník může takto provést mnoho jiných operací.

    Původce hrozbyVektor útokuBezpečnostní slabinaTechnické dopadyObchodní dopady
    Aplikační specifikum Zneužitelnost
    průměrná
    Rozšíření
    běžné
    Zjistitelnost
    snadná
    Dopad
    střední
    Aplikační / obchodní specifikum
    Útočník může podstrčit obsah do prohlížeče uživatele vašich stránek, a tím bez jeho vědomí zaslat požadavek na webový server. Může jít o kteroukoli webovou stránku nebo jiný zdroj webového obsahu, ke kterému má uživatel přístup. Útočník vytvoří podvržený požadavek HTTP a různými podvodnými technikami (obrázkové značky, XSS aj.) ho předloží oběti. Pokud je uživatel v aplikaci přihlášen, útok se zdaří.

    CSRF využívá skutečnosti, že většina webových aplikací umožňuje útočníkům, aby odvodili podrobnosti jednotlivých akcí.

    Vzhledem k tomu, že prohlížeč zasílá automaticky některé identifikační údaje, např. cookies relace, útočník může vytvořit stránku schopnou generovat podvržené požadavky, které jsou k nerozeznání od těch oprávněných.

    Detekce CSRF je poměrně snadná, a to pomocí penetračních testů nebo analýzou kódu.

    Útočník může přimět oběť, aby provedla změny stavu, k nimž je oprávněna, např. aktualizace stavu účtu, nákup, odhlášení, ba i přihlášení.

    Zvažte obchodní hodnotu dotčených dat a funkcí aplikace. V případě útoku si nemůžete být jisti, zda uživatel provedené akce zamýšlel udělat.

    Zvažte také dopad na svou pověst.

    Jsem zranitelný vůči „CSRF“?

    Aplikace je napadnutelná, pokud v některém odkazu nebo formuláři chybí token CSRF, který nelze odhadnout. Bez něj může útočník podsunout škodlivý dotaz na stránku. Jako alternativní ochranu můžete od uživatele požadovat ověření, že opravdu zamýšlel dotaz odeslat, např. opětovné zadání hesla nebo jiný způsob, kterým prokáže, že je skutečným uživatelem (CAPTCHA apod.).

    Zaměřte se na odkazy a formuláře sloužící k provedení změn stavu – ty jsou nejdůležitějším cílem útoku CSRF.

    Zkontrolujte vícekrokové operace, protože ty jsou ohroženy ze své podstaty. Útočníci mohou snadno podstrčit celou řadu požadavků použitím více tagů nebo prostřednictvím JavaScriptu.

    Je nutno poznamenat, že cookies relace, zdrojová adresa IP a další informace automaticky zasílané prohlížečem neposkytují ochranu proti CSRF, protože se mohou vyskytovat i v podvržených dotazech.

    Nástrojem CSRF Tester od OWASPu si můžete vygenerovat testové případy, pomocí nichž uvidíte nebezpečí spojená se zranitelností CSRF.

    Jak mohu předejít CSRF?
    Prevence CSRF obvykle spočívá v začlenění nepředvídatelného tokenu do každého požadavku HTTP. Unikátní token by měla mít přinejmenším každá uživatelská relace.
    • 1. Upřednostňovaným způsobem je vložit unikátní token do skrytého pole, které se pak odešle v těle požadavku HTTP. Token tak nebude součástí URL, kde by bylo větší riziko jeho odhalení útočníkem.
    • 2. Unikátní token může být také obsažen v samotném URL nebo v parametru URL, což ovšem zvyšuje riziko, že když útočník zjistí URL, token bude prozrazen. CSRF Guard od OWASPu může automaticky vložit tyto tokeny do aplikací v Java EE, .NET nebo PHP. ESAPI od OWASPu obsahuje metody, které mohou vývojáři použít na obranu proti CSRF.
    • 3. Proti CSRF může také ochránit požadování opětovné autentizace nebo jiného způsobu ověření, že uživatel je skutečný (např. CAPTCHA).
    Příklady možných útoků
    Aplikace umožní uživateli zaslat požadavek na změnu stavu, který neobsahuje žádné citlivé informace. Například:

    http://example.com/app/transferFunds?amount=1500
    &destinationAccount=4673243243

    Útočník podle něj vytvoří požadavek, který převede peníze z účtu oběti na svůj účet. Pak vloží tento požadavek na nějakou svou stránku do požadavku na obrázek nebo do iframu:

    <img src="http://example.com/app/transferFunds?
    amount=1500&destinationAccount=attackersAcct#“
    width="0" height="0" />

    Když oběť navštíví jednu z těchto útočníkových stránek, podvržený požadavek se odešle, a pokud bude oběť zároveň přihlášena k example.com, bude požadavek automaticky obsahovat informace o relaci oběti, čímž bude autorizován.

    Odkazy
    OWASP:

    Další požadavky na řízení přístupu viz v ASVS requirements area for Access Control (V4).

    Externí:
    Originál o Cross-Site Request Forgery (CSRF) v angličtině