Přinášíme další článek, ve kterém představujeme zjištění z našich penetračních testů. V minulých článcích jsme popsali tři další typické oblasti, ve kterých se chybuje – odkazy na tyto články najdete níže. Tentokrát představíme problémy, které souvisí s nesprávnou validací vstupních dat. Přesněji se podíváme na zranitelnost Cross Site Scripting (XSS) a vysvětlíme si, jaký vliv má tato zranitelnost na bezpečnost celého e-shopu.
Co to je XSS?
Dnešní webové stránky jsou dynamické, dokážou průběžné měnit a aktualizovat svůj obsah a reagují na aktuální činnost uživatele. Sbírají různá metadata o návštěvnosti, jako například údaje o celkovém čase stráveném na dané stránce nebo jaké produkty si uživatelé prohlížejí nejčastěji. O to vše se starají malé, tedy v současnosti už i větší části kódu, nazývané skripty.
Představme si, že by uživatel se špatnými úmysly napsal do komentářů k jednomu z nabízených produktů následující text:
Do stránky zranitelného e-shopu se vloží skript z cizího webu a tento skript se potom jako součást webové stránky automaticky spustí v prohlížeči uživatele (který nic netuše na odkaz v komentáři klikne). A právě na základě možnosti podstrčení skriptu z cizího webu se útok označuje jako Cross Site Scripting.
Čeho je možné dosáhnout zneužitím zranitelnosti XSS?
Přítomnost zranitelnosti XSS může vést k úspěšným útokům na ostatní uživatele aplikace, přímo na zákazníky, personál, který odbavuje objednávky, anebo administrátory zabezpečující bezproblémový chod e-shopu. Pomocí XSS může útočník zrealizovat téměř jakoukoli akci a přistupovat k těm samým datům z aplikace jako samotní uživatelé. Při důmyslném a dobře připraveném scénáři útoku si uživatelé vůbec nemusí všimnout, že se stali terčem útoku.
V předchozím článku jsme vás upozornili na chyby související s autentifikací, přičemž jednou z častých chyb je nesprávná manipulace s autentifikačními tokeny. Pokud autentifikační token není dostatečně chráněný, dává přítomnost zranitelnosti XSS útočníkovi prostor ukrást aktivní uživatelskou relaci a provádět tak všechny autorizované akce jménem oběti - například zrealizovat novou objednávku, požádat o zaslání zboží na jinou adresu nebo vypsat uložené údaje o kreditní kartě.
Útočníci se pomocí škodlivých skriptů mohou snažit získat i další různé citlivé údaje. Není nic výjimečného, že škodlivý kód spuštěný v prohlížeči klienta může zaznamenávat všechny akce uživatele a odchytávat například i to, které klávesy právě stiskl uživatel. Pokud je uživatel přihlášen i na jiných zranitelných webových stránkách, útočník na ně může za pomoci skriptu zasílat požadavky jménem přihlášeného uživatele - v takových případech už jde o provedení útoku Cross Site Request Forgery (CSRF).
Pokud se podvržený kód spustí u uživatele ve vnitřní síti, útočník může jeho prohlížeč využít k získávání informací o vnitřních službách, při nichž se často podceňuje zabezpečení, protože se předpokládá, že k nim bude mít přístup pouze důvěryhodný uživatel. Jakékoliv další informace o lokální síti by mohly útočníkovi pomoci lépe přizpůsobit a zacílit útok v dalších fázích. Mohl by se například pokusit získat citlivá data z lokálního síťového úložiště nebo zaútočit na jiné webové stránky ve vnitřní síti.
Kód, který útočník podstrčí, nemusí mířit pouze na stránku, do které byl vložen. Skript může navést uživatele na falešné verze jinak důvěryhodných stránek, jako například Facebook, Gmail či web internetového bankovnictví. Návštěvou takovýchto stránek se uživatel může stát obětí krádeže přihlašovacích údajů v přesvědčení, že se přihlašuje na správné a na první pohled legitimní verze webů. Přihlašovací údaje však ve skutečnosti získá útočník.
Sofistikovanější útoky by mohly uživatele navést na jinou, falešnou platební bránu, v důsledku čehož by platba byla připsána na účet útočníka.
Jaká funkcionalita e-shopu může být zranitelná na XSS?
Zranitelnost XSS lze identifikovat prakticky v kterékoli části aplikace, která pracuje s daty od uživatele. Naše zkušenosti ukazují, že zranitelnost se nevyhýbá ani bankovním aplikacím, u kterých by měla být bezpečnost prvořadá. V e-shopech může jít například o různé formuláře s osobními, fakturačními či dodacími údaji, o formuláře určené k vyhledávání, hodnocení produktů, nebo o funkcionalitu zasílání zpráv na podporu pro zákazníky.
Nemusí však nutně jít pouze o vstupní data ve formě textových řetězců. Zranitelnost je často možné zneužít i prostřednictvím speciálně upravených obrázků či jiných typů souborů, se kterými standardně pracuje aplikace.
Škodlivý skript však nemusí být nutně vložen do stránek e-shopu. Útočník může odkaz na škodlivý skript ukrýt v URL adrese a pomocí technik sociálního inženýrství uživatele přesvědčit, aby takovou URL adresu navštívil a nebezpečný kód si ve svém prohlížeči spustil sám na sebe, případně pouze s minimální pomocí zranitelné aplikace. Stačí, když aplikace na některém místě "zrcadlí" vstup od uživatele bez potřebné kontroly dat.
Jak závažné může být zneužití zranitelnosti XSS?
Závažnost útoku XSS bývá mnohdy podceňována, ale někdy i přeceňována. Při hodnocení závažnosti je nutné brát v úvahu různé okolnosti. Často třeba zohlednit vliv na byznys a přítomnost dalších bezpečnostních chyb, ať už technických, přímo v kódu aplikace, nebo procesních, které vyplývají z chybného chování a rozhodování samotných uživatelů. V neposlední řadě je důležité vzít v úvahu i to, u koho se podaří zajistit spuštění podstrčených škodlivého skriptu.
Například přítomnost reflexivního XSS na osobní či firemní prezentační webové stránce, kde není možné přihlášení uživatele, bude spíše zdrojem nechtěných žertů a bude mít vliv především v reputační rovině. Na druhé straně škodlivý kód uložený v popisu produktů známého e-shopu nebo kód spuštěn v kontextu zranitelné platební brány bude představovat mnohem větší nebezpečí. Obzvlášť, pokud je možné s jeho pomocí zneužít i jiné přítomné bezpečnostní chyby.
Jednou z úloh našich testerů je včas objevit už zmíněné, ale i nové nedostatky, které mohou potenciální útočníci zneužít v důsledku nedostatečné validace vstupních dat a zabránit tak větším škodám.