SSRF (Server-Side Request Forgery) to podatność, w której atakujący skłania serwer aplikacji do wysłania żądania pod adres, którego ten nie powinien odwiedzać. W chmurze takim adresem bywa usługa metadanych instancji, udostępniająca tymczasowe poświadczenia roli. Obrona łączy allow-listę celów, kontrolę ruchu wychodzącego i utwardzenie usługi metadanych.

Krótka odpowiedź

  • Na czym polega — serwer pobiera zasób spod adresu podanego z zewnątrz, nie sprawdzając dostatecznie, dokąd trafia żądanie (CWE-918, MITRE).
  • Dlaczego groźny w chmurze — może ujawnić tymczasowe poświadczenia roli IAM z usługi metadanych instancji.
  • Główna obrona — allow-lista hostów, wyłączone przekierowania i kontrola adresu IP po rozwiązaniu DNS (OWASP).
  • Priorytet w AWS — tryb wyłącznie IMDSv2 (HttpTokens=required), po sprawdzeniu, że nic nie korzysta z IMDSv1.

Jak działa atak SSRF

Atak SSRF polega na tym, że atakujący nie łączy się z celem bezpośrednio, lecz przekazuje adres aplikacji, a ta wysyła żądanie w jego imieniu. MITRE opisuje ten błąd jako CWE-918: serwer przyjmuje URL od komponentu wyżej i pobiera jego zawartość, nie upewniając się dostatecznie, że żądanie trafia do oczekiwanego celu. Mechanizm przebiega w trzech krokach.

  1. Adres z zewnątrz. Funkcja aplikacji pobiera zasób, np. obraz lub dokument, spod adresu wskazanego przez użytkownika.
  2. Żądanie z pozycji serwera. Serwer łączy się ze swojego miejsca w sieci, więc sięga też do usług wewnętrznych niedostępnych z internetu.
  3. Odpowiedź lub jej skutek. Treść wraca do atakującego albo zdradza się pośrednio, np. w komunikacie o błędzie.

W wariancie blind SSRF odpowiedź z żądania zaplecza nie wraca do atakującego (PortSwigger Web Security Academy), ale serwer i tak łączy się ze wskazanym celem.

Dlaczego SSRF jest groźny w chmurze

SSRF jest groźny w chmurze, bo maszyny wirtualne w AWS, Azure i Google Cloud mają lokalną usługę metadanych dostępną pod adresem 169.254.169.254. W AWS aplikacja pobiera z niej m.in. tymczasowe, automatycznie rotowane poświadczenia przypisanej roli IAM (AWS, dokumentacja EC2). Serwer zmuszony do odpytania tej usługi może je ujawnić.

Dostawcy zabezpieczają tę usługę nagłówkami. W IMDSv2 na AWS żądanie PUT zwraca token przekazywany w nagłówku X-aws-ec2-metadata-token. Hop limit, czyli liczba przeskoków sieciowych, które może pokonać odpowiedź z tokenem, wynosi według dokumentacji domyślnie 1 i da się go zmienić w zakresie 1–64 (AWS). Instancje z obrazów oznaczonych jako wymagające IMDSv2 startują z wartością 2, którą AWS zaleca też dla kontenerów (AWS, opcje IMDS dla nowych instancji). Azure wymaga nagłówka Metadata: true, a Google Cloud nagłówka Metadata-Flavor: Google; obie usługi odrzucają żądania z X-Forwarded-For.

Schemat przepływu żądania SSRF od użytkownika przez funkcję aplikacji i serwer do usługi metadanych oraz usług wewnętrznych, z czterema oznaczonymi warstwami obrony: allow-listą, blokadą przekierowań, ograniczeniem ruchu wychodzącego i IMDSv2.
Wybrane warstwy obrony przed SSRF i miejsce, w którym działa każda z nich.
Jak trzy chmury chronią usługę metadanych instancji
Usługa metadanych Adres Wymagany nagłówek lub token X-Forwarded-For Prosty SSRF typu GET
AWS IMDSv1 169.254.169.254 Brak Nie dotyczy, brak tokenu Może otrzymać odpowiedź
AWS IMDSv2 169.254.169.254 Token z żądania PUT w X-aws-ec2-metadata-token Token nie jest wydawany Przy wymaganym tokenie odpowiedź 401
Azure IMDS 169.254.169.254 Metadata: true Żądanie odrzucane Bez nagłówka odrzucony
Google Cloud metadata.google.internal lub 169.254.169.254 Metadata-Flavor: Google Żądanie odrzucane automatycznie Bez nagłówka odrzucony

