Hlavní navigace

XSS stále na scéně

Petr Závodský

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?

7. 4. 2011 14:39

Ondra (neregistrovaný)

Ach jo, co je tak špatného na českém výrazu "překlep"? A proč to musíš kryptovat sedem? A proč se pak divíme, že linuxáci vypadají v očích normálních lidí jako paka?

28. 4. 2011 19:08

bgh (neregistrovaný)

<script>alert('XSS')</sc­ript>

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Vitalia.cz: 7 druhů hotových těst na vánoční cukroví

7 druhů hotových těst na vánoční cukroví

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“