DOM XSS
DOM Vulnerabilities
Vulnerabilities DOM występują, gdy dane z kontrolowanych przez atakującego źródeł (takich jak location.search
, document.referrer
lub document.cookie
) są niebezpiecznie przekazywane do sinków. Sinki to funkcje lub obiekty (np. eval()
, document.body.innerHTML
), które mogą wykonywać lub renderować szkodliwą treść, jeśli otrzymają złośliwe dane.
Źródła to dane wejściowe, które mogą być manipulowane przez atakujących, w tym URL-e, ciasteczka i wiadomości internetowe.
Sinki to potencjalnie niebezpieczne punkty końcowe, w których złośliwe dane mogą prowadzić do negatywnych skutków, takich jak wykonanie skryptu.
Ryzyko pojawia się, gdy dane przepływają z źródła do sinka bez odpowiedniej walidacji lub sanitacji, co umożliwia ataki takie jak XSS.
Możesz znaleźć bardziej aktualną listę źródeł i sinków w https://github.com/wisec/domxsswiki/wiki
Common sources:
Common Sinks:
jQuery | |||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
| |
|
|
| |
|
|
|
|
|
|
| |
|
|
| |
|
|
| |
|
| ||
|
| `` | `` |
The innerHTML
sink doesn't accept script
elements on any modern browser, nor will svg onload
events fire. This means you will need to use alternative elements like img
or iframe
.
This kind of XSS is probably the hardest to find, as you need to look inside the JS code, see if it's using any object whose value you control, and in that case, see if there is any way to abuse it to execute arbitrary JS.
Tools to find them
Browser extension to check every data taht reaches a potential sink: https://github.com/kevin-mizu/domloggerpp
Examples
Open Redirect
From: https://portswigger.net/web-security/dom-based/open-redirection
Luki na otwarty przekierowanie w DOM występują, gdy skrypt zapisuje dane, którymi może sterować atakujący, do zlewu zdolnego do inicjowania nawigacji między domenami.
Ważne jest, aby zrozumieć, że wykonanie dowolnego kodu, takiego jak javascript:alert(1)
, jest możliwe, jeśli masz kontrolę nad początkiem URL, w którym występuje przekierowanie.
Sinks:
Manipulacja ciasteczkami
From: https://portswigger.net/web-security/dom-based/cookie-manipulation
Luki w manipulacji ciasteczkami oparte na DOM występują, gdy skrypt włącza dane, które mogą być kontrolowane przez atakującego, do wartości ciasteczka. Ta luka może prowadzić do nieoczekiwanego zachowania strony internetowej, jeśli ciasteczko jest wykorzystywane w obrębie witryny. Dodatkowo, może być wykorzystana do przeprowadzenia ataku na utrzymanie sesji, jeśli ciasteczko jest zaangażowane w śledzenie sesji użytkownika. Głównym miejscem docelowym związanym z tą luką jest:
Sinks:
Wstrzykiwanie JavaScript
From: https://portswigger.net/web-security/dom-based/javascript-injection
Luki w zabezpieczeniach związane z wstrzykiwaniem JavaScript w oparciu o DOM powstają, gdy skrypt wykonuje dane, które mogą być kontrolowane przez atakującego, jako kod JavaScript.
Sinks:
Manipulacja dokumentem-domeną
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
Wrażliwości na manipulację dokumentem-domeną występują, gdy skrypt ustawia właściwość document.domain
przy użyciu danych, którymi może kontrolować atakujący.
Właściwość document.domain
odgrywa kluczową rolę w egzekwowaniu polityki tego samego pochodzenia przez przeglądarki. Gdy dwie strony z różnych pochodzeń ustawiają swoją document.domain
na tę samą wartość, mogą wchodzić w interakcje bez ograniczeń. Chociaż przeglądarki nakładają pewne ograniczenia na wartości przypisywane do document.domain
, zapobiegając przypisaniu całkowicie niepowiązanych wartości do rzeczywistego pochodzenia strony, istnieją wyjątki. Zazwyczaj przeglądarki zezwalają na użycie domen dzieci lub rodziców.
Sinks:
WebSocket-URL poisoning
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL poisoning występuje, gdy skrypt wykorzystuje kontrolowane dane jako docelowy URL dla połączenia WebSocket.
Sinks:
Konstruktor WebSocket
może prowadzić do podatności na WebSocket-URL poisoning.
Link manipulation
From: https://portswigger.net/web-security/dom-based/link-manipulation
Podatności na manipulację linkami w DOM powstają, gdy skrypt zapisuje dane kontrolowane przez atakującego do celu nawigacji w bieżącej stronie, takie jak klikalny link lub URL przesyłania formularza.
Sinks:
Manipulacja żądaniami Ajax
From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Luki w manipulacji żądaniami Ajax powstają, gdy skrypt zapisuje dane kontrolowane przez atakującego w żądaniu Ajax, które jest wydawane za pomocą obiektu XmlHttpRequest
.
Sinks:
Manipulacja lokalną ścieżką pliku
From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
Luki w manipulacji lokalną ścieżką pliku powstają, gdy skrypt przekazuje dane kontrolowane przez atakującego do API obsługi plików jako parametr filename
. Ta luka może być wykorzystana przez atakującego do skonstruowania URL, który, jeśli zostanie odwiedzony przez innego użytkownika, może prowadzić do otwarcia lub zapisania dowolnego lokalnego pliku w przeglądarce użytkownika.
Sinks:
Client-Side SQl injection
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
Wrażliwości na SQL-injection po stronie klienta występują, gdy skrypt włącza dane kontrolowane przez atakującego do zapytania SQL po stronie klienta w niebezpieczny sposób.
Sinks:
Manipulacja pamięcią HTML5
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
Wrażliwości na manipulację pamięcią HTML5 pojawiają się, gdy skrypt przechowuje dane kontrolowane przez atakującego w pamięci HTML5 przeglądarki internetowej (localStorage
lub sessionStorage
). Chociaż ta akcja nie jest z natury luką w zabezpieczeniach, staje się problematyczna, jeśli aplikacja następnie odczytuje przechowywane dane i przetwarza je w sposób niebezpieczny. Może to pozwolić atakującemu na wykorzystanie mechanizmu pamięci do przeprowadzenia innych ataków opartych na DOM, takich jak cross-site scripting i wstrzykiwanie JavaScript.
Sinks:
XPath injection
From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
Wrażliwości na wstrzykiwanie XPath oparte na DOM występują, gdy skrypt włącza dane kontrolowane przez atakującego do zapytania XPath.
Sinks:
Wstrzykiwanie JSON po stronie klienta
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
Luki w wstrzykiwaniu JSON opartym na DOM występują, gdy skrypt włącza dane kontrolowane przez atakującego do ciągu, który jest analizowany jako struktura danych JSON, a następnie przetwarzany przez aplikację.
Sinks:
Manipulacja wiadomościami w sieci
Z: https://portswigger.net/web-security/dom-based/web-message-manipulation
Luki w wiadomościach sieciowych powstają, gdy skrypt wysyła dane kontrolowane przez atakującego jako wiadomość sieciową do innego dokumentu w przeglądarce. Przykład podatnej manipulacji wiadomościami sieciowymi można znaleźć w Akademii Bezpieczeństwa Sieci PortSwigger.
Sinks:
Metoda postMessage()
do wysyłania wiadomości sieciowych może prowadzić do luk, jeśli nasłuchujący zdarzenia do odbierania wiadomości obsługuje przychodzące dane w niebezpieczny sposób.
Manipulacja danymi DOM
Z: https://portswigger.net/web-security/dom-based/dom-data-manipulation
Luki w manipulacji danymi DOM powstają, gdy skrypt zapisuje dane kontrolowane przez atakującego do pola w DOM wykorzystywanego w widocznym interfejsie użytkownika lub logice po stronie klienta. Ta luka może być wykorzystana przez atakującego do skonstruowania URL, który, jeśli zostanie odwiedzony przez innego użytkownika, może zmienić wygląd lub zachowanie interfejsu użytkownika po stronie klienta.
Sinks:
Denial of Service
From: https://portswigger.net/web-security/dom-based/denial-of-service
Luki typu denial-of-service oparte na DOM występują, gdy skrypt przekazuje dane kontrolowane przez atakującego w sposób niebezpieczny do problematycznego API platformy. Obejmuje to API, które, gdy są wywoływane, mogą spowodować, że komputer użytkownika zużyje nadmierne ilości CPU lub miejsca na dysku. Takie luki mogą mieć znaczące skutki uboczne, takie jak ograniczenie funkcjonalności strony przez przeglądarkę poprzez odrzucenie prób przechowywania danych w localStorage
lub zakończenie zajętych skryptów.
Sinks:
Dom Clobbering
Dom ClobberingLast updated