Cross Site Scripting (XSS) – jeden z popularniejszych ataków webowych

Cross Site Scripting (XSS) czyli tak zwany „skrypt między witrynami” to rodzaj ataku, polegający na wstrzykiwaniu złośliwego skryptu na stronę. Najczęściej jest to kod w formie skryptu JavaScript, który próbujemy umieścić na zaufanej stronie internetowej bądź aplikacji webowej. Atakujący wykorzystuje luki, które umożliwiają wprowadzenie danych wejściowych od użytkownika bez sprawdzania poprawności tekstu lub kodowania. Za pomocą tych luk hacker korzysta z XSS do wysłania złośliwego skryptu. Przeglądarka użytkownika końcowego uważa, że skrypt pochodzi z zaufanego źródła i wykonuje go, ponieważ nie ma możliwości sprawdzić czy jest on szkodliwy. Pomimo, iż nie jest to żaden Malware, atak tego typu atak jest niezwykle niebezpieczny. Skrypt może uzyskać dostęp do wrażliwych danych przeglądarki, takich jak dowolne pliki cookie, tokeny i poufne informacje jak dane logowania.

Dwoma poważnymi skutkami ataku Cross Site Scripting jest przekierowanie użytkownika na fałszywą stronę oraz wykonywanie działań w kontekście użytkownika. Niesie to ze sobą spore szkody finansowe, gdyż użytkownik może nie zauważyć, że loguje się na fałszywą stronę swojego banku. W ten sposób hacker ma możliwość uzyskać dane do logowania konta bankowego w celu dokonania przelewów. Ponad to złośliwy kod może również podejmować żądania w imieniu użytkownika. Przykładem jest dokonywanie transakcji bankowych bez jego wiedzy.

Wyróżniamy trzy różne typy ataków XSS, każdy z nich charakteryzuje się w inny sposób. Poniżej przedstawiamy wam wszystkie z nich.

Reflected XSS

Pierwszym typem ataku Cross Site Scripting jest Reflected XSS. Ma on miejsce, gdy dane dostarczane przez użytkownika w żądaniu HTTP są zawarte w źródle strony internetowej (kod jest wstrzykiwany do URL strony). Osoba atakująca może wysyłać linki lub osadzać je w elementach iframe na innej stronie internetowej, która zawiera skrypt JavaScript. Potencjalna ofiara bez jej wiedzy, zostaje wręcz zmuszona w taki sposób do wykonania kodu w przeglądarce, ujawniając informację o sesji.

Przykładowy scenariusz:

1) Witryna internetowa w przypadku wprowadzenia nieprawidłowych danych wyświetla komunikat: „Wykryto Nieprawidłowe Dane Wejściowe”. Treść komunikatu o błędzie pobierana jest z parametru błędu oraz jest budowana bezpośrednio w źródle strony:

2) Aplikacja w żaden sposób nie sprawdza zawartości parametru error, co pozwala hackerowi na wstawienie złośliwego kodu:

3) Przedstawioną wyżej lukę można wykorzystać w scenariuszu przedstawionym na poniższym obrazku:

Stored XSS

Drugiem typem ataku Cross Site Scripting jest Stored XSS. W tym przypadku ładunek XSS jest przechowywany w aplikacji webowej (np. bazie danych). Ładunek uruchamia się za każdym razem, gdy użytkownik odwiedzi stronę internetową lub odczytuje zawartość, w której znajduje się zainfekowany kod (np. komentarz na forum). Złośliwy kod JavaScript może przekierowywać użytkowników do innej witryny, kraść plik cookie sesji bądź poufne dane.

Przykładowy scenariusz:

Skoro o komentarzach mowa, wyobraźmy sobie stronę blogową, która pozwala użytkownikowi na umieszczanie właśnie takich treści. Komentarze w żaden sposób nie są sprawdzane czy nie zawierają kodu JavaScript. Gdy publikujemy komentarz z kodem, zostaje on zapisany w bazie danych. Każdy użytkownik, który odwiedzi dany artykuł będzie uruchamiał złośliwy kod JavaScript w swojej przeglądarce.

DOM-based XSS

Trzecim typem ataku Cross Site Scripting jest DOM-based XSS. DOM (Document Object Model) to interfejs programistyczny dla dokumentów HTML i XML. W tym przypadku atakujący wstrzykuje złośliwy kod do modelu obiektowego DOM danej strony internetowej. Atak działa na podstawie manipulacji drzewem DOM (przeglądarka używa go do reprezentowania struktury i treści strony). Skrypt JavaScript jest uruchamiany bez konieczności otwierania nowych stron lub przekazywania informacji do serwera. Wykonanie następuje, gdy kod JavaScript na stronie wykorzystuje dane wejściowe lub reakcje użytkownika.