14:39
21/3/2011

Dowcipna (w kategorii czarnej komedii) pomyłka przydarzyła się kilka dni temu serwisowi Tumblr. Jeden z programistów (administratorów?), zmieniając kod na produkcji (najprawdopodobniej przy pomocy edytora Vi lub Vim) popełnił małą, popularną dla tego edytora “literówkę” i w kodzie PHP zamiast znaku < pojawiła się literka i. O konsekwencjach przeczytacie poniżej.

Kolejny argument dla zwolenników Emacsa ;)

Na skutek błędu, zmiast od <?php, plik z kodem zaczął się od i?php i w związku z tym nie trafił na interpreter PHP. Co za tym idzie, kod źródłowy zawierający — jak to określa ekipa Tumblra — “dane wrażliwe“, ujrzał światło dzienne. Jak informuje Sucuri, kodzie znajdowały się m.in. klucze API, hasło do bazy danych oraz adresy wewnętrznych serwerów (na szczęście, w większości niedostępne z internetu).

Tumblr - kod PHP

Tumblr - przypadkowo opublikowany kod PHP

Niestety, błędy w kodzie (z winy człowieka, a nie oprogramowania) zdarzają się nad wyraz często i dlatego warto zdawać sobie sprawę, że nie zawsze display_errors = Off w konfiguracji PHP jest w stanie je powstrzymać. W opisanym powyżej przypadku Tumblra ta opcja nie ma żadnego znaczenia.

Jak “chronić” kod PHP przed omyłkowym opublikowaniem?

Jak zabezpieczyć się przed tego typu sytuacjami wyjaśnialiśmy już przy okazji podobnego zdarzenia na Onecie. Dodatkowo, na przykładzie Tumblera pięknie widać, że Security in depth to dobra strategia; unikalne hasła i brak dostępu do bazy od strony internetu spowodowały, że pomyłka programisty Tumblra przerodziła się tylko w niegroźny problem “wizerunkowy”, a nie poważny incydent bezpieczeństwa.

Pewnie, można było nie pracować na produkcji, można było lepiej skonfigurować WAF-y — i pewnie teraz to zrobią, bo żeby wyjść z twarzą, Tumblr poinformował swoich użytkowników, że nawiązał współpracę z niezależną firmą audytorską.

Przeczytaj także:

27 komentarzy

