Co to jest SSRF?

4 lipca 2024

SSRF, czyli Server-Side Request Forgery, to jedna z poważniejszych podatności w aplikacjach webowych, która pozwala atakującym na manipulowanie serwerem w celu wykonania nieautoryzowanych zapytań do zasobów wewnętrznych lub zewnętrznych. Może to prowadzić do wycieku poufnych informacji, ujawnienia wewnętrznej struktury sieci, a nawet umożliwić dalsze ataki na inne serwery. Z uwagi na częstość występowania SSRF zostało również uwzględnione w dokumencie Owasp Top Ten.

Czym jest Server-Side Request Forgery (SSRF)?

Podatność SSRF występuje, gdy aplikacja webowa pobiera zasoby z innych serwerów na podstawie danych dostarczonych przez użytkownika, nie walidując przy tym odpowiednio danych wejściowych. W efekcie, atakujący może nakłonić serwer do wysyłania żądań HTTP do dowolnego adresu, co może prowadzić do uzyskania dostępu do zasobów wewnętrznych, pozornie nie dostępnych z poziomu Internetu.

Na czym polega atak SSRF?

Typowy atak SSRF przebiega zazwyczaj według następującego schematu:

  1. Wykrycie podatności – Atakujący odkrywa, że aplikacja webowa umożliwia użytkownikom wprowadzenie adresu URL, który jest następnie używany do wykonania żądania przez serwer.
  2. Przygotowanie złośliwego żądania – Atakujący dostarcza złośliwy URL, który kieruje żądanie do wewnętrznego serwera lub usługi.
  3. Wykonanie żądania przez serwer – Serwer wykonuje złośliwe żądanie, co może prowadzić do pozyskania wrażliwych danych, informacji o sieci wewnętrzenej, czy umożliwić atakującemu na wykonanie ataków w głąb sieci lokalnej.
ssrf

Jakie są rodzaje ataków SSRF?

Wyróżniamy kilka głównych typów ataków SSRF:

  1. Podstawowy SSRF – Atakujący wykorzystuje podatność do wysyłania żądań HTTP do wewnętrznych zasobów serwera, takich jak bazy danych, serwery aplikacyjne czy inne usługi sieciowe.
  2. Blind SSRF – Atakujący nie otrzymuje bezpośredniej odpowiedzi od serwera, ale może obserwować skutki żądania, np. poprzez monitorowanie logów lub zachowanie aplikacji.
  3. SSRF z eskalacją do RCE – Atakujący wykorzystuje podatność SSRF do przeprowadzania kolejnych ataków na sieć lokalną – w szczególności do ataku na serwery nie dostępne z poziomu Internetu.

Jakie mogą być konsekwencje ataku SSRF?

Skutki udanego ataku SSRF mogą być poważne, zarówno dla użytkowników, jak i dla twórców oprogramowania:

  • Ujawnienie wewnętrznej struktury sieci – Atakujący może uzyskać informacje na temat sieci wewnętrznej, co ułatwia dalsze ataki.
  • Dostęp do wewnętrznych zasobów – Możliwość uzyskania dostępu do baz danych, serwerów aplikacyjnych i innych zasobów wrażliwych.
  • Kradzież danych – Możliwość uzyskania poufnych informacji, takich jak klucze API (w szczególności w chmurze), dane użytkowników, hasła itp.
  • Atak na serwery lokalne – Atakujący uzyskuje dostęp sieciowy do serwisów nie dostępnych z poziomu internetu które najczęsciej nie są tak dobrze zabezpieczone.

Jakie są sposoby wykrywania podatności SSRF?

Aby wykryć podatność SSRF w aplikacji webowej, można zastosować różne podejścia:

  • Manualne testowanie – Ręczne wprowadzanie potencjalnie niebezpiecznych adresów URL do pól formularzy i obserwowanie reakcji aplikacji.
  • Skanowanie automatyczne – Użycie skanerów takich jak np. Burp Suite czy Owasp ZAP, które skanują aplikację pod kątem podatności typu SSRF.
  • Statyczna analiza kodu – Przegląd kodu źródłowego aplikacji w poszukiwaniu niebezpiecznych funkcji i brakujących mechanizmów filtrowania danych.

Jak zabezpieczyć się przed atakami SSRF?

W celu zabezpieczenia przed atakami SSRF można zastosować:

  1. Walidacja danych wejściowych – Dane wprowadzane przez użytkowników powinny być sprawdzane pod kątem obecności niepożądanych adresów URL. Należy stosować listy dozwolonych wartości (whitelisting), które określają, jakie adresy URL są akceptowalne.
  2. Ograniczenie zakresu żądań HTTP – Ograniczyć możliwość wykonywania żądań HTTP tylko do zaufanych adresów i zasobów. Należy stosować listy dozwolonych adresów (whitelisting) na poziomie aplikacji.
  3. Izolacja serwerów – Izolować serwery, które wykonują zewnętrzne żądania, od wewnętrznej sieci, aby ograniczyć potencjalne skutki ataku.
  4. Używanie firewalli aplikacyjnych – Wdrażanie firewalli aplikacyjnych (WAF), które mogą monitorować i blokować podejrzane żądania HTTP.
  5. Regularne testy bezpieczeństwa – Regularne przeprowadzanie testów penetracyjnych i skanów bezpieczeństwa w celu wykrywania i naprawy podatności SSRF.
  6. Edukacja programistów – Szkolenie programistów w zakresie bezpiecznego kodowania i świadomości na temat występujących podatności.

Autor: Grzegorz Zych, Trener HackerU

Główne zainteresowania: bezpieczeństwo aplikacji webowych, DevSecOps, analiza kodu źródłowego.