Het belang van API security wordt continu onderstreept. Vorige week ontdekte Rapid7 een lek in de GraphQL API van GitLab. De securityonderzoekers wisten zonder machtiging persoonsgegevens op te halen. Het lek is inmiddels gedicht, maar de kwetsbaarheid wijst op een groter probleem.
GraphQL is een query-programmeertaal voor API’s. De syntax is relatief simpel en geliefd onder organisaties als Facebook en GitLab. In tegenstelling tot REST APIs werkt GraphQL met een enkele endpoint per applicatie. Na een verbinding is alle blootgestelde applicatiedata beschikbaar.
Sommige organisaties zorgen ervoor dat GraphQL uitsluitend op de queries van gemachtigde gebruikers ingaat. Andere organisaties werken met meerdere machtigingsniveaus, waarbij de blootgestelde data afhangt van het niveau van een gebruiker.
Het laatste is foutgevoelig. Securityonderzoekers van Rapid7 wisten de GraphQL API van GitLab te benaderen om (gebruikers)namen, mailadressen en foto’s op te halen. Het onderzoeksteam had geen enkele machtiging. Namen en mailadressen zijn munitie voor social engineering en spionage.
Het grote probleem
De GraphQL API van GitLab is inmiddels gepatcht, maar de kwetsbaarheid wijst op een groter probleem. Een slordigheid in de configuratie of ontwikkeling van API’s kan tot serieuze lekken leiden. WAF en API Gateways zijn er niet tegen opgewassen. De maatregelen kunnen verdacht verkeer blokkeren, maar dat is voor GraphQL API’s niet genoeg.
GraphQL maakt het mogelijk om applicaties in delen te splitsen (objects) en bloot te stellen, afhankelijk van de machtiging van een gebruiker. WAF en API Gateways hebben geen enkel idee waar een object uit bestaat en of een object blootgesteld hoort te zijn.
Het probleem vraagt om een moderne oplossing. Sommige ontwikkelaars, waaronder Noname Security, gaan verder dan WAF’s en API Gateways. Het platform van Noname Security is niet alleen in staat om verdacht verkeer te onderscheppen, maar de configuratie van API’s te analyseren. Bijvoorbeeld om, in het geval van GraphQL, te beoordelen of de toegang tot objects wordt geverifieerd.