Toegangscontrolefout: als de digitale deurwachter zijn werk niet goed doet
Stel je voor: je logt in op de website van je bank en kunt plotseling, door alleen een cijfer in de adresbalk te veranderen, de rekening van een vreemde bekijken in plaats van je eigen rekening. Niemand heeft je wachtwoord gestolen en er is geen geavanceerde hack aan te pas gekomen. Het systeem heeft simpelweg vergeten te controleren of jij wel de eigenaar bent van het rekeningnummer dat je opvraagt. Dit is in de kern wat een toegangscontrolefout is: een fout in software waardoor gebruikers dingen kunnen zien of doen die eigenlijk niet voor hen bedoeld zijn.
In het Engels heet dit fenomeen 'broken access control', en het staat al jaren bovenaan lijstjes van de meest voorkomende en meest schadelijke kwetsbaarheden in webapplicaties. Het klinkt technisch, maar de onderliggende gedachte is simpel: elke applicatie heeft een soort digitale deurwachter die moet beslissen wie welke kamer in mag. Een toegangscontrolefout ontstaat wanneer die deurwachter slordig is, verkeerde aannames doet, of soms zelfs helemaal vergeten is neer te zetten.
Wat is het precies?
Om te begrijpen wat er misgaat, is het handig om twee begrippen uit elkaar te houden die vaak door elkaar worden gebruikt: authenticatie en autorisatie. Authenticatie is het proces waarbij een systeem vaststelt wie je bent, meestal via een gebruikersnaam en wachtwoord. Autorisatie is de stap daarna: nu we weten wie je bent, mag je dan ook echt bij dit specifieke stukje data of deze specifieke functie? Een toegangscontrolefout zit vrijwel altijd in die tweede stap. Je bent keurig ingelogd, het systeem weet wie je bent, maar het controleert niet goed genoeg of jij wel de juiste persoon bent voor de actie die je probeert uit te voeren.
Een veelvoorkomende variant heet IDOR, wat staat voor 'insecure direct object reference', ofwel een onveilige directe verwijzing naar een object. Dit gebeurt wanneer een applicatie in een link of API-verzoek rechtstreeks een identificatienummer gebruikt, bijvoorbeeld factuur.php?id=1042, zonder te controleren of de ingelogde gebruiker wel recht heeft op factuur 1042. Verander het nummer in 1043, en als de controle ontbreekt, zie je de factuur van iemand anders.
Een andere variant is verticale privilege-escalatie: een gewone gebruiker die toegang krijgt tot functies die eigenlijk gereserveerd zijn voor beheerders, bijvoorbeeld door een verborgen adminpagina te raden of door een parameter als 'role=admin' in een verzoek te wijzigen. Er bestaat ook horizontale privilege-escalatie, waarbij een gebruiker geen hogere rechten krijgt, maar wel toegang tot gegevens van andere gebruikers met dezelfde rechten, zoals in het bankvoorbeeld hierboven.
Een derde categorie is het ontbreken van functiegebonden toegangscontrole. Sommige applicaties verbergen gevoelige functies simpelweg in de gebruikersinterface, in de veronderstelling dat 'niemand die knop toch kan vinden'. Maar als de onderliggende server-functie niet apart wordt beveiligd, kan iemand die het verzoek rechtstreeks naar de server stuurt, buiten de knoppen om, alsnog de actie uitvoeren. Beveiliging die alleen in de zichtbare interface zit en niet op de server, is in feite geen beveiliging.
Wat wil men ermee bereiken?
Het doel van goede toegangscontrole is eenvoudig te formuleren, ook al is het lastig om perfect uit te voeren: elke gebruiker mag precies zien en doen wat bij zijn of haar rol hoort, niet meer en niet minder. Dit principe wordt ook wel 'least privilege' genoemd, het principe van de minste rechten. Een medewerker van de klantenservice hoeft bijvoorbeeld niet de salarisgegevens van collega's te kunnen inzien, ook al zit die informatie misschien in dezelfde database.
Onderzoekers en ontwikkelaars die zich bezighouden met toegangscontrole willen vooral drie dingen bereiken. Ten eerste willen ze fouten in een vroeg stadium opsporen, het liefst al tijdens het ontwerpen van software, in plaats van pas nadat een kwaadwillende ze heeft gevonden. Ten tweede willen ze bruikbare, herhaalbare methodes ontwikkelen waarmee ontwikkelaars die geen beveiligingsspecialist zijn, toch standaard veilige keuzes maken. Ten derde speelt compliance een grote rol: wetgeving zoals de Algemene Verordening Gegevensbescherming (AVG) verplicht organisaties om persoonsgegevens adequaat te beschermen, en een toegangscontrolefout die persoonsgegevens blootlegt, kan direct leiden tot een meldplichtig datalek en boetes.
Belangrijk om te beseffen is dat dit geen veld is waarin gestreefd wordt naar één technologische doorbraak. Het is eerder een voortdurende strijd tegen menselijke fouten, tijdsdruk bij softwareontwikkeling en de groeiende complexiteit van moderne applicaties, die vaak uit tientallen microservices en API's bestaan die allemaal onderling met elkaar moeten communiceren.
Voorbeelden uit de praktijk
In 2019 ontdekte een beveiligingsonderzoeker dat First American Financial Corporation, een grote Amerikaanse verzekeraar in de vastgoedsector, meer dan 885 miljoen documenten met gevoelige financiële en persoonlijke gegevens toegankelijk had via simpelweg opeenvolgende documentnummers in een URL, zonder enige inlogcontrole. Iedereen die het nummer in de link aanpaste, kon documenten van andere klanten inzien, waaronder bankgegevens en burgerservicenummers.
In 2021 kwam aan het licht dat fitnessplatform Peloton via een niet goed beveiligde API persoonlijke gegevens van gebruikers, waaronder locatie, leeftijd en geslacht, toegankelijk had zonder dat daarvoor een geldige autorisatiecontrole nodig was, ook voor accounts die op 'privé' stonden ingesteld.
Ook socialmediaplatform Parler kreeg in januari 2021 te maken met massale dataverzameling doordat berichten via voorspelbare, opeenvolgende identificatienummers waren op te vragen, in combinatie met ontbrekende snelheidslimieten en toegangscontrole op die verzoeken.
In de Nederlandse en Europese context worden dit soort fouten regelmatig gemeld via responsible disclosure-programma's: onderzoekers melden een gevonden IDOR- of privilege-escalatieprobleem vertrouwelijk bij een organisatie, die vervolgens de tijd krijgt om het te repareren voordat details openbaar worden. Het Nationaal Cyber Security Centrum (NCSC) faciliteert en promoot dit proces al jaren voor Nederlandse organisaties en overheidsdiensten.
Een bekend structureel voorbeeld is de OWASP Top 10 zelf: in de editie van 2021 werd 'broken access control' voor het eerst de nummer één categorie, een positie die eerder werd ingenomen door problemen als SQL-injectie. Dat zegt iets over hoe wijdverbreid dit type fout inmiddels is ten opzichte van andere kwetsbaarheden.
Hoe ver is de techniek?
Het is belangrijk om hier een nuance te maken: toegangscontrole is geen nieuwe technologie die zich ontwikkelt zoals bijvoorbeeld kunstmatige intelligentie. De onderliggende concepten, zoals rolgebaseerde toegangscontrole (RBAC) en attribuutgebaseerde toegangscontrole (ABAC), bestaan al decennia en zijn theoretisch goed uitgewerkt. Het probleem zit vrijwel nooit in een gebrek aan kennis over hoe het zou moeten, maar in de consistente toepassing ervan in de praktijk.
Wat wel volop in ontwikkeling is, zijn de hulpmiddelen om dit soort fouten op te sporen. Geautomatiseerde scanners en zogeheten 'static application security testing' (SAST) en 'dynamic application security testing' (DAST) tools worden steeds beter in het signaleren van patronen die op ontbrekende autorisatiecontroles wijzen, al blijven toegangscontrolefouten notoir lastig om volledig automatisch te detecteren. Dat komt doordat een computer vaak niet kan weten wat de bedoelde bedrijfsregel is, bijvoorbeeld dat gebruiker A geen toegang mag hebben tot het dossier van gebruiker B, tenzij die regel expliciet is vastgelegd.
Een recentere ontwikkeling is het gebruik van kunstmatige intelligentie en taalmodellen om code te analyseren op logische autorisatiefouten die traditionele scanners missen, en om geautomatiseerd penetratietests uit te voeren die als een 'redelijke' aanvaller proberen objecten en functies te benaderen waarvoor ze geen rechten hebben. Deze aanpak staat nog in de kinderschoenen en de resultaten zijn wisselend: veelbelovend voor het opsporen van voor de hand liggende IDOR-problemen, maar nog onbetrouwbaar bij complexere, contextafhankelijke autorisatielogica.
Ondertussen groeit ook de complexiteit van de omgeving waarin toegangscontrole moet functioneren, met microservice-architecturen, cloud-omgevingen en een wildgroei aan API's. Elke nieuwe verbinding tussen systemen is in potentie een nieuwe plek waar de controle vergeten kan worden. Beveiligingsexperts zijn het er breed over eens dat het probleem daardoor eerder groeit dan afneemt, ondanks betere tools.
Wie werken eraan?
Het Open Worldwide Application Security Project (OWASP), een wereldwijde non-profitgemeenschap van vrijwillige beveiligingsexperts, speelt een centrale rol bij het documenteren en categoriseren van toegangscontrolefouten via de bekende OWASP Top 10 en het uitgebreidere OWASP Application Security Verification Standard (ASVS).
Het Amerikaanse MITRE-instituut onderhoudt de Common Weakness Enumeration (CWE), een gestandaardiseerde catalogus waarin specifieke soorten toegangscontrolefouten een uniek nummer krijgen, zodat onderzoekers, softwareleveranciers en overheden wereldwijd dezelfde taal spreken over kwetsbaarheden.
Op standaardisatiegebied werkt het Amerikaanse National Institute of Standards and Technology (NIST) al sinds de jaren negentig aan modellen voor rolgebaseerde toegangscontrole en publiceert het richtlijnen die door overheden en bedrijven wereldwijd worden gebruikt als referentiekader.
Grote softwarebedrijven zoals Microsoft, Google en Amazon investeren zwaar in interne tooling en 'bug bounty'-programma's, waarbij externe onderzoekers een beloning krijgen voor het melden van onder meer toegangscontrolefouten in hun cloudplatforms. Ook gespecialiseerde beveiligingsbedrijven zoals PortSwigger, bekend van de Burp Suite-testtools en de gratis Web Security Academy, dragen bij aan kennisverspreiding over dit onderwerp onder ontwikkelaars en testers.
In Nederland en de bredere Europese Unie zijn het Nationaal Cyber Security Centrum en het Europese ENISA (European Union Agency for Cybersecurity) actief betrokken bij het opstellen van richtlijnen voor overheidsinstanties en kritieke infrastructuur, mede aangejaagd door regelgeving zoals de NIS2-richtlijn, die organisaties verplicht hun cybersecuritymaatregelen, waaronder toegangscontrole, aantoonbaar op orde te hebben.