Przy ustawieniu HttpTokens=optional IMDSv1 i IMDSv2 działają na tej samej instancji równocześnie, dopóki IMDSv1 nie zostanie wyłączony; ustawienie startowe zależy od obrazu i ustawień konta. Z porównania dokumentacji wynika, że prosty SSRF, w którym atakujący kontroluje tylko adres w żądaniu GET, nie ustawi wymaganych nagłówków, dlatego najgroźniejszym scenariuszem jest instancja AWS z IMDSv1. Ochrona nagłówkowa nie pomaga jednak, gdy podatna funkcja pozwala sterować nagłówkami lub metodą żądania.

Gdzie SSRF pojawia się w aplikacjach

SSRF pojawia się zwykle w funkcjach, które „pobierają coś z adresu”. W projektach, które prowadzimy, trafiamy na ten błąd w generatorach PDF pobierających logo lub obrazy po URL i w podglądzie linków. To samo ryzyko niosą import z URL, webhooki z adresem podanym przez użytkownika i integracje typu „pobierz plik z chmury”.

Scenariusz wygląda zwykle niewinnie: generator faktur przyjmuje adres logo klienta, a serwer pobiera ten plik przed złożeniem dokumentu. Jeśli nikt nie ograniczył, dokąd serwer może się połączyć, ta sama funkcja sięgnie do każdego adresu osiągalnego z jego sieci. Podobny przypadek, mikroserwis generujący PDF z parametrem adresu zasobu, opisujemy w case study wykrycia SSRF w mikroserwisie generowania PDF. Takie funkcje łatwo przeoczyć, bo wyglądają na zwykłą obsługę plików.

Jak się bronić przed SSRF

Przed SSRF broni się warstwowo: aplikacja sama decyduje, dokąd wolno wysłać żądanie, a sieć i usługa metadanych ograniczają skutki ewentualnego błędu. Tak porządkuje to OWASP SSRF Prevention Cheat Sheet.

  • Allow-lista hostów. Dopasuj host do listy dozwolonych celów i zbuduj żądanie samodzielnie, zamiast przekazywać dalej adres od użytkownika.
  • Brak przekierowań. Wyłącz podążanie za przekierowaniami w kliencie HTTP.
  • Kontrola po rozwiązaniu DNS. Rozwiąż nazwę samodzielnie, sprawdź docelowy adres IP i połącz się dokładnie z tym sprawdzonym adresem, co chroni przed DNS rebinding.
  • Spójne parsowanie. Odrzucaj URL, którego host różne parsery odczytują inaczej.
  • Segregacja sieci. Ogranicz na poziomie sieciowym, z czym serwer może się łączyć.
  • IMDSv2 zamiast IMDSv1. Na AWS przejdź na IMDSv2 i wyłącz IMDSv1.

Deny-lista zawodzi, bo adres wewnętrzny można zapisać na wiele sposobów, a filtr zna tylko te przewidziane przez autora. PortSwigger opisuje omijanie takich filtrów m.in. przez nietypowy zapis adresu, domenę wskazującą na adres wewnętrzny lub przekierowanie. Jeśli deny-lista jest konieczna, OWASP wskazuje jako minimum 169.254.169.254, 127.0.0.0/8 i zakresy prywatne RFC 1918.

Co sprawdzić u siebie

Te sześć kroków zmniejsza ryzyko SSRF i ogranicza zasięg ewentualnego ataku, choć nie zastępuje testu aplikacji.

  1. Spisz funkcje pobierające zasób spod adresu, np. generatory PDF, podglądy linków, importy, webhooki i integracje z chmurą plików.
  2. Sprawdź reguły ruchu wychodzącego (egress) mikroserwisów, które przetwarzają adresy z zewnątrz, i zostaw tylko niezbędne cele.
  3. Na instancjach EC2 ustaw HttpTokens=required, ale najpierw upewnij się, że agenci i aplikacje nie korzystają z IMDSv1, bo wymuszenie IMDSv2 je zepsuje.
  4. Sprawdź hop limit odpowiedzi na PUT: wartość wyższa niż 1 powinna wynikać z realnej potrzeby, np. dostępu z kontenera, albo z ustawień obrazu wymagającego IMDSv2.
  5. Potwierdź, że klient HTTP w tych funkcjach ma wyłączone podążanie za przekierowaniami.
  6. Sprawdź, czy walidacja obejmuje docelowy adres IP po rozwiązaniu DNS i czy połączenie idzie na ten sam, sprawdzony adres, a nie tylko nazwę hosta w URL.

