16:33
5/8/2014

Docierają do nas dziesiątki zgłoszeń od użytkowników Allegro, którzy przeglądając serwis, zamiast widzieć sparsowany kod HTML, widzą zwracane przez serwer pliki z kodem PHP do pobrania. Nie ma powodu do paniki (przynajmniej na razie) — próbki kodu, które do nas trafiły nie niosą za sobą (póki co) żadnego dla użytkowników ryzyka. Brak w nich danych poufnych, choć znajdują się tam nazwiska i adresy e-mail programistów, ID ticketów z systemu zarządzania błędami oraz nazwy funkcji i intranetowe URL-e, a także ścieżki do includów (niektóre zawierają hasła do serwerów)…

Fragment pliku zwracanego uzytkownikom Allegro

Fragment pliku z kodem źródłowym PHP zwracanego uzytkownikom Allegro

Kod źródłowy Allegro

Kod źródłowy Allegro

Niektórzy otrzymują też niesparsowany PHP jako “wstawkę”:

Allegro-source-code

Poniżej lista unikatowych plików jakich kod źródłowy podesłali nam czytelnicy (jeśli zobaczyliście kod innego pliku, dajcie znać w komentarzach):

index.php
direct_login.php
logout.php
listing.php
buy_now.php
showform
sendform
feedback.php
show_user.php
mypayback.php
billing.php
bid.php

Część z ww. plików zawiera includy i inicjalizację ładowania aplikacji (showform, show_user.php, mypayback.php, listing.php), ale pozostałe różnią się kodem i zawierają konkretne funkcje a także m.in hasła do serwerów bazodanowych czy definicje serwerów memcache.

Kto wie, może na bazie tych wycieków w końcu uda się jednoznacznie potwierdzić albo zaprzeczyć temu, że Allegro nie hashuje haseł ? ;-)

Tego typu wycieki często spowodowane są błędną konfiguracją webservera lub błędną pracą loadbalancera i w najgorszym przypadku mogą zdradzić zahardkodowane w kodzie klucze i hasła, ujawnić błędy typu “głębokie ukrycie” a w najmniejszym stopniu pokazać na ile (nie)profesjonalnie tworzony jest kod i kto za niego odpowiada.

Problem tego typu kilka lat temu dotknął też serwis blogowy Onetu.

Dziękujemy wszystkim czytelnikom (yellowbit, Łukasz, Maciej, Sławomir, Tomasz, Michał, Dominik, Piotr, JIFFNET, Piotr, arek, wiki, Tiz, Michał, Michał, Ania, i innym), którzy podesłali do nas próbki.

Aktualizacja 19:24
Jeden z czytelników rzekomo dotarł do pliku konfiguracyjnego frameworka Allegro i wszedł tym samym w posiadanie haseł do serwerów bazodanowych Allegro (co oczywiście nic nie daje, jeśli się do serwerów nie ma dostępu). Czytelnik opublikował informacje na ten temat na swoim mikroblogu na Wykopie, ale wpis został już usunięty (chociaż dalej jest dostępny przez Google Cache, a jego kopie pojawiły się na Pastebinie).

Rzekomy konfig z hasłami

Rzekomy konfig z hasłami

Należy mocno podkreślić, że nawet ujawnienie haseł (zwłaszcza, jeśli tak jak w tym przypadku, są one długie i losowe) nie stanowi zagrożenia dla użytkowników Allegro. O ile nawet przyjąć iż config ujawnia faktyczne, wewnętrzne nazwy serwerów bazodanowych, to jest niezwykle małoprawdopodobne, że dostęp do tych serwerów jest możliwy z internetu. Losowość haseł uniemożliwia też ich wykorzystanie w innym kontekście.

Aktualizacja 22:30
Allegro kategorycznie zaprzecza, że kod źródłowy zawierający hasła jest autorstwa Allegro. Oto oświadczenie serwisu.

W nawiązaniu do informacji, które pojawiły się w Aktualizacji z godziny 19:24, stanowczo podkreślamy, że opisana sytuacja jest nieprawdziwa. Kod, który opublikował czytelnik nie należy nawet do Allegro, więc taka sytuacja nie mogła mieć miejsca.

