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.

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

Našli jste v článku chybu?
120na80.cz: Jak se zbavit nadměrného pocení?

Jak se zbavit nadměrného pocení?

Vitalia.cz: Výživáři se shodnou, nejlepším pitím je lassi

Výživáři se shodnou, nejlepším pitím je lassi

DigiZone.cz: Skylink o půlnoci vypnul 12 525

Skylink o půlnoci vypnul 12 525

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

Vitalia.cz: Pepsi Cola mění sirup za cukr

Pepsi Cola mění sirup za cukr

Podnikatel.cz: Italské těstoviny nebyly k mání, tak je začal vyrábět

Italské těstoviny nebyly k mání, tak je začal vyrábět

120na80.cz: Tipy pro odvodnění organismu

Tipy pro odvodnění organismu

Měšec.cz: Investice do drahých kovů - znáte základní chyby?

Investice do drahých kovů - znáte základní chyby?

Podnikatel.cz: Tahle praktika stála šmejdy přes milion

Tahle praktika stála šmejdy přes milion

Vitalia.cz: Největší chyby při podávání vína?

Největší chyby při podávání vína?

Podnikatel.cz: Profese budoucnosti? Úředník nepřežije

Profese budoucnosti? Úředník nepřežije

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Podnikatel.cz: 3 velké průšvihy obchodních řetězců

3 velké průšvihy obchodních řetězců

Lupa.cz: Tudy proudí váš hlas i data. V zákulisí CETINu

Tudy proudí váš hlas i data. V zákulisí CETINu

Vitalia.cz: Bio vejce nepoznají ani veterináři

Bio vejce nepoznají ani veterináři

DigiZone.cz: Sat novinky: Skylink skončil s kanály ČT

Sat novinky: Skylink skončil s kanály ČT

Vitalia.cz: Signál roztroušené sklerózy: brnění končetin

Signál roztroušené sklerózy: brnění končetin

Vitalia.cz: Zmrzlinu? Ani snad ne

Zmrzlinu? Ani snad ne

DigiZone.cz: DAB už i z Košic. A překvapivě!

DAB už i z Košic. A překvapivě!

DigiZone.cz: Nestihli jste Bonda na ČT2? Zkuste RTVS

Nestihli jste Bonda na ČT2? Zkuste RTVS