Zagrożenia w sieci

Tworzenie żądań HTTP

Problem

Jednym z najpotężniejszych narzędzi w rękach napastnika tworzącego exploity XSS jest możliwość generowania żądań do docelowego serwisu WWW z przeglądarki ofiary oraz możliwość czytania przesłanych odpowiedzi. W niniejszej recepturze pokazano, w jaki sposób można wykorzystać JavaScript w celu tworzenia żądań do docelowego serwisu WWW z przeglądarki ofiary.

Rozwiązanie

Utworzono skrypt JavaScript zawierający kod z poniższego listingu, a następnie udostępniono go pod adresem http://napastnik.example.org/tworz_zadanie_http.js (lub dowolnym in­nym, gdzie znajduje się serwer ataku). Dzięki temu możliwa byłaby publikacja go w serwsie internetowym

Kod JavaScript do tworzenia żądań HTTP var xmlhttpreq;

if (window.XMLHttpRequest){

/* W większości przeglądarek do tworzenia żądań AJAX wykorzystywany jest obiektXMLHttpRequest */ xmlhttpreq=new XMLHttpRequest();

}

else if (window.ActiveXObject) {

/* Internet Explorer do tworzenia żądań AJAX wykorzystuje obiektActiveXObject */ xmlhttpreq=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttpreq.open("GET","http://www.example.com/jakies_operacje",false);

if (window.XMLHttpRequest){ xmlhttpreq.send(null);

} else {

xmlhttpreq.send();

}

/* Odpowiedź serwera jest zapisana w zmiennej 'response' */ var response = xmlhttpreq.responseText;

 

DYSKUSJA

Kod z powyższego listingu przesyła żądanie do docelowego serwisu WWW z przeglądarki ofiary. Odpowiedź jest zapisywana w zmiennej response, gdzie może być parsowana za pomocą JavaScript. Następnie uzyskane informacje mogą być przesłane do napastnika tak jak w po­przednich dwóch recepturach lub użyte w kolejnych żądaniach przesyłanych do docelowego serwisu WWW. Na przykład jeśli napastnik znajdzie wrażliwość na ataki XSS w aplikacji banku internetowego, może napisać kod JavaScript przesyłający żądanie do tego serwisu, od­czytać z odpowiedzi numery rachunków, a następnie użyć ich w celu zainicjowania przelewu na swój rachunek bankowy.

Taki atak zadziała, ponieważ przeglądarka ofiary przesyła plik cookie sesji użytkownika ra­zem z każdym żądaniem do wrażliwego serwisu. Wrażliwy serwis WWW uwierzytelnia każde z żądań poprzez weryfikację pliku cookie sesji użytkownika. Nie jest w stanie od­różnić żądań zainicjowanych przez prawowitego użytkownika od żądań wygenerowanych za pomocą kodu JavaScript napastnika.

Pokazany atak działa tylko wtedy, gdy docelowy serwis WWW jest wrażliwy na ataki XSS. Choć istnieje możliwość przesyłania żądań do dowolnego serwisu WWW za pomocą ataków CSRF odczytywanie odpowiedzi serwera i wykorzystywanie infor­macji w nich przesyłanych jest możliwe tylko wtedy, gdy docelowy serwis jest wrażliwy na ataki XSS. Jest tak, ponieważ przeglądarki WWW wymuszają politykę „tego samego źródła" (ang. same origin policy), która zezwala na wysyłanie żądań AJAX tylko do takich serwisów WWW, które użytkownik odwiedził. Dzięki zastosowaniu podanej techniki skrypt napastni­ka może naśladować dowolne działanie dostępne dla prawowitego użytkownika.