jan-karel.nl

De Achterdeur Staat Open

Hier is iets grappigs over de moderne internetarchitectuur: we hebben decennia besteed aan het beveiligen van de voordeur — firewalls, WAF's, inlogschermen met CAPTCHA's, beveiligde formulieren — om vervolgens de achterdeur wagenwijd open te laten staan. Die achterdeur heet de API.

Een API — Application Programming Interface — is hoe softwaresystemen met elkaar praten. Je mobiele app praat met de server via een API. Je frontend praat met je backend via een API. De betaalprovider, de bezorgdienst, de weerservice — allemaal API's. Het moderne internet is niet zozeer een verzameling websites als wel een kluwen van API's met hier en daar een mooie interface eroverheen geplakt.

Waarom is API-beveiliging anders?

Bij een website kun je zien wat een gebruiker kan doen. Er zijn knoppen, formulieren, menu's. De aanvalsmogelijkheden zijn in zekere zin begrensd door wat de interface toestaat. Bij een API is er geen interface. Er zijn alleen endpointsURL's die data accepteren en data teruggeven. En het probleem met endpoints is dat ze precies doen wat je ze vraagt, zonder zich af te vragen of de vraag wel logisch is.

Een webapplicatie laat je misschien je eigen profiel bekijken via /profiel. De onderliggende API laat je elk profiel bekijken via /api/users/12345. En als niemand heeft gecontroleerd of jij gebruiker 12345 wel mag bekijken, dan heb je een probleem. Dat probleem heet Broken Object Level Authorization, en het is de nummer één kwetsbaarheid in de OWASP API Security Top 10.

De OWASP API Security Top 10 (2023)

  1. Broken Object Level Authorization (BOLA) — De API controleert niet of jij het gevraagde object mag benaderen. Verander het ID in de URL en je ziet andermans data.
  2. Broken Authentication — Zwakke of ontbrekende authenticatie op API-endpoints. Tokens die niet verlopen, API-keys in de URL, ontbrekende rate limiting op login.
  3. Broken Object Property Level Authorization — Je mag het object wel zien, maar niet alle velden. De API stuurt ze toch mee.
  4. Unrestricted Resource Consumption — Geen limieten op hoeveel data je kunt opvragen. Eén request dat de hele database teruggeeft.
  5. Broken Function Level Authorization — Gebruikersendpoints die ook admin-functies blootstellen als je het juiste pad raadt.
  6. Unrestricted Access to Sensitive Business Flows — Geautomatiseerde aanvallen op bedrijfsprocessen: massaal tickets kopen, accounts aanmaken, kortingscodes uitproberen.
  7. Server Side Request Forgery (SSRF) — De API fetch externe URL's zonder validatie, waardoor je interne systemen kunt bereiken.
  8. Security Misconfiguration — Verbose foutmeldingen, ontbrekende CORS-headers, debug-modes in productie.
  9. Improper Inventory Management — Oude API-versies die nog draaien, ongedocumenteerde endpoints, vergeten testomgevingen.
  10. Unsafe Consumption of APIs — Blindelings vertrouwen op data van externe API's zonder validatie.

Het patroon

Wat opvalt: de meeste API-kwetsbaarheden gaan niet over ingewikkelde cryptografische aanvallen of zero-day-exploits. Ze gaan over het ontbreken van de vraag: "Mag deze gebruiker dit doen?" Het is autorisatie, autorisatie, en nog eens autorisatie. De technologie is niet het probleem. Het probleem is dat iemand vergat te controleren of de persoon die aan de deur klopt ook daadwerkelijk welkom is.

Op de hoogte blijven?

Ontvang maandelijks cybersecurity-inzichten in je inbox.

← OWASP API Security ← Home