Szukam swojej paczki, znajduję XSS
W 2016 roku, pod koniec listopada zamawiałem z allegro prezenty na mikołajki.
Trochę się martwiłem, że nie dojdą na czas więc co kilka godzin sprawdzałem gdzie się znajdują i czy opuściły już magazyn.
Standardowo wszedłem na stronę wyszukiwania paczek InPosta, wpisałem numer paczki i sprawdziłem w jakim miejscu się znajduje.
Zamiast zainteresować się lokalizacją mojej paczki, moją uwagę przykuł adres url który wyglądał dość dziwnie (numer paczki zamieniłem na zera):
https://inpost.pl/pl/pomoc/znajdz-przesylke?package[0000000]
Adres zawierał tablicę jako parametr. Miało to sens w przypadku gdy podaliśmy kilka zamówień w wyszukiwarce. Wtedy adres wyglądał tak
https://inpost.pl/pl/pomoc/znajdz-przesylke?package[0000000,0000001]
Tylko tak się po prostu nie robi :)
Sprawdziłem w źródle strony gdzie dokładnie ląduje ten parametr. Okazało się, że ląduje jako parametr tablicy w jakimś budowanym zapytaniu w JavaScripcie. Niestety, minęło tyle czasu że nie jestem Wam go w stanie pokazać.
Postanowiłem podmienić adres na coś ciekawszego. Wrzuciłem stary dobry skrypt, który testuje proste wywołanie XSS'a
https://inpost.pl/pl/pomoc/znajdz-przesylke?package[<script>alert('xss')</script>]
który od razu zadziałał - czyli w Chromie wyświetlił białą stronę ponieważ Chrome zablokował skrypt :) Niestety w przypadku Firefoxa (najnowsza wersja na tamten czas) już tak miło nie było, bo jak widać na załączonym poniżej filmiku - skrypt się wykonał!
Problem polegał na tym, że dane z parametru url nie były escapowane, znaki nie były zamienione na encje HTMLowe i skrypt był możliwy do wykonania.
Co to oznacza dla zwykłego Kowalskiego?
Wielu z nas korzysta z InPosta do nadawania/odbierania paczek, więc podesłanie komuś linka do zaufanej strony nie wzbudziłoby podejrzeń. Szczególnie do tak popularnej jak wyszukiwarka paczek.
Problem w tym, że gdyby Kowalski otworzył link, mógłbym wykonać dowolny kod w jego przeglądarce bez jego wiedzy. Ot co :)
Zgłoszenie
28 listopada zgłosiłem InPostowi informację o odnalezieniu luki. Odpowiedź na moją wiadomość otrzymałem dopiero 8 grudnia i przekazałem dokładne informacje nt. wywołania XSS.
Błąd został naprawiony po kilku dniach, a z tego co zauważyłem to po prostu zablokowali możliwość wprowadzenia parametru zawierającego znaki "></
W nagrodę za przekazanie informacji o błędzie otrzymałem 9 kodów na nadanie paczek o różnych gabarytach o wartości 100zł.