Cross-Site Scripting (XSS)

Cross-site scripting – označovaný jako XSS – je zranitelnost aplikace, která může způsobit spoušť v aplikacích a na webových stránkách. XSS je tak rozšířený a potenciálně škodlivý, že je stále zařazován na seznam 10 nejzávažnějších zranitelností projektu OWASP (Open Web Application Security Project).

Ve skutečnosti je Cross-Site Scripting nejčastější zranitelností objevenou od roku 2014 a v roce 2019 se nadále objevuje v Top 3 hlášených zranitelností.

Top disclosed vulnerabilities – State of Open source Report 2020 by Snyk.

Co je Cross-Site Scripting (XSS)?

Cross-site scripting je metoda útoku na webové stránky, která využívá typ injekce k implantování škodlivých skriptů do webových stránek, které by jinak byly produktivní a důvěryhodné. Obecně tento proces spočívá v odeslání škodlivého skriptu na straně prohlížeče jinému uživateli. Jedná se o běžnou bezpečnostní chybu ve webových aplikacích a může k ní dojít v jakémkoli bodě aplikace, kde je přijat vstup z prohlížeče a použit k vytvoření výstupu bez předchozí validace nebo kódování dat.

V některých případech může tuto chybu zavést také skript na straně prohlížeče, což útočníkovi umožňuje její zneužití, aniž by cílový uživatel vznesl požadavek na webovou aplikaci.

Útočníci zneužívají XSS tak, že vytvoří škodlivý kód, který může být směrován jinému uživateli, je pak spuštěn nic netušícím prohlížečem. Protože je skript nejčastěji obsažen v obsahu odpovědi webové aplikace, je spuštěn a má stejný přístup, jako by se jednalo o legitimní skript. Může být umožněn přístup k tokenům relace, souborům cookie a dokonce i k důvěrným nebo citlivým informacím, ke kterým má prohlížeč na daném webu přístup, a dokonce může dojít k přepsání obsahu stránky HTML.

Ochrana před útoky XSS

Automatické vyhledávání, upřednostňování a opravování zranitelností v závislostech open source používaných při vytváření nativních cloudových aplikací

Jak funguje Cross-site Scripting

Zneužití zranitelností cross-site scripting je pro útočníky poměrně jednoduchý úkol. Vložením škodlivého skriptu do nechráněného nebo neověřeného vstupu poskytnutého prohlížečem útočník způsobí, že aplikace skript vrátí a spustí jej v prohlížeči. To mu může umožnit převzít kontrolu nad funkčností aplikace, manipulovat s daty nebo podstrčit další škodlivý kód.

Jaké jsou typy útoků XSS?

Existují tři hlavní typy útoků XSS: odražený XSS, uložený XSS, XSS založený na DOM.

Odražené útoky XSS

Při odražených útocích XSS je škodlivý skript injektován do požadavku HTTP (obvykle pomocí speciálně vytvořeného odkazu poskytnutého uživateli). Jako nejjednodušší varianta využívá vstupní parametry v požadavku HTTP, které lze snadno zmanipulovat tak, aby obsahovaly škodlivý skript. Škodlivý skript se pak odrazí od serveru v odpovědi HTTP a spustí se v prohlížeči oběti.

V tomto případě se chová jako uložený XSS, aniž by skutečně ukládal škodlivá data na server.

Uveďme si příklad odraženého útoku XSS:

Řekněme, že example.com/profile obsahuje parametr name. Adresa URL pro požadavek by vypadala takto: https://example.com/profile?user=Tammy. Na základě tohoto vstupu by tedy webová aplikace odpověděla textem „Ahoj Tammy“ v horní části stránky. Pokud by parametry nebyly ověřeny, aby bylo zajištěno, že obsahují pouze očekávané údaje, mohl by útočník přimět uživatele, aby navštívil škodlivou verzi adresy URL, například takto: https://example.com/profile?user<script>some_malicious_code</script>.

Když je odpověď odeslána prohlížeči, obsahuje tento škodlivý skript, který je pak v prohlížeči spuštěn, pravděpodobně aniž by o tom uživatel věděl. To je příklad odraženého útoku XSS, protože škodlivý kód se okamžitě „odrazí“ zpět k uživateli, který požadavek zadal.

Uložené útoky XSS

Při takzvaném uloženém nebo trvalém útoku XSS je škodlivý obsah doručen přímo spolu s odpovědí serveru, když uživatel načte webovou stránku. Obsah je tedy již uložen v databázi webové stránky (odtud název pro tyto útoky). Uživatelé pak jednoduše vstoupí na napadenou webovou stránku a stanou se obětí takového útoku.