Dodaj komentarz
  1. vim uzyskał świadomość i zhackowal site. chyba się jeszcze nie obudzilem.

    • ciekawe czy teraz przekonwertuja tego programiste na emacsa ;]

    • Aj tam. Emacs to fajny system jest tylko *** edytora mu brak. I tak mcedit jest najlepszy.

    • vim jest tak samo winny jak jogurt wylany na spodnie ;)

  2. Czyli co, niby fail, a jednak plus dla nich, bo niechcący pokazali, że system mają w znacznej mierze rozsądnie i bezpiecznie zbudowany (poza dziabaniem zmian na produkcji ;p), i nawet TAKI fail im nie robi za specjalnie…

    • Jak widać, jest to plik konfiguracyjny, więc zmiana configa na produkcji to chyba normalna praktyka? Nie wiem ; )

  3. A ja nigdy nie zapomnę jak ponad godzinę głowiłem się nad tym, dlaczego zapytanie nie pobiera odpowiednich danych. Zamiast FROM napisałem FORM.

    • Nie ty jeden ;)

  4. Pięknie, bezpośredni dostęp programistów do produkcji. Strach używać.

  5. Litrówka przy kodowaniu » literówki w kodzie. :)))

  6. Heh, błąd wywalił jak zakładałem nowego bloga, odechciało mi się jak zobaczyłem ich kod.

  7. Czyzby ri zamiast i? Klawisze strzalek mu z klawiatury wyciagnac, jakby nawigowal hjkl to by nie wchodzil w insert mode na poczatku pliku ;>

  8. Ciekawe jak często zdarzają się błedy typu operator przypisania zamiast operatora porównania. To dopiero jest trudne do wytropienia…

    • Jeżeli używa się jakiegoś IDE to dość rzadko – ostrzegają jak widzą = w ifach – całkiem przydatne (;

  9. Skąd pomysł, że ktokolwiek to to popełnił używa vi/vim ?
    Nawet jeśli to i tak wklepująć przez przypadek 2 razy i i tak user musiałby być w replace mode żeby nadpisać znak. Zresztą twierdzić, że to wina vim’a może tylko ten, kto nigdy go poważnie nie używał. Żaden użytkownik vim’a nie popełnił by takiego błędu, zresztą od razu by się syntax highliting zepsuł.
    Nie wspomnę już nawet o tym, żę w tym kodzie, który wyciekł była masa informacji klucze do s3, clickatela i innych ciekawych rzeczy. Co do zapobiegania takim rzeczom to prosta sprawa ;] Środowisko testowe ;]

  10. @OkropNick : jest dosyć prosty sposób na wytropienie pomylenie przypisania z porównaniem w przypadku gdy odnosimy się bezpośrednio do literału. Można zamiast a== 5 (które bez problemów można zamienić na a=5, bez sprzeciwu kompilatora) napisać 5 == a ( i wtedy pomyłka w postaci 5=a oznacza błąd kompilacji).

  11. ha toż to normalne walnąć literówkę, ja to mam prawie na co dzień (perl) ale na całe szczęście pierwsze co to testy i dopiero na serwer – choć parę wpadek się zaliczyło ;)

  12. To musiał byś stary vi albo vim w trybie bez pokazywania składni. Używając standardowej konfiguracji vim-a, zaznaczającej składnię od razu by się takie coś wyłapało.

  13. “ha ha!! hello, lol check out this girl,what she did.. i cant believe this video :D: goo.gl/dkffx”
    czyli clickjacking na facebooku.
    Z dzisiaj. :)

  14. tyle dobrego, że chociaż hasło silne :)

  15. AVE…

    Pal licho, jak literówka sprawi, że strona nie bangla, albo że widać hasło – jedno można naprawić, a drugie zmienić. Cyrki się zaczynają, jak się robi coś na mikrokontrolerze i źle się wpisze fragment kodu kluczowy dla działania programu. O tym, jak uwaliłem w ten sposób przetwornicę, chyba już tu wspominałem. A cuda-wianki większe mogą się dziać. Sterownik serwomotoru od rolety na przykład próbował tą roletę zwijać ad mortum defecatam, bo pokiełbasiły mi się numery portów i mikrokontroler nie miał sygnału z krańcówki. Inną razą błąd składniowy sprawił, że zamek szyfrowy zapisywał inny kod dostępu, niż był wstukany, ale prawidłowo go czytał z klawiatury przy próbie otwarcia. O przypadkach, gdy na ekranie miałem jakieś głupoty nawypisywane, bo funkcja konwersji coś pokręciła, albo gdy mikrokontroler zacinał się w nieskończonej pętli, aż miłosierny watchdog go resetował, by ten znów w tą pętlę wpadł nie wspomnę nawet – miałem ich tysiące. Taka dola początkującego programisty…

  16. Na tropienie = zamiast == najlepsze są te żółte wykrzykniki w netbeans ;)

  17. Równie niewygodnego edytora jak vi(m) to ja jeszcze nie spotkałem. Aż szczerze dziwię się ludziom, że w ogóle z tego korzystają! Jak już koniecznie muszę coś wyedytować pod Linuxem to zdecydowanie wolę mcedit z pakietu Midnight Commander. Przynajmniej polecenia są kulturalnie wypisane na dole ekranu, nie trzeba pamiętać o jakiś przedziwnych sekwencjach typu “:wq”.

  18. Witam,

    Ja bym obstawiał jednak, że to błąd administratora. Programista z reguły nie ma dostępu do produkcji. Często się zdarza, że trzeba zrobić jakieś poprawki “na szybko”, programista mówi admin zmienia – czasem z różnym skutkiem ;)

    Co do edytora vi to jest to narzędzie które albo się kocha albo nienawidzi. Sam często używam jego wersji na windows :)

  19. Tumblr poinformował swoich użytkowników, że nawiązał współpracę z niezależną firmą audytorską.
    Znaczy kuzyn admina zrobi to za 4 piwa?
    Ot, wyjście z twarzą ;)

  20. hej poszukuje kogos dobrego żeby f= fertich

Twój komentarz

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

RSS dla komentarzy: