Broken Access Control Uitgelegd: Zo Voorkom je Gebrekkig Toegangsbeheer
Broken Access Control (gebrekkige toegangsbeheer) voerde in de meest recente OWASP Top 10 de ranglijst aan als het absolute nummer 1 veiligheidsrisico voor webapplicaties en API’s. Waar veel cyberaanvallen ingewikkelde malware of code-injecties vereisen, maakt een aanvaller bij gebrekkig toegangsbeheer simpelweg misbruik van een fout in de autorisatielogica van de software.
Het resultaat? Een gewone gebruiker, klant of externe bezoeker krijgt toegang tot gegevens, functionaliteiten of beheerdersrechten die strikt afgeschermd hadden moeten blijven.
In deze uitgebreide gids ontdek je wat Broken Access Control precies is, welke vormen er bestaan, hoe aanvallers deze lekken opsporen, en hoe je jouw applicaties en API’s waterdicht beveiligt.
Wat is Broken Access Control?
Om te begrijpen wat er misgaat bij Broken Access Control, is het belangrijk om het verschil te kennen tussen twee fundamentele beveiligingsconcepten:
-
Authenticatie (Wie ben je?): Het verifiëren van de identiteit van een gebruiker (bijvoorbeeld via een gebruikersnaam, wachtwoord en tweefactorauthenticatie).
-
Autorisatie (Wat mag je?): Het controleren welke rechten en gegevens een reeds ingelogde gebruiker mag inzien of aanpassen.
Broken Access Control treedt op wanneer het autorisatiemechanisme faalt. De gebruiker is weliswaar netjes ingelogd (authenticatie klopt), maar de server controleert vervolgens niet of onvoldoende of deze specifieke gebruiker wel het recht heeft om een opgevraagde pagina te openen, een bestand te downloaden of een actie uit te voeren.
Hoe werkt gebrekkig toegangsbeheer? (Een Praktijkvoorbeeld)
Een van de meest voorkomende vormen van Broken Access Control is IDOR (Insecure Direct Object References).
Stel: je logt in op een webshop en navigeert naar je profielpagina om je factuur te bekijken. In de adresbalk van je browser zie je de volgende URL verschijnen:
[https://voorbeeld-webshop.nl/factuur?id=1045](https://voorbeeld-webshop.nl/factuur?id=1045)
Een gebruiker met kwade bedoelingen (of een nieuwsgierige bezoeker) verandert de waarde van de parameter in de adresbalk handmatig naar:
[https://voorbeeld-webshop.nl/factuur?id=1044](https://voorbeeld-webshop.nl/factuur?id=1044)
Wat gebeurt er als de toegangsbeveiliging kapot is?
-
Foutieve situatie (Broken Access Control): De server kijkt alleen of de bezoeker is ingelogd, haalt factuur
1044op uit de database en toont de persoonsgegevens en bestelhistorie van een andere klant op het scherm. -
Veilige situatie: De server controleert op de achtergrond: “Is de momenteel ingelogde sessie-ID daadwerkelijk de eigenaar van factuur 1044?” Zo niet, dan weigert de server het verzoek en toont een
403 Forbiddenfoutmelding.
De Belangrijkste Soorten Broken Access Control
Broken Access Control is een brede verzamelnaam. De kwetsbaarheid kan zich op veel verschillende manieren manifesteren binnen de architectuur van een applicatie:
┌─────────────────────────────────────────┐
│ BROKEN ACCESS CONTROL │
└────────────────────┬────────────────────┘
│
┌───────────────────┬──────────┴─────────┬───────────────────┐
▼ ▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Horizontale │ │ Verticale │ │ Client-Side │ │ CORS, SSRF & │
│ Privilege │ │ Privilege │ │ & URL-Bypass │ │ Framing │
│ Escalatie │ │ Escalatie │ │ │ │ │
├───────────────┤ ├───────────────┤ ├───────────────┤ ├───────────────┤
│ • IDOR │ │ • Onbeveiligde│ │ • Verborgen │ │ • Misconfigured│
│ • Account │ │ Admin API's │ │ Knoppen │ │ CORS │
│ Takeover │ │ • Rol-omzeiling│ │ • HTTP Method │ │ • Clickjacking│
│ │ │ │ │ Bypass │ │ • SSRF │
└───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘
1. Horizontale Privilege Escalatie (Bypass tussen gelijken)
Bij horizontale escalatie krijgt een gebruiker toegang tot de accounts of gegevens van een gebruiker met hetzelfde rechtengestelde niveau.
-
Voorbeeld: Gebruiker A past een parameter aan in een API-verzoek en kan zo de privéberichten, medische dossiers of bankgegevens van Gebruiker B inzien of wijzigen.
2. Verticale Privilege Escalatie (Van gebruiker naar beheerder)
Bij verticale escalatie lukt het een gebruiker met lage rechten om functionaliteiten uit te voeren die alleen zijn voorbehouden aan een gebruiker met hogere rechten (zoals een admin).
-
Voorbeeld: Een normale klant ontdekt dat de beheerpagina bereikbaar is op
[https://site.nl/admin](https://site.nl/admin). Als de server vergeet te controleren of de bezoeker een beheerderrol heeft, kan de klant ineens andere gebruikers verwijderen of prijzen aanpassen.
3. Client-Side Access Control & Interface Manipulation
Een veelgemaakte fout door ontwikkelaars is het vertrouwen op de browser (client-side). Knoppen of menu-opties worden in de HTML/JavaScript verborgen voor gewone gebruikers, in de veronderstelling dat ze er dan niet bij kunnen.
-
Het probleem: Een aanvaller kan de HTML aanpassen, verborgen elementen zichtbaar maken of API-verzoeken rechtstreeks versturen via tools zoals Postman of Burp Suite. Toegangsbeheer moet altijd op de server worden afgedwongen.
4. Bypassing via HTTP Methods
Sommige webapplicaties beveiligen alleen specifieke HTTP-methoden. Een pagina accepteert bijvoorbeeld geen GET-verzoek van een onbevoegde gebruiker op /admin/delete-user, maar als de aanvaller het verzoek veranderd naar een POST– of PUT-verzoek, voert de server de actie alsnog uit.
5. CORS Misconfiguraties & Metadata-lekken
Bij foute instellingen van Cross-Origin Resource Sharing (CORS) kan een externe, schadelijke website via de browser van een ingelogde gebruiker gevoelige gegevens opvragen bij jouw API. Ook valt het onbevoegd uitlezen van interne netwerkbronnen via Server-Side Request Forgery (SSRF) of het misleiden van de gebruiker via Clickjacking onder de bredere paraplu van gebrekkig toegangsbeheer.
De Impact van Broken Access Control op Organisaties
Omdat autorisatiefouten rechtstreeks toegang geven tot de ‘kroonjuwelen’ van een applicatie, zijn de gevolgen vaak enorm:
Hoe Voorkom en Herstel je Broken Access Control?
Het beveiligen van applicaties tegen autorisatiefouten vraagt om een doordachte en gestructureerde aanpak in de achterliggende code (backend).
1. Ontzeg Toegang Standaard (Deny by Default)
Hanteer het uitgangspunt dat niemand toegang heeft tot een pagina, bestand of API-endpoint, tenzij expliciet is vastgelegd dat dit wel mag. Indien een opgevraagde route niet expliciet is vrijgegeven voor een specifieke rol, moet de server het verzoek automatisch weigeren.
2. Dwing Autorisatie af op de Server (Server-Side Enforcement)
Vertrouw nooit op de browser of de frontend. Zelfs als een knop onzichtbaar is gemaakt in de gebruikersinterface, moet elke inkomende API-call op de server opnieuw worden gecontroleerd op twee punten:
-
Is de gebruiker ingelogd?
-
Hóórt het opgevraagde object (
ID) bij deze specifieke gebruiker?
3. Gebruik Indirecte of Willekeurige Referenties (GUID’s / UUID’s)
Vervang voorspelbare, opeenvolgende databasenummers (zoals id=1, id=2, id=3) door willekeurige en onvoorspelbare identificatielabels, zoals UUID’s (id=f47ac10b-58cc-4372-a567-0e02b2c3d479).
Let op: UUID’s maken het raden van URL’s extreem moeilijk, maar ze zijn geen vervanging voor echte autorisatiecontroles op de server!
4. Centraliseer de Autorisatielogica
Schrijf autorisatieregels niet versnipperd door de hele broncode, maar maak gebruik van gecentraliseerde middleware of beproefde raamwerken (zoals role-based access control / RBAC) die vóór elke controller-actie automatisch worden uitgevoerd. Dit voorkomt dat een ontwikkelaar bij het bouwen van een nieuwe pagina of functionaliteit vergeet de rechtencontrole toe te voegen.
5. Log Autorisatiefouten en Monitor Misbruik
Indien een gebruiker herhaaldelijk probeert toegang te krijgen tot endpoints of objecten die niet van hem zijn, moet dit worden opgemerkt. Log 401 Unauthorized en 403 Forbidden fouten en stel automatische waarschuwingen in bij verdacht gedrag (zoals een gebruiker die in één minuut honderden verschillende ID-parameters opvraagt).
Conclusie
Broken Access Control is niet voor niets de nummer 1 kwetsbaarheid op het web: het is voor aanvallers vaak eenvoudig op te sporen en de impact is meteen gigantisch. Ontwikkelaars moeten er altijd van uitgaan dat gebruikers de invoer, URL’s en API-verzoeken van een applicatie handmatig kunnen en zullen manipuleren.
Door strikte autorisatiecontroles op de server af te dwingen, het deny-by-default principe toe te passen en alle verzoeken te valideren tegen de identiteit van de ingelogde gebruiker, houd je applicaties, gegevens en gebruikers gegarandeerd veilig.
