Cross-site Scripting (XSS) to luka w zabezpieczeniach, którą zazwyczaj można znaleźć w witrynach internetowych i/lub aplikacjach internetowych akceptujących dane użytkownika. Przykłady takich informacji obejmują wyszukiwarki, formularze logowania, tablice z komunikatami i pola komentarzy.
Cyberprzestępcy wykorzystują tę lukę w zabezpieczeniach, wprowadzając do tych funkcji ciągi złośliwego kodu wykonywalnego. Wstrzykuje to złośliwy kod do treści witryny docelowej, czyniąc ją częścią witryny internetowej i tym samym umożliwiając wpływanie na ofiary, które mogą ją odwiedzać lub przeglądać. Kod może się również prezentować jako przejściowa zawartość, która w rzeczywistości nie jest częścią witryny internetowej, ale wydaje się być tylko dla odwiedzającego. Sprawia to wrażenie, że strona internetowa została zaatakowana przez cyberprzestępców.
Cyberprzestępcy mogą również wykorzystać tę lukę w zabezpieczeniach, aby przejąć kontrolę lub bezpośrednio naruszyć bezpieczeństwo witryny internetowej, a także wykorzystać inne istniejące luki w zabezpieczeniach serwera lub oprogramowania witryny internetowej.
Dzięki XSS cyberprzestępcy mogą przekształcić zaufane witryny internetowe w złośliwe, powodując nieprzewidziane szkody nie tylko dla ofiar, ale także dla reputacji właściciela zaufanej witryny internetowej.
Witryny internetowe, które zostały naruszone przez XSS, mogą spowodować atakowanie systemu użytkownika przez dowolną liczbę zagrożeń. Może to obejmować wszystko, od wyświetlania nieodpowiednich treści po pobieranie złośliwego oprogramowania do systemu bez wiedzy użytkownika.
Tak samo niebezpieczny jak XSS, istnieją sposoby na usunięcie takiej luki w zabezpieczeniach. Właściciele stron internetowych muszą zapewnić, że wszystkie aplikacje internetowe, które akceptują dane wprowadzone przez użytkownika, robią to w taki sposób, aby najpierw zdezynfekować wprowadzone ciągi znaków przed utworzeniem strony wynikowej danych wejściowych. Zapobiega to wykonaniu iniekcji kodu. Z drugiej strony użytkownicy powinni wyłączyć skrypty w swoich przeglądarkach, a także unikać klikania łączy od podejrzanych stron lub nadawców.
Według projektu Open Web Application Security Project (OWASP) ataki XSS należą do jednej z trzech kategorii: odbite XSS, zapisane XSS i Document Object Model (DOM) XSS. Zostały one szczegółowo opisane poniżej.
Odbity atak XSS ma miejsce, gdy haker dostarcza złośliwy skrypt do aplikacji sieciowej, która następnie powraca do serwera w odpowiedzi HTTP. Przeglądarka ofiary wykonuje złośliwy skrypt w ramach odpowiedzi HTTP, narażając na szwank legalnego użytkownika i wysyłając prywatne informacje z powrotem do hakera.
Przemyślane ataki XSS zazwyczaj są ukierunkowane na komunikaty o błędach lub strony wyników wyszukiwania, ponieważ wysłanie złośliwej wiadomości e-mail z linkiem, który wielu użytkowników kliknie. Po kliknięciu łącza serwer otrzymuje żądanie zawierające złośliwy skrypt, a ponieważ nie jest przechowywany, odpowiada, wysyłając kod z powrotem do użytkownika. Jeśli dane wejściowe użytkownika nie są odpowiednio weryfikowane i dezynfekowane lub gdy dane są niebezpiecznie powielane z zapytania, istnieje ryzyko odbitych luk w zabezpieczeniach XSS.
Pierwsza linia obrony przed atakami XSS polega na filtrowaniu zawartości i weryfikacji danych wejściowych użytkowników. Możesz użyć list bezpiecznych i zablokowanych dostawców skryptów, aby odrzucić ryzykowne wzorce danych.
Ponadto można wdrożyć rygorystyczną Politykę bezpieczeństwa treści (CSP), która pomoże zidentyfikować źródło skryptów wbudowanych, zmniejszając ryzyko odbitych ataków XSS. Silny system CSP zapewnia kontrolę nad skryptami i lokalizacjami stron internetowych, w których mogą być ładowane i uruchamiane.
W zapisanym ataku XSS złośliwy skrypt zapisuje dane wejściowe użytkownika na serwerze docelowym. W odróżnieniu od ataku XSS, który jest wykonywany na serwerze, w przeglądarce użytkownika przeprowadzany jest zapisany atak XSS. Następnie atakujący korzystają z nowoczesnych aplikacji HTML5, zazwyczaj wykorzystujących bazy danych HTML, aby na stałe przechowywać szkodliwe skrypty w przeglądarce.
W zapisanym ataku XSS skrypt jest zapisywany i wykonywany na serwerze za każdym razem, gdy użytkownik uzyskuje dostęp do danej witryny internetowej. Atakujący może z łatwością dotrzeć do dużej liczby ofiar, a wynik jest trwały. Zapisane ataki XSS mogą również wystąpić, gdy nieprzeszkoleni użytkownicy próbują wyodrębnić dane z oprogramowania bez konieczności stosowania środków ostrożności dotyczących dezynfekcji lub walidacji.
Przechowywane ataki XSS mają na celu odzwierciedlenie złośliwego skryptu użytkownikowi, więc najłatwiejszym sposobem zapobiegania im jest dezynfekowanie danych użytkownika i ostrożne przetwarzanie danych wejściowych — a najlepszym sposobem zapobiegania im jest użycie odpowiedniego powiązania parametrów.
Dane można dezynfekować za pomocą automatycznie opuszczającego się systemu szablonów lub kodowania HTML. Należy zakodować dane przeznaczone do wyjścia, aby serwer nie mógł zinterpretować ich jako zawartości aktywnej. Oznacza to, że aplikacja będzie obsługiwać znaki specjalne w zapisanych danych jako zawartość tagów HTML, a nie zwykłe HTML.
Wiązanie parametrów danych (danych) różni się w zależności od wektora, ale zawsze można przekazywać zmienne jako dodatkowe wartości poza normalną funkcjonalnością funkcji. Można również użyć odpowiednich nagłówków odpowiedzi, aby zapobiec atakom, zwykle poprzez dodanie kilku wierszy kodu.
Inną techniką powstrzymywania ataków XSS w czasie rzeczywistym jest stosowanie dynamicznego zabezpieczenia, które aktywnie poszukuje prób wykorzystania. Blokując znane wzorce, można powstrzymać atakujących przed wykorzystaniem istniejących luk.
Ponadto do wykrywania i łagodzenia ataków XSS w czasie rzeczywistym można używać zapór sieciowych aplikacji internetowych (WAF).
Interfejs DOM umożliwia przetwarzanie i manipulowanie zawartością strony internetowej poprzez odczytywanie i modyfikowanie dokumentów HTML i XML. Ataki XSS oparte na DOM wprowadzają złośliwe zmiany w kontekście DOM przeglądarki poszkodowanego, powodując niezamierzone wykonanie kodu po stronie klienta.
Ataki XSS oparte na DOM, w przeciwieństwie do ataków odzwierciedlonych i zapisanych XSS, nie przechowują złośliwego skryptu ani nie dostarczają go na serwer. W tym ataku jedyną luką w zabezpieczeniach jest przeglądarka ofiary. Ponieważ są one trudniejsze do zrozumienia niż inne kategorie, luki w zabezpieczeniach oparte na DOM są rzadkie, skomplikowane i trudne do wyeliminowania. Co więcej, zautomatyzowane skanery luk w zabezpieczeniach i zapory aplikacji internetowych nie są w stanie łatwo je zidentyfikować.
Aby zapobiec atakowi, można użyć tych samych technik, co w przypadku pozostałych dwóch, ale należy zachować szczególną ostrożność, aby zdezynfekować kod po stronie klienta. Dwa skuteczne rozwiązania to zapobieganie zmianom potencjalnie niebezpiecznych funkcji JavaScript (znanych jako zlewy) przez kontrolowane przez użytkownika źródła lub zezwalanie na godne zaufania treści za pomocą bezpiecznej listy. Dzięki tym środkom ostrożności łańcuchy, które mogą stanowić zagrożenie dla DOM, nie będą wysyłane do zlewów. Dane można również dezynfekować za pomocą wbudowanej funkcji przeglądarki, co zmniejsza ryzyko problemów związanych ze zmianą parsera.
Nowatorską obroną przed tego typu atakami jest korzystanie z zaufanych typów. Jest to mechanizm bezpieczeństwa przeglądarki, który zapewnia, że wszystkie ryzykowne części DOM mogą być używane tylko przez dane, które przeszły wstępnie zdefiniowane zasady. Zapobiega to przenoszeniu dowolnych ciągów znaków do potencjalnie niebezpiecznych zlewów, co pomaga przeglądarce rozróżniać kod od danych – usuwając główne źródło luk w zabezpieczeniach.
innymi procesami, które odbywają się na urządzeniu klienta. Programy serwerowe działają na serwerach i tworzą zawartość strony internetowej.
XSS po stronie serwera ma miejsce, gdy cały kod po stronie serwera jest podatny na a przeglądarka renderuje odpowiedź i uruchamia wszystkie wbudowane w nią autentyczne skrypty. Z drugiej strony XSS po stronie klienta wykonuje na urządzeniu użytkownika i modyfikuje stronę internetową po jej załadowaniu.
Atak XSS jest możliwy wszędzie tam, gdzie jest HTML. Niezależnie od tego, czy są przechowywane, odbijane, czy oparte na DOM, wszystkie ataki XSS mają ten sam efekt: Atakujący przejmuje pełną kontrolę nad sesją internetową.
Ataki XSS mogą się również pokrywać, a witryna internetowa może być podatna na wszystkie trzy zagrożenia jednocześnie. W przypadku jednej witryny internetowej lub aplikacji offline wszystkie trzy rodzaje ataków mogą pojawić się bezpośrednio w przeglądarce. Jednak ich zachowanie może się różnić w zależności od tego, czy dane są zapisywane na serwerze, czy też odbijane z serwera.