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!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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ś:
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
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 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
O, ktoś tu ma braki! :P
Polecam serdecznie swój artykuł, gdzie nieco pochylam się nad architekturą ekosystemu Steem.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Odbierałem przesyłkę z gadżetami Steemowymi na meetup ale nie mogłem się połapać w tym interfejsie ;-)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Pochwal się gadżetami :P
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Rozdałem wszystkie w Tokio.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit