InPost XSS - błąd znaleziony na stronie wyszukiwania przesyłek
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ł.
Fajnie, że się odwdzięczyli, ale szczerze mówiąc, nagroda ta ma się nijak w stosunku do tego, jaką dużą przysługę im zrobiłeś - nie popisali się.
Tak czy inaczej, dobra robota!
przydałby się dodatkowy opis. Ty coś wstrzyknąłeś, czy natknąłeś się na coś, co wstrzyknął ktoś inny?
Poza tym, samo pokazanie efektu jest nudne. Jako whitehat, powinieneś:
W sumie wrzucałem filmik na D.Tube, nie spodziewałem się że to jest tak ze sobą połączone że od razu poleci mi publikacja na blogu :D Już fixuję, za chwilę będzie bogatszy opis :)
O, ktoś tu ma braki! :P
Polecam serdecznie swój artykuł, gdzie nieco pochylam się nad architekturą ekosystemu Steem.