3.4 CSRF a Autorizace

Cross-Site Request Forgery (CSRF)

CSRF (někdy označovaný i jako XSRF nebo útok z jedné strany) zneužívá důvěry webové aplikace v prohlížeč uživatele. Předpokladem je existence Same-Origin Policy – žádost zaslaná napříč doménami standardně vkládá autentizační cookies uživatele spojené s cílovou doménou, i když se jedná o škodlivý požadavek.

Princip útoku CSRF

Požadavek z jednoho původu (origin) lze v prohlížeči odeslat na jiný původ. Útočník předpřipraví formulář nebo URL a umístí jej na svůj web (nebo do emailu). Jakmile oběť, která má aktivní přihlášenou relaci k cílové aplikaci, navštíví tuto škodlivou stránku, její prohlížeč automaticky odešle připravený HTTP požadavek (včetně všech cookies) cílové stránce. Tím útočník nevědomky provede operaci jménem oběti.

Lze jej zneužít s metodou POST (např. automaticky se odesílající skrytý formulář) i GET (např. pouhým vložením <img src="odkaz...">).

Ukázka CSRF v praxi (Změna DNS)

Uživatel je přihlášený do administrace domácího routeru na 192.168.1.1. Útočník podstrčí oběti na svém webu skript, který zkusí vytvořit načítání obrázku:

document.write('<img src="http://admin:admin@192.168.1.1/...&dnsPrimary=217.12.208.38" height=1 width=1 />');

Jakmile prohlížeč začne načítat tento "neviditelný" obrázek z IP routeru, požádá tím router (s defaultním heslem admin/admin nebo existující relací) o přenastavení DNS serverů na ty, které vlastní útočník.

Mitigace (Obrana)

Hlavním bodem obrany jsou takzvané anti-CSRF tokeny a správné nastavení SOP/CORS.

Typické cesty pro obejití (Bypass CSRF ochrany)

Common bypass techniques (Metody obcházení anti-CSRF opatření)
  • Odstranění hodnoty tokenu (poslání prázdného).
  • Zaslání požadavku s úplně chybějícím parametrem s tokenem.
  • Znovupoužití tokenu (např. podvrhnutí tokenu neověřeného uživatele, nebo z jiné relace - pokud server validuje jen formát a ignoruje, k jaké relaci je token namapovaný).
  • Změna metody POST na GET. Někdy backend validuje CSRF token jen u POST požadavků, ale při přepsání dotazu na GET jej zpracuje a kontrolu provést zapomene.

Autorizace (Authorization)

Autorizace odpovídá na otázku "co daný (již ověřený) uživatel může dělat".

Časté zranitelnosti v autorizaci
  • Path traversal (Procházení adresářů): Útok spočívá v přemisťování se nahoru v adresářovém stromu pomocí ../. Např. include.php?file=../../../../etc/passwd.
  • Privilege escalation (Eskalace privilegií):
    • Horizontal (Horizontální eskalace): Získání přístupu k datům či zdrojům jiného uživatele se stejnou úrovní oprávnění (tzv. IDOR – Insecure Direct Object Reference).
    • Vertical (Vertikální eskalace): Získání přístupu k datům s vyšší vrstvou privilegií (např. běžný uživatel pronikne k administrativním nástrojům aplikace).