XSS stále na scéně

Petr Závodský 6. 4. 2011

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.

widgety

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í.

Ohodnoťte jako ve škole:

Průměrná známka 1,78

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
120na80.cz: 7 aktivit proti stresu

7 aktivit proti stresu

Lupa.cz: Hardwaru je dost. Jen aby byli konstruktéři

Hardwaru je dost. Jen aby byli konstruktéři

Lupa.cz: Jaký je Průvodce světem Arduina?

Jaký je Průvodce světem Arduina?

120na80.cz: Pyly útočí. Braňte se

Pyly útočí. Braňte se

Vitalia.cz: Proč jsou po vyřazení lepku zdravější?

Proč jsou po vyřazení lepku zdravější?

Vitalia.cz: Nový festival Street Food Rocks: jídlo i hudba!

Nový festival Street Food Rocks: jídlo i hudba!

Podnikatel.cz: Obavy z EET? Nejvíc se bojí, aby na to měli

Obavy z EET? Nejvíc se bojí, aby na to měli

Lupa.cz: Jak na internetu sehnat poctivého řemeslníka?

Jak na internetu sehnat poctivého řemeslníka?

Podnikatel.cz: Informační systém napojený na EET? Skoro jako T602

Informační systém napojený na EET? Skoro jako T602

Vitalia.cz: Tyhle dorty se prostě nepovedly

Tyhle dorty se prostě nepovedly

Lupa.cz: Další útok: po ČSSD je pod palbou ČTK

Další útok: po ČSSD je pod palbou ČTK

Podnikatel.cz: Výběrové řízení pro jádro EET, startuje v květnu

Výběrové řízení pro jádro EET, startuje v květnu

Lupa.cz: Pokus o český PayPal nevyšel. PaySec končí

Pokus o český PayPal nevyšel. PaySec končí

Podnikatel.cz: Nepřišlo vaše hlášení k DPH? Beřnák po vás jde

Nepřišlo vaše hlášení k DPH? Beřnák po vás jde

Měšec.cz: Má vám zdražit elektřina? Stěžujte si

Má vám zdražit elektřina? Stěžujte si

Podnikatel.cz: Kašlali na předpisy, byznys jim zavřeli

Kašlali na předpisy, byznys jim zavřeli

Podnikatel.cz: Velká fotogalerie franšíz. Vybírejte v ČR

Velká fotogalerie franšíz. Vybírejte v ČR

Podnikatel.cz: Cizinci v českém eshopu nechají miliardy

Cizinci v českém eshopu nechají miliardy

DigiZone.cz: DVB-T2 à la Nova: „zadarmo“ bude jen ČT

DVB-T2 à la Nova: „zadarmo“ bude jen ČT

Vitalia.cz: Celníci našli 50 000 pašovaných tablet

Celníci našli 50 000 pašovaných tablet

Ušetřete