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.
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...">).
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.
- Anti-CSRF token: Server přidá do každého formuláře skrytý kryptograficky silný, unikátní a nepředvídatelný token. Bez tohoto tokenu, který útočník nemůže dopředu znát, požadavek selže. Názvy se liší (
__RequestVerificationTokenv .NET,_tokenu Laravelu,_csrfv Javě apod.). Lze ho přikládat do GET URI parametru, POST body, Cookie nebo HTTP hlavičky. - Atribut SameSite: Nastavení relační cookie na
Lax(nebo radějiStrict). - Validace hlaviček: Serverové ověření hlavičky
OriginneboRefererpro ujištění, že požadavek vychází ze stejné aplikace.
Typické cesty pro obejití (Bypass CSRF ochrany)
- 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".
- 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).