17:45
14/4/2017

Orange w Polsce uruchomiło jakiś czas temu ciekawą usługę. Podajesz numer telefonu, dostajesz kod SMS-em, wpisujesz kod na stronie i masz Spotify Premium, opłacane ze środków abonenta Orange. Problem w tym, że do dnia dzisiejszego był w niej błąd, dzięki któremu każdy mógł aktywować sobie konto Spotify Premium, a koszty zrzucić na dowolnego klienta Orange, który co miesiąc opłacałby nieświadomie 19,99 za Spotify Premium.

Kupowanie Spotify Premium na czyjś numer

Aktywacja usługi Spotify Premium wymaga wejście na stronę http://spotify.orange.pl/, wpisania numeru telefonu i następnie wpisania kodu przysłanego SMS-em. Taki sposób potwierdzania subskrypcji jest często spotykany w internecie i opiera się na założeniu, że tylko posiadacz telefonu jest w stanie poznać wysłany do niego kod.

Niestety, jak pokazał nam nasz Czytelnik Maciej, możliwe było ustalenie kodu wysłanego na podany w formularzu numer telefonu nawet bez zbliżania się do tego telefonu.

1. Wchodzimy na http://spotify.orange.pl/#/
2. Wpisujemy numer telefonu innej osoby.
3. Sprawdzamy kod SMS, który… został już wysłany do przeglądarki w formie odpowiedzi XHR:

Do adresu http://spotify.orange.pl/spotify-orange-web/rest/verify/send/code/ wysłane jest żądanie GET, w odpowiedzi przeglądarka otrzymuje:
{“responseCode”:”OK”,”data”:”XXXX”}

Gdzie XXXX jest tym samym kodem, który jest w otrzymanym SMSie.

Pomysł na “atak”? Wpisać jakikolwiek numer z Orange, a następnie odczytać kod z odpowiedzi od serwera i założyć konto Premium w Spotify na czyjś koszt. Maciej twierdzi, że nie przeprowadził tego procesu do końca, bo posiada już Spotify. Odniósł jednak wrażenie, że operację da się przeprowadzić, a tym samym jakaś osoba niezorientowana w temacie może zacząć płacić 19.90 miesięcznie za usługę świadczoną na rzecz kogoś innego.

Orange błyskawicznie naprawia błąd

Warto zaznaczyć, że usługa Spotify Premium w Orange jest darmowa przez pierwsze 30 dni. Zatem gdyby ktoś zorientował się, że subskrypcja została włączona dla jego numeru, niekoniecznie straci jakieś pieniądze. A zorientować można się po takim SMS-ie jaki przychodzi na telefon abonenta, którego numer poda się w formularzu:

Zakładamy, że prędzej czy później ktoś dostrzegłby, że do jego rachunku dopisywane jest 19,99 i skorzystałby z reklamacji, ale ten proces nie jest całkiem bezbolesny.

Mając to na uwadze zwróciliśmy się z pytaniami do Orange. Chcieliśmy wiedzieć, czy operator potwierdza istnienie błędu oraz czy klienci, którym włączono usługę, byli jakkolwiek o tym informowani (poza tym, że musieli dostać SMS z kodem i to mogła być wskazówka, że coś jest nie tak).

Wojciech Jabczyński udzielił nam bardzo szybkiej odpowiedzi.

Dziękujemy za zwrócenie uwagi na błąd. Oczywiście usuniemy go jak najszybciej będzie to możliwe. Sprawy ewentualnych reklamacji będziemy rozpatrywać indywidualnie.

I faktycznie, po chwili po błędzie nie było śladu. Żeby każda z firm tak reagowała na zgłoszenia błędów jak Orange, i to jeszcze tuż przed świętami!

P.S. Z kronikarskiego obowiązku odnotujemy, że mieliśmy też inne zgłoszenie dotyczące tej samej usługi. Jeszcze w lutym inny z czytelników wskazywał na możliwość “złośliwego” włączenia usługi Spotify Premium w Orange. Czytelnik ten nie odczytywał kodu z odpowiedzi od serwera, ale przewidywał jego wartość. Zauważył on bowiem, że kody, jakie SMS-em wysyła Orange, są kolejnymi liczbami, a więc teoretycznie można było przewidzieć kod wysłany dla wskazanego numeru, znając to, jaki kod serwis wysłał na nasz numer chwilę wcześniej. Niestety, nam nie udało potwierdzić, że taka możliwość naprawdę istniała. Może była to chwilowa anomalia, a może osoba zgłaszająca nam ten problem miała wyjątkowe “szczęście”?

Przeczytaj także:

34 komentarzy

