8:33
30/8/2012

Wczoraj jeden z naszych czytelników pożalił nam się, że odkrył poważną dziurę w serwisie Joemonster.org, ale jego administracja nie zareagowała na informacje o błędzie.

Na czym polegał błąd w Joemonster.org?

Nasz czytelnik (dane do wiadomości redakcji), podczas rejestracji nowego konta, chciał aby miało ono login “1“. Niestety, formularz rejestracji odrzucił ten login z informacją iż nazwa użytkownika nie może być liczbą. Informacja ta pochodziła jednak z JavaScriptu, kóry był odpowiedzialny za “walidację” formularza. Kiedy nasz czytelnik usunął z formularza funkcję walidującą… konto udało się założyć.

joemonster rejestracja

JoeMonster: formularz rejestracji

I tu pojawia się pierwszy błąd Joemonstera. Brak sprawdzania przesyłanych przez użytkownika danych po stronie serwera. Ufanie, że skrypty client-side to wystarczające rozwiazanie, nie jest bezpiecznym podejściem — klient może te skrypty po prostu wyłączyć

Kiedy nasz czytelnik zalogował się na swoje konto o loginie “1“, zauważył, że serwis powitał go tak: “Witaj nieznajomy“. Pomyślał więc, że być może zawsze na początku Joemonster tak wita swoich użytkowników, ale kiedy zaczął rozglądać się po profilu, aby ustawić inne dane, zauważył że coś jest nie tak — jest na czyimś koncie…

JoeMonster Hacked

JoeMonster – konto o loginie 1

Aby potwierdzić tezę, nasz czytelnik założył konto o loginie “2” i ujrzał wtedy inne powitanie:

Joemonster Hacked

JoeMonster – konto o loginie 2

I to jest drugi błąd Joemonstera. Login użytkownika zapewne jest w serwisie wykorzystywany jako fragment zapytania SQL. Jeśli jednak jest on liczbą, z bazy wybierane jest tak naprawdę konto o danym identyfikatorze.

Co gorsza, mając dostęp do czyjegoś konta, ma się także dostęp do komunikatora Czesława:

Joemonster hacked - czesiek

JoeMonster – dostep do komunikatora Czesław

Oraz skrzynki pocztowej (hostowanej na Google Apps):

Joemonster Hacked - Gmail Google Apps

Joemonster – dostęp do Gmail Google Apps

I to jest trzeci błąd JoeMonstera. Brak włączonego dwuskładnikowego uwierzytelnienia, jak wielokrotnie już wspominaliśmy, zazwyczaj kończy się tragicznie…

To nie pierwszy problem JoeMonster z bezpieczeństwem

3 lata temu podmieniona została strona główna serwisu — atakujący wykradli backup bazy danych serwisu, odczytali hasła, podpięli się do bazy i podmienili stronę. Atakujący poznali wtedy także dane użytkowników (w tym hashe haseł) — mamy nadzieję, że jeśli posiadacie konto na JoeMonster to udało wam się przez 3 lata zmienić hasło ;)

Joemonster nie odpowiada na zgłoszenie o błędzie?

Warto napisać do Niebezpiecznika, kiedy administracja serwisu zwleka z odpowiedzią na wasze zgłoszenia błędów ;-) Na nasze pytania otrzymaliśmy błyskawiczną odpowiedź od Jakuba Kasicy z ekipy JoeMonstera, zapewniającą że błąd został usunięty:

Potwierdzamy, że taki błąd miał miejsce. Po jego zgłoszeniu
niezwłocznie podjęto prace mające na celu eliminację problemu.
W chwili obecnej dziura została załatana. Nie jest możliwe ani
założenie wyłącznie numerycznego konta, ani przelogowanie się z
istniejącego konta numerycznego na konto innego użytkownika.
Przy okazji chcielibyśmy zaznaczyć, że nie wyciekły żadne hasła, nie
uzyskano dostępu do panelu administracyjnego serwisu, ani do bazy
danych.

Gratulujemy JoeMonster szybkości w działaniu. Tak powinna wyglądać idealna reakcja na zgłoszenie błędu, bierzcie przykład z JoeMonstera.

Rady dla programistów

