Přeskočit na hlavní obsah

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

  1. 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.

Kam dál

Cheat sheety

Checklisty