Mimo iż firmy takie jak Facebook czy Google dbają o bezpieczeństwo swoich usług a codziennie w ramach programów bug bounty testują je setki jak nie tysiące osób, to nadal znaleźć w nich można ciekawe i oryginalne błędy. Poniżej opis jednego z nich.
Z reguły gdy czytamy o wypłatach z programów typu bug bounty dużych dostawców usług internetowych to widzimy powtarzające się scenariusze ataku. Błędy typu XSS, problemy z tokenami CSRF, brak powiązania identyfikatora z sesją – popularne wątki przewijają się regularnie. Czasem jednak trafiamy na opis ataku, który przebiega w sposób, którego się nie spodziewaliśmy – choć dokładnie taki scenariusz opisywał poradnik łowców błędów. Może nie dla wszystkich z Was będzie to niespodzianka, ale dla nas była.
Formularz przesyłania życiorysów
Josip Franjkovic odnalazł, zgłosił i opisał ciekawy błąd w formularzu służącym do przesyłania aplikacji na wolne stanowiska w Facebooku. Formularz był już wcześniej przetestowany przez wielu łowców nagród, zatem pierwsze proste testy takie jak przesyłanie pliku PHP nie poskutkowały. Cechą charakterystyczną procesu przetwarzania aplikacji było jednak zwracanie treści przesłanych plików w formie base64 (nie wiemy w jakim celu, ale tak działał formularz).
Josip testował kolejne opcje jak np. przesyłanie plików o różnych nazwach, ale nie udało mu się osiągnąć żadnego wymiernego efektu dopóki nie przesłał pliku ZIP i nie otrzymał w odpowiedzi od serwera jego rozpakowanej wersji. Wtedy go olśniło – w przewodniku łowcy błędów autorstwa Facebooka znajduje się przykład opisujący przesłanie w pliku ZIP dowiązania symbolicznego (symlink) do lokalnego pliku, który chcemy odczytać. Josip stworzył zatem dowiązanie do /etc/passwd, spakował i wysłał w formularzu. Co dostał w odpowiedzi?
Tak, serwer był uprzejmy plik odpakować, odczytać dowiązanie i zwrócić treść pliku, na który wskazywało.
Facebook zgłoszony błąd załatał w ciągu kilku godzin, lecz obniżył wartość wypłaty bug bounty do 5500 dolarów, ponieważ błąd znajdował się komponencie stworzonym przez zewnętrzną firmę. Powyższy przykład pokazuje jednak, jak nawet lektura instrukcji dla łowców błędów może być inspiracją do odkrycia błędu w serwisie produkcyjnym.
Inne ciekawe odkrycia ostatnich dni
Błędy w serwisach dużych firm były, są i będą się pojawiały. Jedną z metod ich odkrywania jest testowanie nowych usług. O skuteczności tego podejścia przekonuje badacz, który odkrył trywialny błąd w nowej funkcji Facebooka polegającej na możliwości opublikowania na własnym profilu filmu z podziękowaniami. Podmienił on jedynie ID użytkownika w jednym z żądań wysyłanych do serwera i odkrył, że film można publikować na cudzym profilu.
Dużo bardziej skomplikowany błąd odkrył inny badacz w serwisie Paypala. Połączył on w sprytny sposób trzy różne podatności, by w efekcie uzyskać możliwość przejęcia dowolnego konta. Najpierw odkrył, że można poznać cudzy token CSRF wysyłając odpowiednie żądanie do serwera nawet z błędnym hasłem, potem ustalił, że token jest ważny również dla innych żądań a na końcu udało mu się zmienić cudze „pytanie bezpieczeństwa” bez potrzeby wcześniejszego logowania się, tylko z użyciem wykradzionego tokenu. Po ustaleniu pytania bezpieczeństwa mógł już skutecznie zmienić hasło dowolnego konta. Sprytne.
Komentarze
Wykop.
Miło widzieć Ubuntu.
$5,5k za znalezienie takiego błędu? FB wycenia swoje bezpieczeństwo na 0,00000001% swoich przychodów czy jeszcze mniej? wykorzystana luka wymagała sprytu a nie lat doświadczeń z pentestami, czyli włamać równie dobrze mógł się jakiś 14latek i sporo im namieszać. Swoją drogą, ciekawe czy ta zewnętrzna firma nie była dzieckiem NSA lub czegoś podobnego :)
Nie mógł namieszać za dużo nawet 14 latek.