Príklady bezpečnostných chýb slovenských a českých e-shopov: Chyby vo validácii vstupných dát – Cross Site Scripting

Ďalší článok

Prinášame vám ďalší článok zo série krátkych blogov, v ktorých vám predstavíme zistenia z testovaní, ktoré v poslednom čase robili naši etickí hackeri.

Etickí hackeri sú špecialisti, ktorých služby využívajú firmy na to, aby proaktívne a s vedomím a povolením firmy hľadali v ich systémoch bezpečnostné chyby. Vlastníci, prevádzkovatelia e-shopov a ich dodávatelia tak môžu získať jednoduché  tipy na kontrolu alebo vylepšenia bezpečnosti aplikácií e-shopov. Zároveň sa snažíme sprístupniť aj laickému čitateľovi spôsob, akým môžu byť zneužité programátorské chyby.

V tomto článku vám opíšeme ďalšiu chybu českých a slovenských e-shopov – problémy s validáciou vstupných dát, konkrétnejšie sa pozrieme na zraniteľnosť Cross Site Scripting (XSS) a aký vplyv má prítomnosť tejto zraniteľnosti na bezpečnosť e-shopov.

Zoznámenie – čo je XSS?

Dnešné webové stránky sú dynamické, dokážu priebežne meniť a aktualizovať svoj obsah a taktiež reagujú na aktuálnu činnosť používateľa. Zbierajú rôzne metadáta o ich návštevnosti, ako napríklad údaje o celkovom čase strávenom na danej stránke alebo aké produkty si používatelia prezerajú najčastejšie. O to všetko sa starajú malé, no v súčasnosti už aj väčšie časti kódu, nazývané skripty.

Predstavme si, že zlomyseľný používateľ by v komentári k jednému z ponúkaných produktov uviedol nasledujúci text:

Do stránky zraniteľného e-shopu sa vloží skript z cudzieho webu a tento skript  sa potom ako súčasť webovej stránky automaticky spustí v prehliadači používateľa. A práve na základe možnosti podstrčenia skriptu z cudzieho webu sa útok označuje ako Cross Site Scripting.

Čo je možné dosiahnuť zneužitím zraniteľnosti XSS?

Prítomnosť zraniteľnosti XSS môže viesť k úspešným útokom na ostatných používateľov aplikácie, či už na zákazníkov e-shopu, personál, ktorý sa stará o vybavovanie objednávok, alebo administrátorov zabezpečujúcich bezproblémový chod celého e-shopu. Pomocou XSS môže útočník zrealizovať takmer ľubovoľnú akciu a pristupovať k takým istým dátam aplikácie ako aj samotní používatelia. Pri dômyselnom a dobre pripravenom scenári útoku si používatelia vôbec nemusia všimnúť, že sa stali terčom útoku.

predchádzajúcom článku sme vás upozornili na chyby súvisiace s autentifikáciou, pričom jednou z častých chýb je nesprávna manipulácia s autentifikačnými tokenmi. Pokiaľ autentifikačný token nie je dostatočne chránený vhodnými opatreniami, prítomná zraniteľnosť XSS dáva útočníkovi priestor ukradnúť aktívnu používateľskú reláciu a vykonávať tak všetky autorizované akcie v mene autentifikovanej obete – napríklad zrealizovať novú objednávku, požiadať o zaslanie tovaru na inú adresu alebo vypísať uložené údaje o kreditnej karte.

Útočníci sa pomocou škodlivých skriptov môžu snažiť získať aj rôzne iné druhy citlivých údajov. Nie je nič výnimočné, že škodlivý kód spustený v prehliadači klienta môže zaznamenávať všetky akcie používateľa a odchytávať napríklad aj to, ktoré klávesy aktuálne stláča používateľ. Pokiaľ je používateľ prihlásený aj na iných zraniteľných webových stránkach, útočník na ne môže za pomoci skriptu zasielať autentifikované požiadavky v mene prihláseného používateľa – v takýchto prípadoch už ide aj o vykonanie útoku Cross Site Request Forgery (CSRF).

Ak sa podvrhnutý kód spustí u používateľa vo vnútornej sieti, útočník môže jeho prehliadač využiť na získavanie informácií o vnútorných službách, pri ktorých sa často podceňuje zabezpečenie, pretože sa predpokladá, že k nim bude mať prístup len dôveryhodný používateľ. Akékoľvek ďalšie informácie o lokálnej sieti by mohli útočníkovi pomôcť lepšie prispôsobiť a zacieliť útok v ďalších fázach. Mohol by sa napríklad pokúsiť získať citlivé dáta z lokálneho sieťového úložiska alebo zaútočiť na iné webové stránky vo vnútornej sieti.

