Cross-site scripting (XSS)
Co to je?
Cross-Site Scripting (XSS) je jedním z nejpoužívanějších způsobů útoku na webové stránky. XSS zranitelnosti umožňují útočníkům ovládat webovou stránku při návštěvě jiných uživatelů.
XSS je jednou z nejčastěji hlášených webových zranitelností.
Jak to funguje?
Útočník vloží do nějakého pole pro vstupy na webové stránce nebo aplikaci škodlivý kód ve tvaru, který naruší script stránky (nejčastěji pomocí neočekávaného syntaxu) a vykoná se místo něj. Tento kód se následně spouští v internetovém prohlížeči každého návštěvníka stránky, aniž by si toho všimnul.
K čemu může útočník využít znanitelnost XSS?
Krádež identity či účtu. Útočník může získat přístup k uživatelskému účtu, případně dalším účtům na jiných stránkách se stejnými přihlašovacími údaji. Škodlivý kód může odesílat všechny vyplněné údaje do přihlašovacího formuláře nebo ukládat bezpečnostní tokeny potřebné k přihlášení. Útočník může získat o majitelích účtu spoustu informací a vydávat se za ně.
Instalace malware do počítače. Kód může stáhnout nějaký virus do počítače a následně ho spustit. Útočník může potom dále sledovat uživatele (spyware) nebo mu třeba zašifrovat data a vydírat ho (ransomware ...).
Zapojení do počítače do DDoS útoků. Útočník může pomocí kódu ovládat napadený počítač a zapojit ho do nějakého DDoS útoku (zahlcení serveru spoustou požadavků z různých počítačů v krátkém čase).
Ochrana systémů proti zranitelnosti XSS
Escapování
Webové stránky se skládají z HTML s dynamickým obsahem vloženým při vykreslování stránky. Do tohoto dynamického obsahu hacker vloží kód upravený tak, aby narušil jeho syntax a přidal se do něj. Například vložíme-li do pole pro komentáře na správném místě kód <button onclick=""window.allert("Tato webová stránka je napadena!">, vznikne po zpracování na místě komentáře tlačítko, po jehož stisknutí se objeví vyskakovací okno s textem. Jednoduše se kód přidá do stránky, jako by byl její součástí.
Aby tomu správce stránky předešel, může využít escapování. To znamená, že se všechny znaky, které by mohly narušit syntax kódu (<>"* apod.) nahradí jejich ekvivalenty v tabulce ASCII (např. místo < uloží <). Pokud bychom v tomto případě do pole vložili <button onclick=""window.allert("Tato webová stránka je napadena!">, zobrazil by se po zpracování jenom text <button onclick=""window.allert("Tato webová stránka je napadena!">.
Seznam povolených vstupů
Pokud je formulář jednoduchý a má jenom několik možných vstupů (třeba číslo), je nejjednodušší vytvořit jejich seznam nebo najít jejich společné parametry a ostatní vstupy zablokovat (třeba pomocí parametru "type" HTML tagu).
Content-Security Policy
Lze zakázat třeba pomocí <meta> tagu zakázat načítání JavaScriptu sřetích stran nebo zakázat provádění inline scripty přímo v HTML. Stejně se v současné době pro přehlednost a lepší údržbu většinou ukládají scripty do souborů mimo HTML.
Příklad <meta> tagu:
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' https://apis.tomasek.work/">
Příklad hlavičky:
Content-Security-Policy-Report-Only: script-src 'self'; report-uri https://tomasek.work/policy
Sanitizace HTML
U některých webů je důležité HTML vložené uživateli uložit bez úprav. V takovém případě je důležité použít nějaké knihovny zaručující, aby se kód nespustil.
Zdroje:
The Hacker News. (n.d.-a). New vulnerability in popular WordPress plugin exposes over 2 million sites to cyberattacks. https://thehackernews.com/2023/05/new-vulnerability-in-popular-wordpress.html
The Hacker News. (n.d.-a). Cross site scripting vulnerability at Google Appspot. https://thehackernews.com/2011/08/cross-site-scripting-vulnerability-at.html
InfoCon. (n.d.-a). Cross-Site Scripting. http://*****************************************************************.onion/*************************.html
Je neetické zveřejňovat některé odkazy na darkweb. Jsou nahrazeny hvezdičkami (********).