Z powyższego fuckupu JoeMonstera należy wyciągnąć następujące wnioski:

  • Nie polegaj tylko i wyłacznie na walidacji client-side
  • Zastanów się, jak zapytania SQL-owe rozumieją wartości przekazywane jako liczby
  • Gdzie to możliwe korzystaj z dwuskładnikowego uwierzytelniania. Serio. Włącz je teraz.

Jednym z prostych testów, które pokazujemy na naszych szkoleniach z Atakowania i Ochrony Webaplikacji (a który ujawnia błąd tego typu) jest zastąpienie identyfikatorów numerycznych wyrażeniami arytmetycznymi. Np. zamiast id=5, podstaw id=6-1 i zobacz czy wynik jest taki sam jak w przypadku id=5. Pytanie podchwytliwe: dlaczego przy teście id=4+1 nie uzyskamy poprawnej odpowiedzi? :)

PS. Ponieważ miejsca na poprzedni termin Atakowania i Ochrony Webaplikacji w Krakowie sprzedały się w 2 dni, właśnie otworzyliśmy kolejny wrześniowy termin: 17-18 września 2012r. — pozostało jeszcze 8 wolnych miejsc, a do 5 września obowiązuje promocyjna cena. Kto pierwszy ten lepszy!

Przeczytaj także:



42 komentarzy