Každý jednotlivý uživatel, který otevře takto napadenou webovou stránku, se tak vystavuje riziku odcizení svých osobních údajů, a proto lze tento typ útoku XSS považovat za nejnebezpečnější.

Ale jak se škodlivý obsah do databáze vůbec dostane? Ve většině případů je zavlečen prostřednictvím nechráněných formulářů webových stránek, ve kterých nejsou uživatelské vstupy řádně validovány a sanitizovány. Pokud data zadaná hackerem nejsou ověřena na straně klienta i serveru, uloží se do databáze. Takovým vstupem může být například textová oblast pro komentáře, textový editor příspěvků, editor osobních údajů nebo jiné formuláře.

Obrázek 1: Průběh uloženého nebo trvalého útoku XSS

Jakmile se útočníkovi podaří odeslat na server škodlivý obsah a tento obsah se na webové stránce objeví bez filtrování, stávají se všichni uživatelé potenciálními oběťmi. běžným prostředkem nápravy uložených útoků XSS je sanitizace vstupu na přední i zadní straně aplikace. Sanitizace zahrnuje kombinaci validace dat a escapování speciálních znaků nebo jejich úplné odfiltrování a je běžným osvědčeným postupem pro zabezpečení webu a JavaScriptu.

Útoky XSS založené na DOM

Document Object Model (DOM) je rozhraní, které umožňuje aplikacím číst a manipulovat se strukturou webové stránky, jejím obsahem a stylem. Při útoku XSS založeném na DOM se zranitelnost nachází ve skriptovém kódu na straně prohlížeče a může být zneužita bez jakékoli interakce se serverem, přičemž modifikuje prostředí v prohlížeči nic netušící oběti.

Útoky XSS založené na DOM se někdy podobají odraženým útokům. Výše uvedený příklad odraženého útoku XSS lze v tomto případě použít s jediným předpokladem:

Řekněme, že aplikace použije parametr dotazu „jméno“, aby se na obrazovce okamžitě zobrazilo jméno uživatele, zatímco čeká na načtení zbytku stránky. Bez řádné validace to může přinést stejný výsledek jako u odraženého útoku, pokud se hackerovi podaří přimět oběť k otevření podezřelého odkazu.

Stejně jako u uloženého útoku XSS by vývojáři měli pro zabránění odraženým útokům a útokům založeným na DOM implementovat validaci dat a vyhnout se zobrazování nezpracovaných uživatelských vstupů, a to i přes přítomnost či nepřítomnost komunikace se serverem.

Jaké jsou vektory útoků Cross-site Scripting?

Existuje několik vektorů, které se běžně používají při útocích XSS:

  • <značka skript>: Značku script lze použít k odkazu na externí kód JavaScriptu, což z ní činí nejjednodušší bod XSS. Útočníci mohou také vložit škodlivý kód do značky skript.
  • Události JavaScriptu: Útočníci mohou do značky skript vložit škodlivý kód: Další oblíbený vektor XSS používaný útočníky, atributy událostí, lze použít v různých značkách. Příkladem jsou atributy jako „onerror“ a „onload“.
  • <značkabody>: Atributy událostí mohou být také zdrojem skriptu, pokud jsou poskytovány prostřednictvím značky „body“.
  • <značka img>: V závislosti na použitém prohlížeči může být tento atribut útočníkům užitečný pro spuštění kódu JavaScriptu.
  • <značkaiframe>: Tento vektor je zvláště účinný při phishingových útocích a umožňuje při útoku XSS vložit do aktuální stránky jinou stránku HTML.
  • <značka input>: Některé prohlížeče umožňují manipulaci prostřednictvím tohoto vektoru, který lze použít k vložení skriptu.
  • <značka link>:
  • <značka tabulka>: Tato značka může obsahovat skript namísto běžného použití odkazu na externí styly:
  • <značkadiv>: Tam, kde atribut background normálně odkazuje na obrázek, může být tento atribut ohrožen odkazem na inkriminovaný skript: Tato značka rovněž obsahuje odkaz na pozadí a lze ji použít stejným způsobem jako značku <table> k odkazu na skript.
  • <object>: Pomocí této značky lze zahrnout skripty z externího webu.

Přestože existují další vektory, které útočníci XSS používají ve snaze ukrást informace a ohrozit webové stránky, jedná se o některé z nejčastěji používaných metod. Vývojáři musí dodržovat správné postupy escapování a sanitizace, aby se před těmito útoky ochránili.

Jaký je dopad zranitelností XSS?

