Testovanie CSRF zraniteľnosti: Webové formuláre aj REST API
CSRF môže ovplyvniť aj moderné REST API aplikácie. V tomto článku ti ukážem, ako zraniteľnosť otestovať, aj ako sa jej brániť.
Úvod
CSRF (Cross-Site Request Forgery) je zraniteľnosť, ktorá umožňuje útočníkovi vykonať akciu v mene prihláseného používateľa – bez jeho vedomia. Typicky sa to deje cez škodlivý odkaz alebo iframe, ktorý spustí požiadavku na server, kde je používateľ prihlásený.
Princíp útoku
Útočník odošle požiadavku cez HTML prvok (napr. <img>
alebo <form>
), prehliadač priloží session cookie – a server si myslí, že požiadavka je legitímna.
Krok za krokom: Testovanie cez Burp Suite alebo Caido
- Presmeruj prehliadač cez proxy (Burp alebo Caido)
- Sprav akciu v aplikácii (napr. zmeň heslo)
- Odošli požiadavku do Repeateru
- Sleduj, či obsahuje CSRF token – v tele alebo hlavičke
- Odstráň token, pošli požiadavku znova – ak prejde, appka je náchylná
Vytvorenie exploit stránky
<form action="https://example.com/zmena-hesla" method="POST">
<input type="hidden" name="heslo" value="hacked123">
<input type="submit">
</form>
<script>document.forms[0].submit();</script>
Ak stránka spracuje požiadavku aj bez overenia tokenu – si zraniteľný.
Testovanie REST API: CSRF stále hrozí
Mnohé REST API aplikácie (napr. SPA v Reacte) používajú cookie-based autentifikáciu. Prehliadač automaticky priloží cookie aj pri útoku z inej domény, čo znamená: CSRF je stále reálne riziko.
Ako testovať:
- Skontroluj, či sa API autentifikuje cez
sessionid
cookie - Skús odoslať požiadavku z cudzích stránok cez formulár
- Sleduj, či API kontroluje
Origin
aleboReferer
, alebo vyžaduje CSRF token
Ochrana pred CSRF
- Overuj
Origin
aReferer
hlavičku - Používaj CSRF tokeny (generované a overované serverom)
- V REST API používaj JWT v hlavičke, nie cookie
- Pridaj hlavičku
X-Requested-With
na strane klienta - Nastav
SameSite
atribút pri cookies
SameSite cookie atribút a UX
SameSite=Strict
znamená, že cookie sa nepošle pri žiadnej požiadavke mimo aktuálnej domény. Znie to skvele – ale má háčik.
Príklad:
Používateľ je prihlásený v appke. Klikne na odkaz z e-mailu a dostane sa späť na appku. Ak máš cookie s SameSite=Strict
, prehliadač ju nepošle. Používateľ bude odhlásený alebo uvidí chybu.
Prehľad:
SameSite | UX | Bezpečnosť |
---|---|---|
Strict | ❌ Slabšie UX (odhlasovanie pri návrate) | ✅ Najvyššia |
Lax | ✅ Dobré | ⚠️ Nechráni POST požiadavky |
None + Secure | ✅ Úplné | ⚠️ Nutná ochrana tokenmi |
Záver
CSRF nie je minulosť – stále sa vyskytuje v slabších implementáciách REST API, v aplikáciách bez tokenov či v microservisných systémoch, ktoré používajú cookies. Ochrana je pritom relatívne jednoduchá a existuje niekoľko overených prístupov.
V ďalšom článku sa pozrieme na CSRF ochranu v konkrétnych frameworkoch (Express.js, Django, Laravel).