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.