XSS má potenciál způsobit v aplikacích a webových stránkách spoušť. Skutečnost, že se XSS objevilo v každém seznamu 10 nejlepších řešení OWASP, ilustruje potřebu chránit webové aplikace před touto zranitelností.

V závislosti na útočníkovi a jeho zlém úmyslu mohou mít útoky XSS různé dopady, včetně:

  • únos relace uživatele, využití pověření k přístupu na jiné stránky nebo přesměrování uživatele na nechtěné webové stránky,
  • změnu webových stránek nebo vložení sekcí do webové stránky,
  • spuštění skriptů k získání citlivých informací ze souborů cookie nebo databází,
  • pokud má oběť administrátorská práva, může se útok rozšířit na stranu serveru a způsobit další škody nebo získat další citlivé informace.

Jak testovat Cross-site Scripting?“

Testování zranitelnosti XSS začíná ve fázi návrhu a od počátku zohledňuje osvědčené postupy. Návrháři webových stránek by měli zabudovat bezpečnostní opatření, nikoli je přidávat dodatečně.
Počáteční testy zahrnují srovnávací skenování kódu s cílem zjistit použití běžných vektorů útoku XSS, které představují potenciální zranitelnost. To umožňuje zmírnění slabých míst ještě před zahájením skutečného testování aplikace.

Klíčové kroky při testování zranitelností XSS u kritických webových aplikací zahrnují:

  • využití nástroje pro skenování kódu k odhalení zranitelností, který umožní opravu kódu během procesu vývoje,
  • implementaci automatizované testovací funkce, která důkladně a rychle odhalí potenciální zranitelnosti.

Testování kódu na zranitelnosti XSS

Automatické vyhledávání, určování priorit a opravování zranitelností v závislostech open source používaných při vytváření nativních cloudových aplikací

Co je to příklad Cross-site Scripting?

Skriptování napříč stránkami lze zneužít, když webová aplikace používá data dodaná prohlížečem k vytváření odpovědí na požadavky uživatele. Velmi zjednodušeným příkladem může být případ, kdy webová aplikace využívá parametr v adrese URL k tomu, aby uživateli poskytla přizpůsobenou odpověď.

Řekněme, že stránka exmple.com/profile obsahuje parametr name. Adresa URL pro požadavek by vypadala takto: https://example.com/profile?user=Tammy. Webová aplikace na základě tohoto vstupu odpoví v horní části stránky textem „Ahoj Tammy“.

Pokud není parametr uživatele ověřen, aby bylo zajištěno, že obsahuje pouze očekávané údaje, mohl by útočník nechat uživatele navštívit škodlivou verzi adresy URL, která by vypadala takto:
https://example.com/profile?user<script>some_malicious_code</script>.
Když je odpověď odeslána do prohlížeče, obsahuje tento škodlivý skript, který je pak v prohlížeči spuštěn, pravděpodobně aniž by o tom uživatel věděl. To je příklad odraženého útoku XSS. Škodlivý kód se okamžitě „odráží“ zpět k uživateli, který požadavek zadal.

Jak zabránit Cross-site Scripting?

Existuje několik klíčových opatření pro prevenci útoků XSS: zvyšte vzdělání a povědomí vývojářů, prověřujte a ověřujte vstupní data a skenujte kód na zranitelnosti.

  • Vzdělání a povědomí: Ujistěte se, že všichni vývojáři, návrháři webových stránek a týmy kontroly kvality jsou obeznámeni s metodami, které hackeři používají ke zneužití zranitelností, a poskytněte jim pokyny a osvědčené postupy pro kódování. To zahrnuje správné techniky escapování/kódování pro prostředí aplikace (JavaScript, HTML atd.).
  • Sanitizujte vstupy: Ať už se jedná o interní webové stránky nebo veřejné weby, nikdy nedůvěřujte platnosti vstupních dat uživatele. Prověřte a ověřte všechna datová pole, zejména pokud budou obsažena jako výstup HTML.
  • Prověřte kód:
  • Zásady zabezpečení obsahu: Implementujte software, který skenuje kód na zranitelnosti, včetně cross-site scripting, abyste zajistili dodržování osvědčených postupů a minimalizovali vystavení XSS a dalším zranitelnostem uvedeným na seznamu OWASP: Pomocí zásad zabezpečení obsahu (CSP) lze definovat, co webové stránky mohou dělat, a tím snížit riziko útoku XSS. Pomocí CSP lze XSS zcela zablokovat (zablokováním všech řádkových skriptů) nebo snížit riziko na mnohem nižší.

OWASP poskytuje další návod, jak zabránit zranitelnosti XSS, pomocí obsáhlého přehledu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.