Przeczytaj także:


Dowiedz się, jak zabezpieczyć swoje dane i pieniądze przed cyberprzestępcami. Wpadnij na nasz kultowy ~3 godzinny wykład pt. "Jak nie dać się zhackować?" i poznaj kilkadziesiąt praktycznych i przede wszystkim prostych do zastosowania porad, które skutecznie podniosą Twoje bezpieczeństwo i pomogą ochronić przed atakami Twoich najbliższych. Uczestnicy tego wykładu oceniają go na: 9,34/10!

Na ten wykład powinien przyjść każdy, kto korzysta z internetu na smartfonie lub komputerze, prywatnie albo służbowo. Wykład prowadzimy prostym językiem, wiec zrozumie go każdy, także osoby spoza branży IT. Dlatego na wykład możesz spokojnie przyjść ze swoimi rodzicami lub mniej technicznymih znajomych. W najbliższych tygodniach będziemy w poniższych miastach:

Zobacz pełen opis wykładu klikając tutaj lub kup bilet na wykład klikając tu.

83 komentarzy

Dodaj komentarz
  1. Mogę byc hakerem jak coś takiego dostanę?

  2. To samo miałem jakąś godzinę temu. Pisaliście z tym do Allegro? Ja pisałem, tylko jak to zawsze w takich sytuacjach- cisza.

    • Pisałem, u mnie też cisza. Mogą nie mieć czasu na odpisywanie… (w sumie jak zawsze).

  3. Allegro nie działa już :)

  4. właśnie padło allegro, zwraca pustą stronę, bez treści w kodzie

  5. kolejny plik do kolekcji :) user.php
    mogę podesłać zawartość redakcji :)

  6. Ja mam jeszcze index.php :)

  7. ja mam jeszcze payment.php i search (oraz listing.php o którym mowa w artykule). Chociaż każdy z tych plików wygląda tak samo- kilkanaście includów oraz in inicjalizacja kernela aplikacji.

  8. Działa i dalej PHP :).

  9. Ja nawet chciałem im zgłosić, ale formularz zgłaszania mi wypluł kod w php :]

    • Trza go było ręcznie przeprasować i wysłać odpowiednie zapytanie ^^

  10. Jak nie dziala? I nadal pluje kodem…

  11. Nawet wujek Google zaczął już indexować ich kod w webcache :D

  12. Zaczyna pluć plikami z Moje Allegro, teraz dostałem login.php. Jest wtorek i brak reakcji z ich strony? Trochę mnie to dziwi po takim czasie…

  13. Kolejny plik won.php

  14. Wysłałem do was kolejne linki i jeszcze mała uwaga – padł im SSL! Radzę nie logować się z ogólnodostępnych wifi.

  15. Hymm.. najpierw błędy z tymi e-mailami teraz to co potem ?

  16. Z tego co podaje google, allegro pluje kodem php co najmniej od 2 dni !

  17. Już nie pluje, teraz co jakiś czas serwer zwraca pustą stronę.

  18. Ktokolwiek ma zapisane pliki? Z ciekawosci popatrzylbym na jakosc kodu :D

  19. Kocham komentarz w jednym include’ów:
    // “tymczasowo dla pierwszego etapu checkout”

    To jest kod, który pozostanie w aplikacji najdłużej :P

    • Umiesz wgl. czytać? TYMCZASOWO.

      wymowa:
      IPA: [ˌtɨ̃mʧ̑aˈsɔvɨ], AS: [tỹmčasovy], zjawiska fonetyczne: nazal.• akc. pob. wymowa ?/i

      znaczenia:

      przymiotnik

      (1.1) taki, który trwa tylko, jakiś czas

      (za Wikisłownikiem)

    • @JanekHaker, a ktoś nie zrozumiał żartu.
      ‘Tymczasowy’, pisany na szybko kod najczęściej jak już się sprawdza, to zostaje przez dłuuuugi czas. Bo skoro działa nawet dobrze (w tym nikt na razie nie wykrył w nim dziur), to się nim nie zajmują.
      Pewnie i tak już długo ten fragment tam siedzi.

  20. Mi za to wyrzuca do pasku adresu zmienne np. token itd. Z tymi zmiennymi żadna kategoria i żaden produkt się nie wyświetla, a po usunięciu ich wszystko działa – nieźle im się powaliło na serwie.

  21. Wsdl też nie działa.

  22. A tymczasem na profilu FB allegro “Kuchnia z czerwonymi, elektryzującymi dodatkami (…)”- zero informacji o problemach technicznych, oczywiście dlatego, że jakby jednoznacznie stwierdzili że są problemy, to zgodnie z regulaminem musieliby przedłużyć aukcje, które się kończyły itp, a to jak wiadomo są pieniądze ;)

  23. Kolejny plik won.php i odpowiedź od allegro “Otrzymaliśmy podobne zgłoszenia od innych Użytkowników. Sprawa została przekazana do Działu Technicznego, który pracuje nad usunięciem usterki.

    Bardzo przepraszam za zaistniałą sytuację.”

  24. No to ładnie. Teraz zalogowałem się na konto, a tu pojawia się formularz rejestracji nowego konta :)

  25. Ja mam jeszcze order.php, ale jego niezmiernie ciekawą zawartość zostawię dla siebie ;-)

    • A wymienisz sie na dwa loginy.php i karteczkę z Messim? :)

    • Piotr, you made my day! Aż czasy przedszkola mi się przypomniały!
      Od siebie dodam, że często im się teraz css nie ładuje.

  26. zwolnili polowe dzialu adminow to teraz maja takie kwiatki . niewykluczone ze ktorys z zwolnionych zostawil tak zwany time bombs

  27. Stary numer zmniejsza się ruch, chamstwo supportu wzrasta, wiec trzeba coś zrobić aby o tym serwisie mówiono.

    W firmie której pracuje ciągle mój szef namawia na coś podobnego tzw bezpieczny wyciek który zwiększa ruch o 120%, plus darmowa reklama.

    Nieważne jak o tobie mówią, ważne by mówili

    • Chyba sobie żartujesz. Prowadzę sklep internetowy i wydaje mi sie, że jeśli nagle klient zobaczył by jakieś dziwne znaczki to raczej zrezygnował by z zakupu.
      Jednak z drugiej strony dziwne jest, że tak duza firma jak allegro nie zauważyła problemu przez dosyć długi okres czasu.

  28. Witam wszystkich,
    Dziś pobrało mi plik o nazwie app.php który odrazu się usuną.

    • NIE DO WIARY!

  29. podlonczcie wersje mobilna pod debuger, tam sie dopiero dobrze dzije xD

  30. Nie działają im też ciastka – przy każdym wejściu pojawia się monit o akceptację.

  31. @Aktualizacja 19:24 – co z tego, trzeba jeszcze znac adres hosta bd.

  32. Creditentiale do baz danych itp to zwykły fake, więc nie ma czym się podniecać ;)

  33. Hah, kto kolekcjonuje wszystkie pliki?
    Potem tylko bazę stworzyć i otworzyć własne allegro :3

  34. A zastanawiałem się czy wysłać wam (niebezpiecznikowi) maila bo takie ładne prezenty od allegro dostaję, ale widać ,że to grubsza akcja promocyjna.

  35. Chyba ktos sie dal nabrac na ten kod z haslami ;)
    Troche sie to nie klei, a autor jak widac chce sie na tym wypromować :P

  36. *autor kodu

  37. Warto poszukać w google jeszcze innych serwisów grupy allegro [molotok.ru, aukro.ua itp.] – to stoi na tych samych serwerach

  38. mi pobrało plik login.php, możecie dodać do listy.

  39. Ale rekompensata za wyciek kodu: http://news.allegro.pl/article/33795-rekompensaty-za-awarie-serwisu-5-sierpnia

  40. interesujace kto zostal niedawno kierownikiem Developers Team Leader weteran – master of disaster …

  41. Logiczne że po takiej “wpadce” zmienili wszystkie hasła.
    Wiec mogą teraz zaprzeczać do woli.

  42. #maciejpsujeallegro

  43. Aż dziwne, że słownik ortograficzny się nie ściągnął…

  44. na jakiejs maszynie się źle zaktualizował apache/php. to samo spotkało Facebooka w 2007

    plik z haslami jest nieprawdziwy. allegro nie trzyma takich rzeczy w kodzie. takie rzeczy się trzyma w podmontowanych cryptocontainerach na przykład. poza tym, co to za nazewnictwo baz i hostów? kazdy kto pracuje/pracował tam wie od razu, że to ściema.

    Kolejna sprawa, najwazniejszy kod i tak lezy w plikach .inc, które są nieściągalne (.htaccess)

    no i najważniejsze: ten kod, który wyciekł, to staroć pozostawiony chyba tylko dlatego, że nikt nie odważył się jeszcze przepiąć wszystkiego na nową platformę (od paru lat króluje java)

  45. No, to niedługo można stawiać drugie allegro ;)

  46. Hasła na pewno są zapisane jawnym tekstem, gdyż… dawniej była jeszcze stara wersja Allegro, posiadałem hasło 16+ znaków. Na nowej wersji nie mogłem się zalogować. Po małej konwersacji poprzez e-mail, poinformowali mnie bym jako hasło podawał tylko pierwszych 16 znaków… reszta została wycięta!

    • A może przy pierwszym logowaniu po zmianie, hasła zostały posolone i pohaszowane?

    • a nie wpadłeś na to, że to właśnie był moment przejścia z haseł szyfrowanych na haszowane?
      odgórnie ustalono limit na 16 znaków i – przewidując problemy u niektórych użytkowników – dano “gotową” informację ludziom z infolinii, że mają sugerować wpisanie pierwszych 16 znaków.

  47. won.php dzisiaj zwraca kod

  48. Wiadomo kiedy allegro udostępni pełny kod źródłowy strony ? ;)

  49. Zdzislaw D. startuje z nowym forum, kiedys pisal, ze zostawil cos u allegro. Nalezy wiazac te fakty?

  50. A po co korespondować, dodać server mailowy Pani Ani do kilku black list spamerów, najlepiej do takich gdzie wypisanie kosztuje….

  51. do wszystkich używających puppeta – Was też to może spotkać :)

  52. Wczoraj, podczas używania szukajki na Alledrogo, wywaliło mi plik search.php do pobrania – troszeczkę się zdziwiłem, myślałem że to błąd przeglądarki… ale jednak nie (jak widzę dziś po tym artykule):D

    Jako ciekawostkę dodam, że chwilę później na http://www.tvn24.pl też wywaliło mi jakiś .php do zassania… i właśnie dlatego myślałem, że to przeglądarka zgłupiała, a tu chyba coś się dzieje w internetach;]

    • ten problem z aktualizacją PHP spotkał wiele firm w ostatnich dniach – tylko, że w przypadku allegro chodzi o kilkaset serwerów zarządzanych przez automat, który czasem “wie lepiej” i taki jest efekt
      w firmach, gdzie jest jeden serwer i admin robi update ręcznie, można w shellu w 10 sekund wykonać inną sekwencję apt-get XXXXX – albo wejść w /etc/php/ i coś wyedytować…

      a w takiej dużej infrastrukturze, nawet, jak admin ręcznie wykona polecenie, to Puppet po chwili uzna, że to odstępstwo od ustalonej normy i np. nadinstaluje ponownie paczkę, którą uważa za właściwszą (nowszą) – a minuty lecą…

      stąd problemy w TVN i w Allegro.

    • Serio, update na serwerach produkcyjnych robi automat bez żadnej kontroli admina? Porażka! I pewnie tego wcześniej nie testują – bo po co? ;-)

    • dlaczego na tego typu forach zawsze znajdą się goście, którzy muszą triumfalnie oburzać/prześmiewać się w każdej sprawie, sugerując że (wg. nich) firmy “nie testują”, “nie solą”, “nie stosują VPNa”, “trzymają hasła w kodzie”?

      oczywiście że testują, haszują, nie trzymają haseł w kodzie itp.
      ale czasem tak jest drogi kolego, że przy ciągłych wdrożeniach (kilka dziennie) i aktualizowaniu systemów kilka razy na godzinę (puppet), wystarczy, że w przypadku jednym na tysiąc coś pójdzie nie tak….
      w tym konkretnym przypadku, z tego co wiadomo w branży, odpowiedzialna była jakaś pomocnicza paczka do PHPa php-blabla-blabla-dev-bla…. która przy instalacji na “losowych” komputerach nadpisywała binarkę innej paczki – na testowych maszynach to nie wywołało problemu – a na produkcji – wystarczyło, że problem wystąpił na co dziesiątym serwerze i już każdy user na to trafiał przy kolejnym odświeżeniu.

  53. Czyżby dwóch adminów odeszło z firmy i nikt nie umiał Varnisha konfigurować a może jest błąd w nowej wersji Varnisha.

  54. Czyżby Zdzisław Dyrma ? :D

  55. Allegro mało płaci swoim specjalistą, leci w kulki na rynku a chłopaki którzy się połakomili zdobyciem doświadczenia za marną kasę (jak na branżę IT) uczą się na zasadzie prób i błędów ;-) O taka sprytna rotacja pracowników.

    • Że komu, “specjalistą”? A nie przypadkiem “specjalistOM”?
      No do prostytutki ubogiej, czy ludzie już do tego stopnia zidiocieli przez internety i “sprytne” gadżety, że nie potrafią poprawnie posługiwać się ojczystym językiem?

    • @hg54: to nowomowa wprowadzona przez tę mniej inteligentną część gimbusiarskiego pokolenia (czyli ludzi aktualnie w wieku poniżej ~23 lat, starsi takich błędów nie robią – robią inne), też mnie zastanawia, co takiego się stało, że piszą w tak kretyński sposób, prawdopodobnie efekt nieczytania niczego, więc piszą, jak słyszą.

      Co do samego tematu: mam znajomego pracującego u nich w Poznaniu i kilka miesięcy mi mówił, że jest ciężko i że parę wazniejszych (technicznie) osób szykuje się do odejścia, może to faktycznie miało związek.

  56. co to jest serwer bazodanowy ? ; )

    • taka puszka do której wchodzą SQLe a wychodzą informacje

    • Rzeczywiście, po polsku mowi sie ‘serwer baz danych’ a nie serwer bazodanowy. Wiem bo zapytałem prof. Miodka

  57. Nawet widac na niektorych aukcjach :)

    Koszty dostawy
    ·
    List polecony ekonomiczny
    5 zł
    * @copyright 2013 Grupa Allegro sp. z o.o. * @license http://internal.allegro.pl Internal * @link http://allegro.pl */ require_once “includes/DLang/DLang.php”; require_once “framework/libs/Core/FrontController.inc”; require_once “framework/libs/Core/Router.inc”; require_once “framework/libs/Core/AbsRouting.inc”; require_once “framework/libs/Core/Routers/AbsRouter.inc”; require_once “framework/libs/Core/Routers/Forward.inc”; require_once “framework/config/Config.inc”; require_once “framework/libs/Core/Utils.inc”; require_once “framework/libs/Core/Routers/AbsRouter.inc”; require_once “framework/libs/Core/Routers/Default.inc”; require_once “framework/libs/Core/Paths.inc”; require_once “framework/libs/Core/Paths/IPathStrategy.inc”; require_once “framework/libs/Core/Paths/PathStrategy.inc”; require_once “framework/libs/Core/Paths/CamelCaseStrategy.inc”; require_once “framework/libs/Core/ConfigFactory.inc”; require_once “framework/libs/Core/AbsConfig.inc”; require_once “framework/libs/Core/Registry.inc”; require_once “framework/libs/Core/Request/AbsRequest.inc”; require_once “framework/libs/Core/Request/HttpVars.inc”; require_once “framework/libs/Core/Request/Cookie.inc”; require_once “framework/libs/Core/Request/Files.inc”; require_once “framework/libs/Core/Server.inc”; require_once “framework/libs/Core/ResponseData.inc”; require_once “framework/libs/Core/Dispatcher.inc”; require_once “framework/libs/Core/Response.inc”; require_once “framework/libs/Core/Response/AbsResponseType.inc”; require_once “framework/libs/Core/Response/Types/Html.inc”; $kernel = FA_Kernel::getInstance(); $c = $kernel->getContainer()->get(‘qeppo.front_controller’); $c->runApplication();

Twój komentarz

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

RSS dla komentarzy: