Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

XSS

  • Cross Site Scripting (XSS) je zranitelnost webových aplikací, která umožňuje útočníkovi vložit škodlivý JavaScript kód do webové stránky zobrazované ostatním uživatelům.

  • Tento kód se následně spustí v prohlížeči oběti, což může vést ke krádeži cookies, session tokenů, přesměrování uživatele na škodlivé stránky nebo manipulaci s obsahem stránky.

  • XSS se vyskytuje v situacích, kdy webová aplikace nesanitizuje uživatelský vstup pořádně.

  • Nejčastěji se používá testovací payload <script>alert('XSS!')</script>, který zobrazí jednoduché upozornění, ale útočníci mohou použít mnohem sofistikovanější kód pro různé škodlivé účely.

Alternativy k <script>

  • Existují i jiné způsoby, jak spustit škodlivý JavaScript kód bez použití <script> tagu, například pomocí atributů onerror nebo onclick v HTML elementech. Například:
<img src=# onerror="alert('XSS!')">
  • Toto má několik výhod oproti tradičnímu <script> tagu, protože některé filtry mohou být navrženy tak, aby blokovaly pouze <script> tagy, ale ne jiné způsoby spouštění JavaScriptu.
  • Dále také <skript> tag může být umístěn pouze v určitých částech HTML dokumentu, zatímco <img> s onerror může být umístěn téměř kdekoli, což zvyšuje pravděpodobnost úspěchu útoku.

Obecný příklad útoku

  • Nechť je webová aplikace, kde si uživatelé mohou ukládat cítaty a ostatní uživatelé je mohou vidět:
<h2>Citáty</h2>
<ul>
 <li>Život je krásný.</li>
 <li>Každý den je nový začátek.</li>
 <li>Nezáleží na tom, jak pomalu jdeš, dokud nezastavíš.</li>
 <li>Štěstí přeje připraveným.</li>
 <li>I malý krok vpřed je stále krokem k cíli.</li>
 <li>Největší překážky jsou často jen v naší hlavě.</li>
 <li>Kdo chce, hledá způsoby. Kdo nechce, hledá důvody.</li>
 <li>Úspěch je součet malých snah opakovaných každý den.</li>
 <li>Nikdy není pozdě začít znovu.</li>
 <li>Sny se stanou skutečností, když pro ně něco uděláš.</li>
</ul>

Citáty provided by ChatGPT

Pokud webová aplikace umožňuje uživatelům přidávat své vlastní citáty bez řádné sanitizace, útočník může vložit škodlivý JavaScript kód místo citátu a stránka bude vypadat například takto:

<h2>Citáty</h2>
<ul>
  <li>Život je krásný.</li>
  <li>Každý den je nový začátek.</li>
  <li>Nezáleží na tom, jak pomalu jdeš, dokud nezastavíš.</li>
  <li>Štěstí přeje připraveným.</li>
  <li>I malý krok vpřed je stále krokem k cíli.</li>
  <li>Největší překážky jsou často jen v naší hlavě.</li>
  <li>Kdo chce, hledá způsoby. Kdo nechce, hledá důvody.</li>
  <li>Úspěch je součet malých snah opakovaných každý den.</li>
  <li>Nikdy není pozdě začít znovu.</li>
  <li>Sny se stanou skutečností, když pro ně něco uděláš.</li>
  <li><img src=# onerror=alert('XSS!')></li>
</ul>

Ukázka

  • Takto to bude vypadat v praxi:

Citáty

  • Život je krásný.
  • Každý den je nový začátek.
  • Nezáleží na tom, jak pomalu jdeš, dokud nezastavíš.
  • Štěstí přeje připraveným.
  • I malý krok vpřed je stále krokem k cíli.
  • Největší překážky jsou často jen v naší hlavě.
  • Kdo chce, hledá způsoby. Kdo nechce, hledá důvody.
  • Úspěch je součet malých snah opakovaných každý den.
  • Nikdy není pozdě začít znovu.
  • Sny se stanou skutečností, když pro ně něco uděláš.
  • V tomto příkladu, když uživatel zadá škodlivý kód do vstupního pole a klikne na tlačítko “Přidat citát”, nový citát se přidá do seznamu a škodlivý JavaScript kód se spustí, což zobrazí upozornění “XSS!”.
  • Pokud by jsme v tomto místě použili <script>alert('XSS')</script> tag, nefungovalo by to. To protože <script> není umístěn na správném místě v HTML dokumentu.

Druhy XSS

  • Existují tři hlavní druhy XSS útoků:

Stored

  • Útočník vloží škodlivý kód do databáze nebo jiného úložiště na serveru, a tento kód se pak zobrazuje všem uživatelům, kteří navštíví infikovanou stránku.
  • Je to nejzávažnější typ XSS útoku, protože škodlivý kód je uložen na serveru a může být zobrazen mnoha uživatelům.
  • Například, pokud útočník vloží škodlivý JavaScript kód do komentáře na blogu, tento kód se zobrazí všem návštěvníkům, kteří si tento komentář přečtou.

Reflected

  • Útočník vloží škodlivý kód do URL nebo formuláře, a tento kód se pak odrazí zpět uživateli v odpovědi serveru.
  • Tento typ XSS útoku je méně závažný než stored XSS, protože škodlivý kód není uložen na serveru a je zobrazen pouze uživateli, který klikne na škodlivý odkaz nebo odešle škodlivý formulář.
  • Například útočník může vytvořit škodlivý odkaz, který obsahuje škodlivý JavaScript kód, a když uživatel klikne na tento odkaz, kód se spustí v jeho prohlížeči
    • https://example.com/search?q=<script>alert('XSS!')</script>

DOM-based

  • DOM XSS se vyznačuje tím, že škodlivý kód je zpracováván pouze na straně klienta (v prohlížeči) a není odesílán na server.
  • Útočník vloží škodlivý kód do URL nebo formuláře, a tento kód se pak zpracovává JavaScriptem na straně klienta, což může vést ke spuštění škodlivého kódu v prohlížeči oběti.
  • XSS není DOM based, pokud se nevyužívá JavaScript pro zpracování škodlivého kódu na straně klienta.
  • Tento typ XSS útoku je nejméně závažný, protože škodlivý kód není zpracováván serverem a je zobrazen pouze uživateli, který klikne na škodlivý odkaz nebo odešle škodlivý formulář.
  • Například útočník může vytvořit škodlivý odkaz, který obsahuje škodlivý JavaScript kód, a když uživatel klikne na tento odkaz, kód se zpracuje v jeho prohlížeči a může vést ke spuštění škodlivého kódu.
    • https://example.com/page#<script>alert('XSS!')</script>

Následky XSS

  • Odcizení cookies a session tokenů, což může vést k převzetí účtu oběti.
  • Přesměrování uživatele na škodlivé stránky, které mohou obsahovat malware nebo phishingové útoky.
  • Měnání obsahu stránky, což může být použito k šíření dezinformací nebo k manipulaci s uživateli.

Ochrana proti XSS

  • Pro ochranu proti XSS útokům je důležité správně validovat a sanitizovat uživatelský vstup, používát knihovny pro escapování.
  • Používání Content Security Policy (CSP) může pomoci omezit možnosti spouštění škodlivého JavaScript kódu na webové stránce.
  • Pravidelně aktualizovat software a používat bezpečnostní záplaty pro webové servery a frameworky, které mohou obsahovat opravy pro známé XSS zranitelnosti.

Nástroje

Nástroje, které pomáhají při testování proti XSS útokům, zahrnují:

  • Burp Suite: Populární nástroj pro testování bezpečnosti webových aplikací, který obsahuje funkce pro detekci a exploitaci XSS zranitelností.
  • ZAP: Open-source nástroj pro testování bezpečnosti webových aplikací, který také nabízí možnosti pro detekci XSS zranitelností.
  • XSStrike: Nástroj pro detekci a exploitaci XSS zranitelností, který se zaměřuje na různé techniky útoků a obchází běžné filtry.

Shrnutí

  • XSS je zranitelnost webových aplikací, která umožňuje útočníkovi vložit škodlivý JavaScript kód do webové stránky zobrazované ostatním uživatelům.
  • Jedná se o typ útoku způsobený nedostatečnou sanitizací uživatelského vstupu.
  • Může vést ke krádeži cookies, session tokenů, přesměrování uživatele na škodlivé stránky nebo manipulaci s obsahem stránky.
  • Pro ochranu proti XSS útokům je důležité správně validovat a sanitizovat uživatelský vstup, používat knihovny pro escapování a implementovat Content Security Policy (CSP).

Reference

  • https://owasp.org/www-community/attacks/xss/
  • https://portswigger.net/web-security/cross-site-scripting