Dodaj komentarz
  1. zastanawia mnie do czego służy ficzer z id’kiem, stawiam na impersonację dla admina, jakieś inne propozycje?

    • Pewnie jest jakaś funkcja findUserByLoginOrId()
      i używają przy logowaniu login, kiedy indziej id

  2. “dlaczego przy teście id=4+1 nie uzyskamy poprawnej odpowiedzi? :)”
    ha, ja wiem:)

    • Ja też wiem. Magia spacji… ;)

    • My Little Injection: Space is Magic (Wybaczcie, nie mogłem się powstrzymać :P )?

    • Jakby tam jeszcze całkowanie jakoś wrzucić to admin miałby co liczyć patrząc na logi ;P

    • Ja nie rozumiem :(

    • @h
      Funkcja urlencode() w PHP zamienia plus na spację :P

    • Co ma php do urli?

    • To dzisiaj jeszcze ktoś nie robi (int)$zmienna w php dla cyferek?

    • PHP nic. To jak zawsze wina ludzi z W3C ;) http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1

    • a co ma apache do strony www

    • @student: naukowcy jeszcze szukają odpowiedzi ;)

  3. Dzieki za info okazalo sie ze mialem to samo u siebie ;] ciekawi mnie tylko jak oni spieli to z google aps???

    • ;]

  4. > Nie polegaj tylko i wyłacznie na walidacji client-side

    Właściwie to sprawdzania poprawności wprowadzanych danych po stronie klienta nie nazwałbym walidacją (z widocznych wyżej powodów), co najwyżej oszczędzaniem łącza – podpowiedzią “you’re doing it wrong” bez przeładowania strony :)

  5. Dlaczego nie uzyskamy? :) Kwestia url encode :P a co do ufania JS to rzeczywiście głupota jeśli miałbym zrobić uwierzetylnianie z 1 sprawdzaniem to wolałbym już to zrobić po stronie backendu, a frontendowy JS tylko dla wygody użytkownika.

  6. Najpierw zapewnić działanie i bezpieczeństwo serverside, a potem dodawać wodotryski w postaci js. Przecież to jest oczywiste. Wszędzie o tym trąbią i wbijają do głowy, ale zawsze znajdzie się ktoś kto chyba nie chce słuchać.

  7. JoeMonster to jedna wielka dziura. Przeglądając sam kod HTML i skrypty można się domyśleć co jest w środku tego programistycznego burdelu. Stronę darzę sympatią, ale jeśli chodzi o bezpieczeństwo i ogólnie kod to taka jest prawda.

  8. > Nie polegaj tylko i wyłacznie na walidacji client-side

    Czy samo w sobie pisanie w php spełnia ten warunek?

    • nie, nikt normalny nie pisze w PHP

    • @hahaha
      A niby w czym?!

    • JavaEE, ASP.NET.

    • Na szczęście opinie ekspertów z ynternetu mamy gdzieś.
      — programiści php

  9. Na chomikuj jest podobnie, wystarczy zmienic id skrzynki, zeby przeczytac prywatne wiadomosci innego uzytkownika. Szkoda, ze wiadomosci sa glownie od administracji:)

  10. Przecież tego typu rozwiązanie to normalnie jakieś “przedszkole”!?

    Takie rzeczy to można w zwykłym formularzu kontaktowym robić, a nie tam, gdzie przechowywane są tysiące danych z loginem i hasłem. Ja w ogóle nie biorę pod uwagę, aby walidacja nie była po stronie serwera. JS to dobry dodatek poprawiający funkcjonalność, a nie jedyna forma zabezpieczenia. Myślałem, że w dobie współczesnych czasów, takie błędy to już przeszłość … hmmm.

    Czego oni teraz na informatyce uczą? A może uczą, tylko sobie olewają?

    • myslisz ze Pani Janka na informatyce uczy bezpieczenstwa webaplikacji na poziomie szkolen niebezpiecznika? no sorry…

    • W takim razie Pani Janka powinna zapisać się na Niebezpieczne szkolenia.
      Tak, tak, krakersy mogą być pocztą.

    • Pani Janka nadal wymaga table tr td /td /tr /table jako warunku koniecznego do zaliczenia sprawdzianu ze stron internetowych.

    • Moim zdaniem, to powinien być oddzielny nawet przedmiot z bezpieczeństwa aplikacji. To już nie to samo co 20 lat temu, gdzie php wiło się w kokonie, a szkolenia w N to obowiązkowa delegacja.

      Pani Janka, to pewnie wykłada informatykę, ale w podstawówce. Nawet nie w gimnazjum, bo usłyszałaby od niejednego gimnazjalisty, czym powinna się zająć! ;-D

  11. takiego faila na zapytaniu SQL to jeszcze nie widzialem. ciezko mi sobie to nawet wyobrazic jak ktos mogl taka bzdure zaimplementowac (bo domyslnie to by tak nie działało)

    • Pieniądze z przedłużeń kont idą najwyraźniej na najlepszych programistów ;)

    • Najlepszy fail jaki ja widziałem, to mechanizm logowania w którym loginy i hasła były porównywane za pomocą LIKE.

    • lepszy fail gdy login i hasło do admina to jest admin/admin :)

  12. Jasne, kazda strona bedzie wysylala smsy lub miala aplikacje na smartfony. A kto za to zaplaci?

  13. “Zastanów się, jak zapytania SQL-owe rozumieją wartości przekazywane jako liczby”
    nie za bardzo czaję w jaki sposób mógł tu zawinić sql, przecież w kwerendzie prawdopodobnie jest jakiś “WHERE userName=[arg]” a zatem filtrujemy po konkretnym polu – nie może być tak, że jeśli arg jest stringiem to where’ujemy po “userName” a jeśli liczbą to po “userId”…

  14. W całym serwisie jest masa pomniejszych błędów. A to rozwalisz forum że się całkowicie rozjedzie, a to szaffa nie wyświetla następnych plików, przy swoich plikach/na swoim profilu raz możesz usuwać komentarze innym razem nie możesz, galeria numeruje obrazki w sobie tylko znany sposób dzięki czemu po 30 następuje obrazek numer -27 (tak, minus 27), to znowu galeria przy pewnych obrazkach zmienia stronę z pl na angielską wersję, czesław (komunikator) czasem i przez pół dnia uparcie twierdzi że nie przeczytałeś wiadomości, czasem można jednemu plikowi dać kilka okejek (co teoretycznie jest niewykonalne)…
    nie jedno by się pewnie jeszcze znalazło, pominę fakt że większość strony to “wersja beta” i od kilku lat te “bety” nie ewoluują w żadnym kierunku

    • Ojtam ojtam.
      Portal jajcarski, to zapewne “to” celowy zabieg, by wywołać face-palma masowego.
      JoeMonster to choroba przenoszona drogą kropelkową, przy pękaniu ze śmiechu…

  15. Niebezpiecznik zamienia w komentarzach dwa myślniki na jeden. ;)

  16. Witam, mam pytanie off top.
    Ktoś włazi na mojego bloga z takiego dziwnego adresu:
    http://10.1.10.196:15871/cgi-bin/blockOptions.cgi?ws-session=19219179161
    Co to znaczy, jakiś dziwny ten adres.
    Jestem ciekaw a sam jestem ni hu hu w temacie, zabezpieczeń adresów itp.

    • To tylko ja, przepraszam że przestraszyłem.

    • To adres z sieci lokalnej.

Twój komentarz

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

RSS dla komentarzy: