Server-Side Request Forgery (SSRF)
- SSRF = děje se když aplikace přistupuje ke vzdálenému zdroji bez validace uživatelem zadané URL.
- Umožňuje obejít VPN, firewall a další ochranu podobného typu.
- Zranitelnost je spojena s webhooky, načítáním zdrojů z uživatelem zadané URL, vlastním SSO a URL náhledy.
- Moderní technologie (cloud, Kubernetes, Docker) vystavují management kanály přes HTTP, a to na dobře známých a předvídatelných cestách = snadný cíl pro SSRF útok.
- V moderních aplikacích je obtížnější omezit odchozí provoz vzhledem k jejich povaze.
- SSRF není možné zcela eliminovat - zvažte ochranné mechanismy v závislosti na dané byznys logice a potřebách aplikace.
Jak zranitelnosti předcházet
🔴 Izolujte mechanismus, který načítá zdroje z interní sítě.
🔴 Zakažte HTTP přesměrování.
🔴 Použijte prověřený URL parser, abyste předešli nekonzistentnosti při parsování URL.
🔴 Validujte a sanitizujte uživatelský vstup.
🔴 Neposílejte raw odpovědi na klienta.
🔴 Použijte allow (white) list pro:
- originy, odkud se předpokládá stahování zdrojů (např. Google Drive, Gravatar),
- URL schémata a porty,
- povolené typy médií pro danou funkcionalitu.
Příklad zneužití zranitelnosti
-
Sociální síť umožňuje nahrávání profilových fotek.
- Uživatel může nahrát fotku ze zařízení nebo vložit URL adresu, na které se nachází:
POST /api/profile/upload_picture
{
"picture_url": "http://example.com/profile_pic.jpg"
}- Útočník může začít skenovat vnitřní síť a hledat další informace pro své útoky:
{
"picture_url": "localhost:8080"
}- Na základě tohoto volání dokáže útočník zjistit, jestli je daný port otevřený, nebo ne.