SSRF w OWASP Top 10 i CWE

W OWASP Top 10:2025 SSRF nie ma osobnej pozycji i należy do kategorii A01:2025 Broken Access Control. W OWASP Top 10:2021 był samodzielną kategorią A10:2021, dodaną na podstawie ankiety społeczności, w której zajął pierwsze miejsce. Kategoria miała średni wskaźnik występowania 2,72%, średnie ważone wykorzystywalności 8,28 i wpływu 6,72, czyli powyżej przeciętnej, oraz 9 503 wystąpienia i 385 CVE (OWASP, 2021).

W zestawieniu 2025 CWE Top 25 CWE-918 zajmuje 22. miejsce z wynikiem 3,36, po 19. pozycji w 2024 roku (MITRE, 2025). Więcej o kategorii, do której trafił SSRF, piszemy we wpisie o Broken Access Control, najczęściej wykrywanej kategorii OWASP, a całą listę omawiamy w przeglądzie kategorii ryzyka OWASP Top 10 w praktyce.

Najczęstsze pytania o SSRF

Czym różni się SSRF od CSRF?

W SSRF sfałszowane żądanie wysyła serwer aplikacji, który pobiera zasób spod adresu wskazanego przez atakującego i może sięgnąć do sieci wewnętrznej. W CSRF (Cross-Site Request Forgery) żądanie wysyła przeglądarka zalogowanego użytkownika, wykonując bez jego wiedzy akcję w aplikacji, w której ma aktywną sesję. Inna jest więc obrona: kontrola celów żądań serwera kontra weryfikacja pochodzenia żądań.

Czy WAF wystarczy, żeby zatrzymać SSRF?

Nie warto traktować go jako jedynej ochrony. Reguły WAF zwykle rozpoznają znane wzorce, co przypomina deny-listę, a OWASP ostrzega, że deny-listy łatwo obejść. Skuteczna obrona przed SSRF wymaga allow-listy w kodzie, który wie, dokąd żądanie ma trafić, oraz ograniczenia ruchu wychodzącego na poziomie sieci.

Czy IMDSv2 całkowicie chroni przed SSRF?

Nie. IMDSv2 wymaga tokenu przekazywanego w nagłówku i nie wydaje go wywołaniom z nagłówkiem X-Forwarded-For. AWS pisze, że te mechanizmy razem chronią przed zdecydowaną większością przeanalizowanych przez niego podatności SSRF (AWS Security Blog, 2019). IMDSv2 chroni jednak tylko usługę metadanych, nie inne usługi wewnętrzne, i nie pomaga, gdy podatna funkcja pozwala sterować metodą oraz nagłówkami.

Jak testuje się aplikację pod kątem SSRF?

Test zaczyna się od znalezienia wszystkich miejsc, w których aplikacja przyjmuje adres lub jego fragment, także w plikach i konfiguracji integracji. Następnie w autoryzowanym zakresie sprawdza się, czy serwer da się skłonić do połączenia z celem spoza dozwolonej listy, jak obsługuje przekierowania i czy ruch wychodzący oraz usługa metadanych są ograniczone.

Jak Pentestica może pomóc

Szukamy SSRF ręcznie, sprawdzając każdą funkcję, która pobiera zasób spod adresu, i to, dokąd serwer faktycznie może wysłać żądanie w sieci i w chmurze. W raporcie wskazujemy poprawki w kodzie, sieci i konfiguracji usługi metadanych. Mamy ponad 10 lat doświadczenia i setki zrealizowanych projektów. Zobacz nasze testy penetracyjne aplikacji webowych i API albo opisz swój system w konfiguratorze zakresu testu penetracyjnego.

Źródła

Cyberbezpieczeństwo dla firm - Pentestica

Redakcja Pentestica to zespół pentesterów i konsultantów bezpieczeństwa, którzy na co dzień wykonują testy penetracyjne, testy TLPT wymagane przez DORA, red teaming i audyty bezpieczeństwa IT, a także prowadzą wdrożenia zgodności z NIS2, DORA i MiCA. Teksty na tym blogu piszemy z tej praktyki, a nie z opracowań. Każde twierdzenie o przepisie, terminie albo karze opieramy na źródle pierwotnym: dzienniku ustaw, tekście dyrektywy, komunikacie organu nadzoru. Jeśli czegoś nie da się potwierdzić, piszemy o tym wprost, zamiast powtarzać liczbę krążącą po branżowych portalach.

Bezpłatna wycena Napisz