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?
Podnikatel.cz: Český podnikatel a #brexit. Co nastane?

Český podnikatel a #brexit. Co nastane?

Vitalia.cz: Jeďte do lázní, to je holistika

Jeďte do lázní, to je holistika

Root.cz: Střílejte v obýváku, stačí kamera a projektor

Střílejte v obýváku, stačí kamera a projektor

120na80.cz: Cestovní nevolnost. Co pomůže?

Cestovní nevolnost. Co pomůže?

Vitalia.cz: 3× o tucích: proč je potřebujeme?

3× o tucích: proč je potřebujeme?

120na80.cz: Léky a dietní opatření při kopřivce

Léky a dietní opatření při kopřivce

Vitalia.cz: Epidemie: Klíšťová encefalitida po ovčím sýru

Epidemie: Klíšťová encefalitida po ovčím sýru

DigiZone.cz: Skylink: Nova Sport volně

Skylink: Nova Sport volně

Měšec.cz: Co s reklamací, když e-shop krachuje?

Co s reklamací, když e-shop krachuje?

Měšec.cz: Od kdy musí studenti platit pojistné?

Od kdy musí studenti platit pojistné?

Root.cz: Quake slaví 20 let novou epizodou zdarma

Quake slaví 20 let novou epizodou zdarma

DigiZone.cz: Náhrada za nevrácená zařízení?

Náhrada za nevrácená zařízení?

Vitalia.cz: Jelení farma produkuje kvalitní maso

Jelení farma produkuje kvalitní maso

Vitalia.cz: 5 porcí ovoce a zeleniny: no ale jak na to?

5 porcí ovoce a zeleniny: no ale jak na to?

DigiZone.cz: Roční bonus pro Dvořáka schválen

Roční bonus pro Dvořáka schválen

DigiZone.cz: HbbTV KinoSvět: už jede na dalších TV

HbbTV KinoSvět: už jede na dalších TV

Lupa.cz: Nej aplikace? Vodafone, Mozkovna, Záchranka

Nej aplikace? Vodafone, Mozkovna, Záchranka

Lupa.cz: Jaké IoT tarify nabízejí mobilní operátoři?

Jaké IoT tarify nabízejí mobilní operátoři?

DigiZone.cz: Nova: technické pauzy každé 1. pondělí

Nova: technické pauzy každé 1. pondělí

Vitalia.cz: Máte chutě? Nejezděte do světa, ale do Dobřichovic

Máte chutě? Nejezděte do světa, ale do Dobřichovic