Ga naar hoofdinhoud

Authorization Bypass — Low

In deze uitdaging leren we over Insecure Direct Object Reference (IDOR), oftewel: mag de ingelogde gebruiker wel zien wat hij opvraagt?

1. Predict (Voorspel)

Stel, je bent ingelogd op een app en klikt op de knop om je adresgegevens te zien. De URL ziet er zo uit: https://webwinkel.nl/profiel?klant_id=4592

Vraag: Wat gebeurt er als je het id in de URL aanpast naar 4593 en de backend ontwikkelaar geen autorisatiecheck heeft geschreven?

Antwoord

Als de backend domweg blind vertrouwt op de parameter (klant_id=4593), trekt hij de privégegevens van klant 4593 uit de database en laat ze aan jou zien! Dit heet Insecure Direct Object Reference, omdat je direct mag verwijzen naar objecten/data die niet van jou zijn.

2. Run & Investigate

Start de lab-omgeving hieronder.

Laden...

Je ziet een formulier met een dropdown-menu waar je een ID kunt selecteren en bekijken.

3. Modify & Make (Aanpassen & Maken)

Omdat het security level op Low staat, is er geen controle op wie jij bent ten opzichte van de opgevraagde data.

Vraag een profiel op van een andere gebruiker dan jezelf.

Tip

Kies simpelweg een ander persoon in de dropdown en klik op de knop.

Antwoord

Omdat er op de backend geen controle wordt uitgevoerd, rolt het profiel van de andere persoon direct uit de server!

4. ✓ Wat moest je zien?

Controle
  • Na het kiezen van een ander persoon in de dropdown verschijnt diens profielgegevens (naam, e-mail, etc.), niet die van jou.
  • Géén foutmelding, géén "Toegang geweigerd": de server levert klakkeloos data af waar je niets te zoeken had.
  • Je hoefde geen F12 of trucjes — het volstond om gewoon een ander ID te kiezen en te submitten.

Krijg je toch je eigen profiel terug? Controleer dat je écht een ander ID dan dat van jezelf in de dropdown selecteerde voordat je op Submit klikte.

5. Er gaat iets mis...

Wat als je in de dropdown de ID waarde aanpast naar 9999 (een ID dat niet bestaat)? Soms crasht de hele pagina met een 500 Internal Server Error omdat de applicatie verwacht dat de opgevraagde data bestaat, en geen 'Niet Gevonden' foutafhandeling heeft geschreven. Hakken draait om grenzen opzoeken!