Co to jest SSRF?
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:
- 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.
- Przygotowanie złośliwego żądania – Atakujący dostarcza złośliwy URL, który kieruje żądanie do wewnętrznego serwera lub usługi.
- 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.
Jakie są rodzaje ataków SSRF?
Wyróżniamy kilka głównych typów ataków SSRF:
- 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.
- 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.
- 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ć:
- 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.
- 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.
- Izolacja serwerów – Izolować serwery, które wykonują zewnętrzne żądania, od wewnętrznej sieci, aby ograniczyć potencjalne skutki ataku.
- Używanie firewalli aplikacyjnych – Wdrażanie firewalli aplikacyjnych (WAF), które mogą monitorować i blokować podejrzane żądania HTTP.
- Regularne testy bezpieczeństwa – Regularne przeprowadzanie testów penetracyjnych i skanów bezpieczeństwa w celu wykrywania i naprawy podatności SSRF.
- 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.