Kód, ktorý útočník podstrčí, nemusí mieriť iba na stránku, do ktorej bol vložený. Skript môže naviesť používateľa na falošné verzie, inak dôveryhodných stránok ako napríklad Facebook, Gmail či web e-bankingu. Návštevou takýchto stránok sa používateľ môže stať obeťou krádeže prihlasovacích údajov v presvedčení, že sa prihlasuje na správne a na prvý pohľad legitímne vyzerajúce verzie webov – prihlasovacie údaje však v skutočnosti získa útočník.

Sofistikovanejšie útoky by mohli používateľa naviesť na inú, falošnú platobnú bránu, v dôsledku čoho by bola platba pripísaná na účet útočníka.

Aká funkcionalita e-shopu môže byť zraniteľná na XSS?

Opisovanú zraniteľnosť je možné identifikovať prakticky v ktorejkoľvek časti aplikácie, ktorá pracuje s dátami od používateľa. Naše skúsenosti ukazujú, že zraniteľnosť sa nevyhýba ani bankingovým aplikáciám, pri ktorých by mala byť bezpečnosť prvoradá. V e-shopoch môže ísť napríklad o rôzne formuláre s osobnými, fakturačnými či dodacími údajmi, o formuláre určené na vyhľadávanie, hodnotenie a recenzie ponúkaných produktov, alebo o funkcionalitu zasielania správ na podporu pre zákazníkov.

Nemusí však nutne ísť iba o vstupné dáta vo forme textových reťazcov. Zraniteľnosť je často možné zneužiť aj prostredníctvom špeciálne upravených obrázkov či iných typov súborov, s ktorými štandardne pracuje aplikácia. Škodlivý skript však nemusí byť nutne vložený do stránok e-shopu. Útočník môže odkaz na škodlivý skript ukryť v URL adrese a  pomocou techník sociálneho inžinierstva používateľa presvedčiť, aby takúto URL adresu navštívil a nebezpečný kód si vo svojom prehliadači spustil sám na seba, prípadne iba s minimálnou pomocou zraniteľnej aplikácie. Stačí, ak aplikácia na niektorom mieste „zrkadlí“ vstup od používateľa bez potrebnej kontroly dát. 

Ako závažné môže byť zneužitie zraniteľnosti XSS?

Závažnosť útoku XSS býva mnohokrát podceňovaná, no niekedy aj preceňovaná. Pri hodnotení závažnosti je nutné brať do úvahy rôzne okolnosti. Často treba zohľadniť vplyv na biznis a prítomnosť ďalších bezpečnostných chýb, či už technických, priamo v kóde aplikácie alebo procesných, ktoré vyplývajú z chybného správania a rozhodovania samotných používateľov. V neposlednom rade je dôležité zobrať do úvahy aj to, u koho sa podarí zabezpečiť spustenie podstrčeného škodlivého skriptu.

Napríklad prítomnosť reflexívneho XSS na osobnej či firemnej prezentačnej webovej stránke, kde nie je možné prihlásenie používateľa, bude skôr zdrojom nechcených žartov a bude mať vplyv predovšetkým v reputačnej rovine. Na druhej strane, škodlivý kód uložený v opise produktov známeho e-shopu alebo kód spustený v kontexte zraniteľnej platobnej brány bude predstavovať oveľa väčšie nebezpečenstvo. Obzvlášť, ak je možné s jeho pomocou zneužiť aj iné prítomné bezpečnostné chyby v aplikácii.

Jednou z úloh našich testerov je včas objaviť už spomenuté, ale aj nové nedostatky, ktoré by mohli útočníci zneužiť v dôsledku nedostatočnej validácie vstupných dát, a zabrániť tak väčším škodám. Pokiaľ vás tento článok zaujal, zanechajte nám vašu e-mailovú adresu a pošleme vám aj ďalšie články týkajúce sa bezpečnosti internetových obchodov alebo testovania bezpečnosti.

Pokiaľ máte záujem o viac informácií o službe preverenia bezpečnosti vášho internetového obchodu alebo inej aplikácie, vyplňte kontaktný formulár TU.