Przejęcie konta na zlecenia.przez.net 2007-10-27
Historia tak naprawdę z przypadku. Potrzebowałem dodać nową funkcjonalność do jednego z serwisów, które tworzę. Chodziło o przypomnienie / odzyskanie hasła przez użytkownika, które zazwyczaj wysyłane jest na podany przy rejestracji adres e-mail. Jak wiemy, dobry / leniwy / sprytny (niepotrzebne skreślić) programista nigdy nie wynajduje koło od nowa i zanim zacznie coś pisać sprawdzi jak to działa u konkurencji.
Akurat ostatnio korzystałem z tej funkcjonalności na wymienionym w tytule serwisie i postanowiłem sprawdzić jak to tam działa. Na e-mail dostałem link umożliwiający zmianę hasła, którego końcówka wyglądała bardzo znajomo – ciąg 32 liczbowo-literowy wygenerowany najprawdopodobniej przez md5(). Pierwsza myśl jaka mi przeszła przez głowę czy ten kod generowany jest na podstawie identyfikatora użytkownika? md5(‘moj_login’) nie pasowało. W serwisie jest prawie 11000 zarejestrowanych użytkowników toteż postanowiłem sprawdzić czy nie jest to numer użytkownika. Prosta pętla przedstawiona niżej pozwoliła mi na sprawdzenie tej możliwości.
Moje podejrzenia były właściwe. Numer został znaleziony. Na tym etapie moje dociekania zakończyłem i zgłosiłem sprawę serwisowi.
Zauważyłem, że przypomnienie hasła zawiera błąd, który może zostać wykorzystany przez osoby trzecie. Mianowicie generują Państwo md5 na podstawie numeru użytkownika.
Odpowiedź Pana Karola K. z serwisu zlecenia.przez.net:
Witam, Proszę być spokojnym. System jest bezpieczny. Nie możemy podać szczegółów, ale wbrew pozorom nie jest tak łatwy do obejścia jak Pan sugeruje.
Co tu dużo mówić.. podziałało to na mnie jak płachta na byka. Postanowiłem rozpracować dokładnie ich system. Nie trwało to długo bo te „tajne” szczegóły to dodanie zabezpieczenia umożliwiające zmianę hasła wyłącznie po zgłoszeniu zgubienia hasła. No po prostu WOW. Wbrew zapewnieniom proszę się jednak bać o konta.
Jakie informacje potrzebne są nam do przejęcia konta użytkownika? Teoretycznie identyfikator liczbowy oraz e-mail użytkownika, który w tym serwisie zdobyć jest niezmiernie prosto (niektóre osoby podają go przy ogłoszeniach, a do innych wystarczy napisać i poprosić by nam odpisały na e-maila). Zdobycie identyfikatora było trochę trudniejsze ponieważ programiści ze zlecenia.przez.net bardzo się starali go ukryć, ale zapomnieli o jednym miejscu – wysyłka e-maila do użytkownika. Ułatwia nam to trochę pracę (chociaż i bez tego można byłoby się włamać, ale wymagałoby to znacznie więcej odwołań do ich systemu).
Poniżej przedstawiam skrypt PHP, który automatyzuje nam całe przejęcie konta. Wymagane jest utworzenie sobie konta na serwisie z uwagi na pobieranie identyfikatora użytkownika, który dostępny jest wyłącznie dla zalogowanych użytkowników.
Md5 należy używać z rozwagą.
Słowa kluczowe: Bezpieczeństwo, PHP, Techblog, bezpieczeństwo, hack, hacking, internet, luki, sieci, strony, zabezpieczenia, artykuł, blog
Widzę, że moda na full disclosure dotarła również na Joggera. Liczymy dni do załatania dziury ;)
A wystarczyłoby hashować identyfikator liczbowy połączony (ze znanym im tylko) ciągiem znaków...
Źle postąpili że zlekceważyli Twoje ostrzeżenie. Ale mimo wszystko mogłeś przed wysłaniem tego wpisu spróbować jeszcze raz im to wytłumaczyć - dając więcej argumentów (choćby te co zamieściłeś tutaj).
Nie chcę Cię straszyć, ale czytałem o podobnych przypadkach które skończyły się w sądzie.
I dobrze, że tu dał. Jakbym tak samo został olany przez admina to bym zrobił to samo.
jesli ten news komus pomoze dokonac przestepstwa (przejecie konta ktore jest cos warte chociazby) to automatycznie jestes wspolwinny
w sumie to sie moze i wykrecisz
ale latania po sadach i zabawy to bedziesz mial tyle, ze szybko nauczysz sie ze z ta machina lepiej nic nie miec wspolnego
Życie jest pełne nieoczekiwanych zwrotów akcji ;) Nie uważam, że sądów powinno się unikać, a wręcz odwrotnie powinniśmy dążyć do tego by działały sprawniej i przyjaźniej dla obywateli.
Ciekawie, ciekawie, zlecenia.przez.net - taki dobry, popularny serwis ;)
Witaj w klubie, taki sam kit z bezpieczeństwem ich serwisu pisali do mnie jak ich poinformowałem o http://www.beldzio.com/poszerzanie-portfolio.freez :)
Next on the deck... mojego maila też delikatnie to ujmując "uspokoili, iż nad wszystkim panują" .. ale przynajmniej po tym mailu "zablokowali" http://www.zlecenia.przez.net/zapomniane-haslo [podkreślam "zablokowali" ]
Mam nadzieje, że Wszyscy zdają sobie sprawę z konsekwencji prawnych faktu tak niskiego poziomu bezpieczeństwa danych użytkowników tego serwisu i faktu iż każdy z nich może sądownie domagać sie wyjaśnienia kwestii dostępu do swoich danych przez osoby 3-cie.
Jedno można im przyznać, że reagują szybko ;)
w takich wypadkach wlamujesz sie na konto admina i zostawiasz mu informacje jak to zrobiles. publiczne udostepnianie exploita jest zue :P
Fakt, mogłeś im to najpierw wysłać. Nie mniej, gratuluję pomysłu.
Faktycznie, popełniliśmy błąd. Niemniej jednak natychmiast po otrzymaniu informacji od autora bloga w postaci linka do tej strony (28.10.2007 około godz. 11:00) mechanizm automatycznej zmiany hasła z zastosowaniem tej metody został zablokowany. W chwili obecnej zmiana hasła jest możliwa jedynie poprzez kontakt z administratorem. Tak więc nie ma możliwości przejęcia cudzego konta w serwisie.
ZPN - wszystko byloby dobrze, gdybyscie zrobili to od razu, bez chelpienia sie, ze wasz system jest tak wspanaile zabezpieczony (mimo iz nie jest), i ze nie ma zadnej luki (chociaz byla)
@D4rky : Nie włamuje się na czyjeś konto (a przynajmniej się do tego publicznie nie przyznam :P) bo tutaj już mi ktoś może coś zarzucić ;) Testowałem na swoim oraz znajomego, który mi na to zezwolił.
Oczywiście wiele osób najpierw uważa, że najpierw należy zgłosić błąd serwisowi, a dopiero potem upublicznić metodę jaką można ten błąd wykorzystać, ale postanowiłem w tym przypadku postąpić inaczej. Tak jak zauważył @psz w pierwszy poście zwie się to "Full disclosure". Więcej można poczytać na wikipedii :
http://pl.wikipedia.org/wiki/Full_disclosure
@ZPN: Zablokowanie to nie jest naprawa. W dalszym ciągu liczę dni do naprawienia tej dziury i udostępnienia bezpiecznego odzyskiwania konta ;)
Rany, zrobili przypomnienie mejlem teraz. Przecież naprawa tego to 30 sekund, widać, że jakieś niekumate dzieciaki tym adminują.
Ja jako klucz do generowania hasła stosuję kombinację:
FUNKCJA_SKROTU(fragment_obecnego_haslo+data_ostatniego_logowania);
jak użytkownik wygeneruje sobie nowe hasło to klucz już jest nieważny. Tak samo jeśli sobie przypomni sobie jednak hasło i się zaloguje do serwisu - wtedy też oczywiście klucz przestaje być ważny.
Pozdrawiam
Czyli wystarczyło taki skrypt wrzucić na swoją stronke, odpalić i już mogłeś mieć każde hasło?
Mi chyba tak zabrano hasło bo od 28.10 nie mogę się zalogować
W przypadku zapomnienia hasla nowe haslo zawsze musi byc losowo generowane przez system (nie mozna pozwolic userowi na wpisanie wlasnego - moze sobie zmienic potem juz po zalogowaniu) i wysylane wylacznie na adres mailowy znajdujacy sie w bazie. Tym sposobem, nawet jezeli ktos obcy zmieni jakims sposobem userowi haslo, to nowe haslo dostanie wlasciwy user, a nie intruz...
Dla świętego spokoju nie lekceważę ostrzeżeń o lukach w tym, co tworzę. Nawet jeśli ktoś ma przywidzenia, lepiej to sprawdzić, niż później świecić oczami, że coś się stało.
Co do generowania nowych haseł, to stosuję metodę losową wzbogaconą paroma dodatkami. Na pewno nie jest to hash z jakiejś pojedynczej i oczywistej informacji.
No,no - a z md5 generowanym z daty rejestracji też sobie poradzisz?
hmm...przy dacie można spróbować określić kiedy konto zostało założone i brutal forcem przejechać. Jeśli nie mają limitu na zmianę hasła pewnie dałoby radę.
ja stosuje takie cus:
$klucz=md5(uniqid(time()));
;)
Cos zła obsluga bledow w tym explocie brak catch i try :P
@pyro: może jeszcze kawę ma parzyć ? ;)
jakie są konsekwencje prawne za wlamywanie sie na cudze konto mailowe. Jestem w stanie udowodnic, ze ktos sie wlamywal na moje konto i robil print screeny maili. Chce to zglosic na policje. Czy ma sens?
He he, dobre! znalazlem ten art w zwiazku z ostatnim banem od Google jaki dostal serwis zlecenia.przez.net, ale widze ze nie tylko tego typu rzeczy zle swiadcza o zlecenia.przez.net
kod nie jest duzy ale za to inicjatywa sie liczy - bravo :)