Hlavní navigace

XSS stále na scéně

6. 4. 2011
Doba čtení: 4 minuty

Sdílet

Nebezpečí na webu přibývá a za jedno z nejběžnějších a nejnebezpečnějších lze považovat cross site scripting – skriptování napříč sítěmi, běžně označované XSS (někdy CSS – neplést s kaskádovým stylem). Bez ohledu na to, kolik toho o této slabině bylo již napsáno, XSS je záležitostí stále více než pouze aktuální.

Obecné informace:

Základní informace na stránkách OWASP: Top 10 2010 – A2

Potencionální útočníci: Externí i interní uživatelé systému, administrátoři. Prakticky každý, kdo může do systému poslat nedůvěryhodná data.

Vektor útoku: Útočník do systému odešle skript (nebo jeho část), který využívá prohlížeč. Téměř každý zdroj dat může být napaden, včetně interních zdrojů, jako jsou data v databázi.

Slabina: Cross-site Scripting je jednou z nejrozšířenějších bezpečnostních slabin webových aplikací. K XSS chybě dochází, pokud odeslaný požadavek dodává obsah, jenž není dostatečně kontrolován.

Útok spočívá ve vložení nebezpečného kódu napsaného v klientském skriptovacím jazyku do obsahu webové stránky. XSS útoky bývají úspěšnější v kombinaci se sociálním inženýrstvím, neboť někdy je nutné donutit uživatele ke spolupráci.

Rozeznáváme tři základní typy XSS útoků:

1. Stored (persistent, second-order)

Patří k nejnebezpečnějším XSS útokům. Oběť na napadené stránky nemusí vstupovat přes upravený link. Skript je generován přímo z databáze. Útočník skript do databáze může vložit např. přes komentáře v diskusních fórech (viz. Scénář 1. uvedený níže), ale i přímým vložením do databáze (např. přes SQL Injection). Pokud je skript načítán z databáze, pak je ohrožen každý, kdo navštíví napadenou stránku.

2. Reflected (non-persistent, okamžitý)

Tento velmi běžný typ XSS útoku se projevuje okamžitým vykonáním útočného skriptu – webová aplikace zobrazí výsledek okamžitě po odeslání požadavku, skript se nikam neukládá. V praxi se běžně využívá parametrů v URL, které se nahradí nebo doplní útočnou konstrukcí skriptu. Pokud na takové URL oběť klikne, vykoná se útočný skript a útočník může např. zcizit údaje uložené v uživatelově prohlížeči. (viz. Scénář 2. uvedený níže).

3. DOM (Document Object Model) based XSS (lokální)

Je velmi podobný reflected XSS. Avšak k útoku je využit existujícího klientského skriptu – přenesením (např. z URL.) kódu do skriptu stránky (viz. Scénář 3. uvedený níže). Lokální skripty umožňují poměrně nebezpečné útoky (volání document.location, document.URL, document.referrer a dalších DOM metod v těle skriptu), neboť některé prohlížeče považují lokální skripty za bezpečné.

Je nutné poznamenat, že XSS slabiny nesouvisí pouze s JavaScirptem. XSS slabiny můžeme nalézt i v technologiích, jako jsou ActiveX, Flash, VBScript, HTML, Java – při kategorizaci XSS s tím bývá někdy docela zmatek.

Detekce XSS chyb (zejména JavaScriptových) je poměrně snadná pomocí testování anebo analýzy kódu.

Technické dopady: Útočníci mohou v prohlížeči oběti spouštět skripty. Mohou tak odcizovat uživatelské relace, deformovat stránky, vkládat nepřátelský obsah, přesměrovávat uživatele, vkládat malware atd.

Obchodní dopady: Zvažte, jakou hodnotu mají všechna zpracovávaná data. Též zvažte obchodní dopad zveřejnění zranitelnosti.

Příklady scénářů:

K simulaci útoků vám postačí nástroj WebGoat. Některé složitější útoky mohou vyžadovat proxy, vzdálené uložení útočného skriptu, práci s cookies atd.

Scénář 1. Cross-Site Scripting (XSS) – Stored XSS Attacks:

1. Spusťte WebGoat.

2. WebGoat: Cross-Site Scripting (XSS) / Stored XSS Attacks. Vyplňt název (Title). Do pole Message vložte např. JavaScriptový kód:

<script>window.location.href="http://utocnikuvweb.site"</script>.

Odešlete Submit.

3. Zpráva byla uložena.

4. V Message list klikněte na vytvořenou zprávu. Po kliknutí dojde k přesměrování na http://utocnikuvweb.site. Název útočníkovy domény může být velmi nenápadný (např. podobný názvu domény, ze které jste byli přesměrování). Grafická podoba útočníkova webu může být identická s webem, z nějž jste vstoupili – navíc po vás může útočník požadovat např. zadání přihlašovacích ú­dajů.

Scénář 2. Cross-Site Scripting (XSS) – Reflected XSS Attacks:

1. Spusťte WebGoat.

2. WebGoat: Cross-Site Scripting (XSS) / Reflected XSS Attacks. Zadejte Title. Do pole za Enter your there digit access code: vložte např. JavsScriptový kód:

<script>alert('XSS')</script>

3. Potvrďte Purchase.

4. Pokud se vám zobrazí alert XSS, nalezli jste XSS slabinu.

Scénář 3. Cross-Site Scripting (XSS) – DOM Based XSS Attacks:

1. Mějme stránku, která umožňuje výběr jazykové verze přes URL http://www.nejaky web.site/page­.html?default=Fren­ch. Pro tyto účely obsahuje JavaScriptový kód:

<select><script>
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8"</OPTION>";
document.write("<OPTION value=2>English</OPTION>");
</script></select>

2. Útočník oběti podstrčí URL:

http://www.nejakyweb.site/page.html?default=<script>alert(document.cookie)</script>

Může se však jednat o daleko zákeřnější skript.

CS24_early

4. Oběť po aktivaci upraveného linku spustí i útočný skript.

Závěr

XSS útoky nejsou obtížné. XSS slabiny se vyskytují velmi často. Technické dopady můžeme považovat za průměrné, přičemž slabinu lze odhalit poměrně snadno. Zvláště značný výskyt XSS tuto techniku útoku staví na výsluní mezi nezávažnější rizika webových aplikací.

Byl pro vás článek přínosný?

Autor článku

Petr Dušek se věnuje kvalitě a testování SW, inicioval také vznik projektů CAPTCHA Help a Skener webu či překlad OWASP Top 10.