5.4 Server-Side Request Forgery (SSRF)
SSRF
SSRF (Server-Side Request Forgery) je zranitelnost, u níž útočník dokáže přimět webovou aplikaci (server), aby jejím jménem odeslala požadavek na libovolné (často interní) umístění. Z pohledu tohoto cílového místa se zdá, že požadavek je legitimní, jelikož přichází ze samotného důvěryhodného webového serveru.
Typicky má webový server přístup i do částí sítě chráněných firewallem (do kterých útočník přímo z internetu nemůže nahlédnout). SSRF v podstatě dělá z webového serveru proxy stroj pro útočníka. Zvláštní variantou je tzv. Blind SSRF, při kterém útočník v odpovědi nevidí obsah cílového serveru (což trochu ztěžuje útok, ale často se dá zneužít pro asynchronní interakce).
Co lze pomocí SSRF provádět
- Skenování vnitřní sítě (Internal network): Zmapování lokální sítě, odhalování portů a dalších skrytých služeb běžících vedle nebo za samotným serverem.
- Přístup k alternativním protokolům: V závislosti na schopnostech aplikace může útočník místo "http://" využít jiná schémata, například
file://pro čtení lokálních souborů serveru, neboftp://čildap://. - Získávání citlivých dat z cloud prostředí: Pokud aplikace běží např. v cloudu AWS EC2, může útočník přimět server odeslat požadavek na
http://169.254.169.254/latest/meta-data/iam/security-credentials/a ukrást tak vysoce privilegované přístupové tokeny pro ovládání celého cloudového prostředí.
Kde SSRF nejčastěji hledat
Zranitelnosti se velmi často objevují v místech, kde aplikace přijímá a zpracovává URL od uživatele pro další integraci – například stahování profilových obrázků podle URL, nahrávání a zpracování externích souborů, ve funkcích webových webhooků, v document parserech nebo při generování PDF z webové stránky.
Ochrana proti SSRF
- Designová změna (Design around it): Vůbec nenavrhovat funkce, které stahují a navštěvují adresy ovlivněné uživatelem.
- Silná validace a whitelisting: Pokud musí aplikace k URL přistupovat, prověřovat, že nepoužívá privátní nebo interní rozsahy IP adres (loopback 127.0.0.1, interní masky jako 10.0.0.0/8 apod.).
- Nepřímé reference: Namísto dávání volné ruky uživateli využít striktní množinu předdefinovaných možností, mezi kterými uživatel pouze vybírá.