Na tropie błędów. Przewodnik hakerski. Peter Yaworski

Читать онлайн книгу.

Na tropie błędów. Przewodnik hakerski - Peter Yaworski


Скачать книгу
17 stycznia 2016

      Nagroda: 500 $

      Kiedy szukasz potencjalnych podatności CSRF, miej na uwadze żądania GET, które modyfikują dane po stronie serwera. Na przykład haker odkrył podatność w funkcji Shopify, która integrowała Twittera na stronie, aby dać możliwość właścicielom sklepów tweetować o ich produktach. Ta funkcja pozwalała również rozłączać konta Twittera z połączonego sklepu. URL, który rozłączał konto, wyglądał następująco:

      https://twitter-commerce.shopifyapps.com/auth/twitter/disconnect/

      Jak się okazuje, odwiedzenie tego linku powodowało wysłanie poniższego żądania GET:

      GET /auth/twitter/disconnect HTTP/1.1

      Host: twitter-commerce.shopifyapps.com

      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0)

      Gecko/20100101 Firefox/43.0

      Accept: text/html, application/xhtml+xml, application/xml

      Accept-Language: en-US,en;q=0.5

      Accept-Encoding: gzip, deflate

      Referer: https://twitter-commerce.shopifyapps.com/account

      Cookie: _twitter-commerce_session=REDACTED

      Connection: keep-alive

      W dodatku, kiedy ten link został zaimplementowany, Shopify nie weryfikował w żaden sposób wiarygodności żądań GET wysłanych do niego, czyniąc tym samym URL podatnym na CSRF.

      Haker WeSecureApp, który wysłał zgłoszenie, dołączył następujący dokument HTML jako dowód:

      <html>

      <body>

      

<img src="https://twitter-commerce.shopifyapps.com/auth/twitter/disconnect">

      </body>

      </html>

      Przy otwarciu dokument HTML powodował automatyczne wysłanie żądania GET na adres https://twitter-commerce.shopifyapps.com przez atrybut src w znaczniku <img>

. Jeśli ktoś z połączonym kontem Twittera z Shopify odwiedził witrynę z powyższym tagiem, jego konto na Twitterze zostałoby odłączone od usługi Shopify.

      Wnioski

      Miej na uwadze żądania HTTP, które wykonują pewne działania na serwerze, takie jak odłączenie konta na Twitterze przez żądanie GET. Jak już zostało wspomniane wcześniej, żądania GET nie powinny nigdy modyfikować żadnych danych na serwerze. Taką podatność mógłbyś znaleźć, korzystając z serwera proxy, takiego jak Burp lub ZAP, w celu monitorowania żądań HTTP wysyłanych do Shopify.

      Zmiana stref użytkowników Instacart

      Poziom trudności: Niski

      URL: https://admin.instacart.com/api/v2/zones/

      Źródło: https://hackerone.com/reports/157993/

      Data zgłoszenia: 9 sierpnia 2015

      Nagroda: 100 $

      Kiedy szukasz możliwych miejsc do testów, zwracaj uwagę zarówno na punkty końcowe API, jak i ich strony internetowe. Instacart to aplikacja do dostarczania produktów spożywczych, która pozwala dostawcom na ustawianie stref, w których będą pracować. Strona aktualizowała te strefy przez żądanie POST do administracyjnej subdomeny Instacart. Pewien haker odkrył, że punkt końcowy strefy na tej subdomenie był podatny na CSRF. Na przykład można było modyfikować strefę ofiary, używając  poniższego kodu:

      <html>

      <body>

      

<form action="https://admin.instacart.com/api/v2/zones" method="POST">

      

<input type="hidden" name="zip" value="10001" />

      

<input type="hidden" name="override" value="true" />

      

<input type="submit" value="Submit request" />

      </form>

      </body>

      </html>

      W tym przykładzie haker utworzył formularz HTML w celu wysłania żądania POST do punktu końcowego /api/v2/zones

. Haker dołączył dwa ukryte wejścia: jedno do zmiany kodu pocztowego nowej strefy na 10001
oraz drugie w celu ustawienia parametru override na true
, dzięki czemu wartość zip użytkownika została podmieniona na tę podaną przez hakera. Dodatkowo haker dołączył przycisk submit w celu utworzenia żądania POST
,  w odróżnieniu od przykładu z Shopify, który korzystał z funkcji automatycznego przesyłania w JavaScript.

      Choć ten przykład jest już pomyślny, haker mógł poprawić skuteczność exploita, używając technik opisanych wcześniej, takich jak użycie ukrytej ramki iFrame w celu automatycznego wysłania żądania w imieniu ofiary. Pozwoliłoby to zademonstrować, jak wyglądałoby wykorzystanie tej podatności w akcji; podatności, które są całkowicie poddane kontroli hakera, mają znacznie większe szanse na powodzenie niż te, które nie są.

      Wnioski

      Kiedy szukasz podatności, oprócz samych stron internetowych bierz również pod uwagę punkty końcowe API, które stanowią świetne źródło potencjalnych podatności. Okazjonalnie deweloperzy zapominają, że hakerzy są w stanie znaleźć i wykorzystać je, ponieważ nie są tak łatwo dostępne jak zwykłe strony internetowe. Na przykład aplikacje mobilne często wykonują żądania HTTP do punktów końcowych API, które możesz monitorować przy użyciu Burp lub Zap, tak samo jak w przypadku stron  internetowych.

      Przejęcie konta Badoo

      Poziom trudności: Średni

      URL: https://www.badoo.com/

      Źródło: https://hackerone.com/reports/127703/

      Data zgłoszenia: 1 kwietnia 2016

      Nagroda: 852 $

      Mimo że deweloperzy często używają tokenów CSRF, by chronić strony przed podatnościami CSRF, w niektórych przypadkach atakujący mogą kraść tokeny, co zaraz zobaczysz. Jeśli wejdziesz na portal społecznościowy https://www.badoo.com/, powinieneś zauważyć, że używa on tokenów CSRF. Mówiąc dokładniej, korzysta z parametru rt, który jest unikatowy dla każdego użytkownika. Kiedy wystartował program bug bounty dla portalu Badoo, nie mogłem znaleźć żadnej podatności. Jednakże hakerowi Mahmoud Jamalowi to się udało.

      Jamal rozpoznał zarówno parametr rt, jak i jego znaczenie. Zauważył również, że parametr jest zwracany w niemalże wszystkich odpowiedziach JSON. Niestety nie było to pomocne, gdyż CORS ochraniał Badoo przed hakerami


Скачать книгу