Dodaj komentarz
  1. W takim przypadku jakie jest sensowne i szybkie rozwiązanie problemu? Wysyłanie method post zamiast get?

    • Po prostu nie wyświetlać informacji debugowych w kodzie strony. Lepiej wypluwać już do jakiegoś pliku – jeżeli się zapomni wyłączyć opcji debug – mniejsze straty.

    • Jak to? Po prostu sprawdzać to po stronie serwera.

    • A co by to zmieniło?
      Moim zdaniem wystarczy nie odsyłać poprawnego kodu przeglądarce, a przechować go gdzieś po stronie serwera – np. w sesji, a jakby się ktoś bardzo rozpędził to w bazie danych. Wtedy przeglądarka kodu nie dostaje, a sprawdzenie odbywałoby się tylko po stronie serwera. Metoda prosta i oczywista.
      Nie nazwałbym tego “czegoś” nawet błędem, tylko czyjąś niewiedzą. Oczywistym jest, że dane wysłane do użytkownika można podejrzeć, więc żaden kod nie powinien być tak odsyłany.

    • Wcale nie wysyłasz, walidujesz po stronie serwera i wysyłasz do frontu jedynie status operacji

    • Serio?

      Jeżeli token, który ma przyjść SMS-em to sekret (a jest to sekret bo umożliwia potwierdzenie transakcji i powinien dotrzeć jedynie do posiadacza telefonu o danym numerze) to w ogóle nie powinien być nigdy widoczny (ani w GET, ani w POST ani w niczym innym) po stronie klienta.

    • A co za roznica? Nawet w HTTPS? Wolne zarty. Inna kwestia to po co to wysylac? Jesli to byl sposob studenta na sesje :) to wystarczylo wyslac numer telefonu (w sumie to klient go wpisal) i trzymac otwarte zapytania w bazie….

    • Po wysłaniu smsa z kodem, identyczny powinien być jedynie na serwerze. W momencie potwierdzenia formularza po stronie klienta, powinno zostać wysłane zapytanie do serwera o poprawność wpisanego klucza. W ten sposób autentyczny kod znajduje się jedynie na telefonie i na serwerze.

    • Tak jak koledzy wyżej już napisali. Pod żadnym pozorem ten kod nie powinien znaleźć się w tej REST-owej odpowiedzi (bez znaczenia, czy to GET, czy POST, bo i jedne i drugie żądania są jawne). Błąd był tutaj typowo logiczny – zrobili to w złą stronę. Przeglądarka powinna wysyłać żądanie do serwera, w żądaniu przekazując podany na stronie kod. Serwer powinien sprawdzić zgodność wpisanego kodu z kodem wygenerowanym i zwrócić w odpowiedzi jedynie status – czy jest OK, czy nie jest OK. Głupi błąd, jeden z najgłupszych i najbanalniejszych z jakimi się spotkałem, wynikający nie tyle co z braku wiedzy, ale z błędnego planowania logiki biznesowej.

  2. Wszelkie prawa zastrzeżone © 2009- echo date(“Y”);
    Macie w stopce. Ktoś chyba się rozpędził z debugowaniem ;)

    • Jesteś nowy prawda?

    • He he he od dawien dawna to tam siedzi, już parę razy o tym pisali że ludzie się nabierają ale patrzę że jeszcze nie do wszystkich dotarło.

    • to taki joke. Wiem, nie śmieszne, tylko irytujące.

    • Kolega widzę tutaj nowy? :)

    • To już się robi nudne…

    • 2009- echo date(“Y”);

      Może najpierw warto zajrzeć w kod źródłowy? :P

    • ciągle mnie to śmieszy :)

    • Świeżynka :)

    • A tak w ogóle to tam powinno być: echo date(‘Y’), a nie echo date(“Y”). Apostrof zamiast cudzysłowu to zawsze jakaś tam nanosekunda oszczędności czasu na interpreterze ;)

  3. Ciekawe czy po 27 kwietnia będzie więcej takich błędów na wolności ;)

  4. Założenie, że treść SMS-a jest dostępna tylko dla użytkownika telefonu, jest błędne – jeszcze przed użytkownikiem ma do niej dostęp operator. Jest wprawdzie aplikacja Silence (dawniej SMSSecure) umożliwiająca szyfrowanie end-to-end, ale niewiele osób jej używa.

    • Orange świadczy usług pośrednictwa spotify i orange jest operatorem. Po co mieliby się podsłuchiwać? :P

    • Chodziło mi raczej o ogólną prawidłowość, nie o ten konkretny przypadek, w którym operator jednocześnie obsługuje płatności.

  5. “Bartosz 2017.04.15 00:22
    Orange świadczy usług pośrednictwa spotify i orange jest operatorem. Po co mieliby się podsłuchiwać? :P ”
    – Bo SMS moze isc przez siec obca (nawet przez wielu operatorow)?
    – Bo ruch w powietrzy jest dostepny dla wszystkich do sluchania?
    – Bo tak…?

    • No taaaak… w sumie to ja się podsłuchuję notorycznie. Prawie zawsze jak coś mówię, to się podsłuchuję…

    • Przez jaką sieć ma iść SMS wysłany przez Orange do klienta Orange?

    • @marsjaninzmarsa a słyszałeś o czymś takim jak roaming?

    • Roaming.

  6. Powiedzeć, że proces składania reklamacji w orange “nie jest bezbolesny” to nie powiedzieć nic. Dla orange całkowicie normalne jest nieodpowiadanie na reklamacje, uchylanie się od odpowiedzialności a na koniec straszenie windykacją mimo dwóch – trzec złożonych reklamacji. Nawet UKE i UOKiK w cc nie robi na nich wrażenia.

    • To zależy od przypadku. Mi zjadło środki z prepaida, bo się przeterminował, a nie powinien. Zauważyłem to po miesiącu, bo to karta siedząca w modemie z internetem zapasowym. Napisałem reklamację i 20zł oddali w 2-3 dni.

  7. Naprawili, ale endpoint api od sprawdzania czy kod jest poprawny nie ma ograniczen. Bruteforce w 20-30 minut zlamie kod dla danego numeru.

  8. Nie jest to takie oczywiste, że coś złego się dzieje na koncie po dostaniu takiego smsa. Jeżeli ja bym dostał taką wiadomość uznał bym, że ktoś po prostu pomylił się przy wklepywaniu numeru na stronie a skoro nie miał możliwości potwierdzenia tego kodem z smsa to nie ma się czym martwić.

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: