Jak zdobyłem 500tys. PDFów z danymi osobowymi klientów sexshopu, jubilera i 11 innych sklepów?
Jeśli wrzuciłeś coś do internetu, to uznaj to za dostępne publicznie dla każdego. Na zawsze.
O tym powinniśmy myśleć za każdym razem gdy dodajemy gdzieś zdjęcie, wysyłamy wiadomość, potwierdzamy swoją tożsamość w internecie lub robimy coś o czym np. nasz sąsiad nie powinien wiedzieć. Dane przesyłane są w internecie po całym świecie. Mogą zostać przechwycone, podsłuchane, zablokowane lub nadpisane. Rozmowa jest “prywatna” ponieważ jest prowadzona pomiędzy dwoma osobami, zdjęcia z piątkowej imprezy wrzucasz na “prywatną” chmurę, posiadasz “prywatne” konto w banku i robisz zakupy na “prywatnym” koncie w sklepie internetowym. Co może pójść nie tak?
Chciałem tylko obejrzeć światełka...
Moja historia zaczęła się gdy z nudów, pewnego listopadowego wieczora przeglądałem serwis tworczywo.pl. Zastanawiałem się po ile takie lampki chodzą i co ciekawego jest w ofercie. Nie miałem oczywiście w planie czegokolwiek kupować, po prostu naszło mnie sprawdzenie ile z takiego interesu ktoś może wyciskać.
Lampki co prawda wyglądały ciekawie ale jako programistę bardziej zaciekawił mnie adres strony ponieważ zawierał w subdomenie słowo “test” (test.tworczywo.pl). Z natury jestem ciekawski, więc postanowiłem trochę podłubać wyszukując adres tej domeny w Google. Może zdarzyła się sytuacja, że Google zcacheował kiedyś jakieś interesujące rzeczy, które mógłbym znaleźć? W końcu środowisko testowe lubi od czasu do czasu paść i sypnąć jakimś ciekawym logiem, z którego można się sporo dowiedzieć.
Niestety “nie pamiętam” jakiej frazy użyłem w Google do wyszukania tego co znalazłem. Było to natomiast coś co zadowoliło moją ciekawość. Co to takiego było? - zapytacie.
Okazało się, że Google zaindexował adres pliku PDF z podsumowaniem zamówienia z danymi osobowymi osoby zamawiającej, to znaczy: imieniem, nazwiskiem, adresem, numerem telefonu, emailem oraz listą zamówionych przedmiotów i ich ceną. Jeden wynik? A co jeśli...
Jeden z przykładowych PDFów, do których miałem dostęp.
Na tropie
Zaciekawiło mnie to w jaki sposób w ogóle Google zaindexował ten wynik. W końcu takie dane nie powinny nigdy zostać zaindexowane, szczególnie że adres url zawierał identyfikator zamówienia oraz hash, więc powinien to być unikalny link dla osoby która dokonała zamówienia.
tworczywo.pl/orderPdf/show/id/[ID]/hash_code/0a5769c8d[HASH]16cf6698830188c
Przyszło mi na myśl sprawdzenie czy możliwy jest dostęp do katalogu w którym mogłyby znajdować się inne PDFy. W praktyce PDFy po prostu mogą leżeć w jednym folderze na serwerach danego serwisu. Skoro dostęp do PDFa nie wymaga zalogowania się i potwierdzenia tożsamości to może i cały katalog również? Postanowiłem kawałek po kawałku usuwać części adresu URL licząc na to, że mi się poszczęści i na coś trafię. Długo nie musiałem szukać. Usnąłem hash, kliknąłem enter i otrzymałem ten sam PDF. Ale jak to? Przecież usunąłem hash?! Serwer nie powinien zezwolić na dostęp do pliku ponieważ jego najbardziej unikalna część, która mogłaby potwierdzać to że ogląda je właściciel, właśnie zniknęła. No i tu zaczyna się robić ciekawie. Otrzymałem taki oto adres URL:
tworczywo.pl/orderPdf/show/id/[ID]/hash_code/
Skoro nie potrzebuję potwierdzać tego, że posiadam unikalny link (który klient powinien otrzymać po dokonaniu zamówienia) to, co się stanie jeśli zmienię w adresie coś jeszcze? Identyfikator zamówienia nie wyglądał dość unikalnie. Tak więc spróbujmy! Załóżmy w tym momencie, że ID to numer zamówienia np. 56543. Częstą praktyką jest używanie inkrementowanych identyfikatorów z bazy danych. Co się stanie jeśli zwiększę wartość liczby o +1 na 56544?. BANG! Kolejny PDF z podsumowaniem zamówienia innej osoby! I można tak aż do najnowszego/najstarszego zamówienia! Których niestety było kilka/kilkanaście tysięcy.
"Czy to błąd? Czy to błąd?"
Nie dostałem się do katalogu z podsumowaniami zamówień, pomyślałem, że może to być błąd biblioteki, która została użyta do wygenerowania PDFa. Zacząłem Googlować frazę z podanego powyżej adresu url. Dodałem kilka parametrów do wyszukiwania i to, co zobaczyłem wprawiło mnie w osłupienie.
Końca nie widać
Znalazłem w Google kilka wyników - błąd w znalezionych serwisach był dostępny. Sprawdziłem jeszcze DuckDuckGo i Binga - z tych dwóch tylko DuckDuckGo zwracał jeszcze jakieś dodatkowe wyniki których nie pokazywał Google. W sumie znalazłem 13 podatnych na błąd serwisów:
- tworczywo.pl
- megakuchnia.pl
- mozaikiswiata.pl
- planettoys.pl
- sex-shop69.pl / sex-shop69.cz / sex-shop69.sk
- jubiler.pl
- sklep.szymkowiak-karcher.pl
- miesodlapsow.pl
- uchwyty-inside.pl
- aseopaper.pl
- sklep.topmeble.eu
- world-style.pl
- rybarium.pl
Zacząłem wertować po identyfikatorach żeby sprawdzić ile wyników maksymalnie zwraca każdy z serwisów. Łączny wynik? Około 500 000 plików PDF możliwych do pobrania bez jakiejkolwiek walidacji/weryfikacji! Każdy zawierał dane o których wspominałem wcześniej: imię, nazwisko, adres, numer telefonu, lista zakupów, kwota jaką klient zapłacił za zakupy. W jednym ze sklepów w podsumowaniu znajdował się nawet PESEL - “tylko” kilka tysięcy wyników. Pozostawiam waszej wyobraźni to, co moglibyście zrobić z tak pokaźną ilością takich danych.
Szukając kontaktu do właścicieli serwisów w celu zgłoszenia błędu zauważyłem w stopkach stron, że korzystają z aplikacji e-commerce (sklep internetowy) tego samego producenta - sote.pl - im również zgłosiłem ten błąd.
W odpowiedzi od producenta oprogramowania otrzymałem informację, że błąd dotyczył jednej z wersji ich oprogramowania, a klienci po prostu nie zaktualizowali aplikacji. Poprosiłem również o zajęcie się problemem z zaindexowanymi przez wyszukiwarki linkami do podsumowań zakupów.
A jednak były indexowane :)
Jakie jest zakończenie tej historii?
Każdy z właścicieli serwisu również został o wszystkim poinformowany kilka miesięcy temu, a błędy zostały naprawione (w większości).
Od właścicieli systemu sklepowego (sote.pl) otrzymałem podziękowania za zgłoszenie błędu.
Od sklepu jubiler.pl miałem możliwość otrzymać coś ze sklepu lub bon na zakupy - poprosiłem o przekazanie kwoty którą mieliby mi do zaoferowania na Akademię Przyszłości - https://akademiaprzyszlosci.org.pl Otrzymałem odpowiedź, że nawet większa kwota została przelana - nie chciałem już drążyć tematu i domagać się screenshotów lub potwierdzeń przelewów, ufam Wam na słowo :)
Od sklepu rybarium.pl miałem możliwość otrzymać bon na zakupy w kwocie 50zł. Również poprosiłem o przekazanie tej kwoty na w/w Akademię Przyszłości. Niestety do dziś nie otrzymałem żadnej odpowiedzi od właściciela sklepu :(
Memy pochodzą z serwisu imgflip.com
Stare przysłowie pszczół mówi: nie wysyłaj mailem, ani nie umieszczaj w sieci niczego, czego byś nie chciał zobaczyć kiedyś na pierwszej stronie porannych gazet 😛
[BOT] Witamy kamilzielinski na #polish, tagu używanym przez Polaków do publikacji polskich treści w ekosystemie Steem (np. Steemit czy Busy). W ekosystemie Steem wspiera się oraz nagradza się nową i autorską twórczość.
Uwielbiam takie historie, bardzo ciekawe są aspekty etyczne. No bo jeśli ktoś dobrowolnie wrzuca swoje dane w Internet to jak może mieć potem pretensje jeśli coś się wydarzy? Była tu kilka dni temu całkiem niezła burza wywołana przez użytkownika @fifek, który wynicował z otchłani (publicznie dostępnego) Internetu wszystkie dane jednego z użytkowników, ponoć nie bez przyczyny. Spotkał się za to ze srogą krytyką. Jednak to tak jakby zostawić odpięty rower na tydzień i potem mieć pretensje, że ktoś ukradł. Czy to jest victim blaming?
Szacun za przekazanie giftów na cele charytatywne, dziwić tylko może tak mały wskaźnik odpowiedzi od sklepów.
Congratulations @kamilzielinski! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
Polecam Gesturefy do FF. Jest gest automatycznie podwyższający numerek w adresie :).
Można jeszcze trochę tego w sieci znaleźć ;)
Niestety masz rację. Problem zgłoszony został 3 miesiące temu i część serwisów w przeciągu kilku dni się zaktualizowała, a reszta do dziś nic nie zrobiła pomimo tego, że producent oprogramowania również wiedział o problemie i powinien zadbać o bezpieczeństwo swoich klientów
Niezła historia.
Bardzo fajny artykuł :)
Congratulations @kamilzielinski! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP