CSRF — Impossible
Naast tokens, hoe kunnen we de functionaliteit om een wachtwoord te wijzigen 100% hufterproof maken?
1. Predict (Voorspel)
De ontwerper van de applicatie heeft goed nagedacht en de logica van de interface zélf gewijzigd. Je mag niet zomaar een nieuw wachtwoord invullen.
Oud wachtwoord: <input type="password" name="password_current">
Nieuw wachtwoord: <input type="password" name="password_new">
Bevestig nieuw wachtwoord: <input type="password" name="password_conf">
Vraag: Waarom maakt het veld Oud wachtwoord een CSRF aanval absoluut kansloos (zelfs zonder het gebruik van complexe tokens)?
Antwoord
Bij een CSRF aanval proberen we het slachtoffer via een linkje onbewust de server te laten vertellen: "Zet mijn wachtwoord op X".
Maar omdat de server nu eist dat het huidige wachtwoord óók wordt meegestuurd in dat linkje, is de hacker schaakmat! De hacker wéét het huidige wachtwoord immers niet. Een blind linkje zoals ?password_current=RAADMAAR&password_new=hacked zal daarom altijd genadeloos afgewezen worden door de server.
2. Run & Investigate
Start het lab.
Probeer je wachtwoord te wijzigen en merk op dat de workflow daadwerkelijk is veranderd.
3. ✓ Wat moest je zien?
- Het formulier bevat nu drie velden:
password_current,password_newenpassword_conf— niet meer twee. - Een CSRF-aanval (verborgen URL of
<img src>) faalt altijd, want de aanvaller weetpassword_currentniet. - Met het juiste huidige wachtwoord werkt een gewone wijziging gewoon: bewijs dat de bescherming alleen blinde aanvallen blokkeert.
Lukt de wijziging niet eens met het juiste wachtwoord? Controleer dat de twee nieuwe wachtwoordvelden exact gelijk zijn en dat het level op Impossible staat.
Wat heb je geleerd?
- CSRF is een blinde aanval: De hacker dwingt een ingelogde browser om ongemerkt een request te sturen namens het slachtoffer.
- Referers checken is zwak: Beveiligingen op basis van de HTTP-referer zijn vaak te omzeilen.
- Anti-CSRF tokens zijn noodzaak: Bijna elk modern web-framework (Laravel, Django, React) voegt automatisch onkraakbare, onzichtbare tokens toe aan formulieren om CSRF onmogelijk te maken.
- Vraag om bevestiging: Het beste middel tegen acties-zonder-toestemming is het eisen van verificatie (bijv. "Typ eerst je huidige wachtwoord in").