GraphQLer: Enhancing GraphQL Security with Context-Aware API Testing
GraphQLer is een open-source geautomatiseerd security-testingsframework dat de beveiliging van GraphQL API's verbetert door getypeerde afhankelijkheidsgrafieken te construeren vanuit live schema's om meerstaps kwetsbaarheidsketens te synthetiseren, waardoor het bestaande tools zoals ZAP en EvoMaster overtreft in het detecteren van complexe, toestand-afhankelijke gebreken zoals IDOR, UAF en injectiekwetsbaarheden.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je het internet voor als een enorme, bruisende stad waar verschillende computerprogramma's (apps) constant met elkaar praten om informatie te delen. Jarenlang volgden deze gesprekken een strikte, voorspelbare kaart: als je een plaatje wilde, vroeg je om de "plaatje"-map; als je een bericht wilde, vroeg je om de "bericht"-map. Dit was als bestellen van een menu waarbij elk gerecht een vaste naam en locatie heeft. Maar onlangs werd een nieuwe manier van praten genaamd GraphQL populair. In plaats van een vast menu is GraphQL als een magische, vormveranderende verkoopautomaat. Je kunt vragen om precies wat je wilt, en de automaat zal proberen het ter plekke voor je te maken. Het probleem is dat omdat deze machine zo flexibel is, hij soms vergeet te controleren wie er voor hem staat. Een gewone verkoopautomaat geeft misschien alleen een frisdrank aan iemand met een muntje, maar deze magische automaat zou per ongeluk een privé dagboek of een bankrekening kunnen uitdelen als je het op de juiste manier vraagt. Hier komen beveiligingsonderzoekers in beeld, die proberen uit te vogelen hoe ze de machine kunnen misleiden om haar geheimen te onthullen zonder de stad zelf af te breken.
De tekst die je zojuist hebt gelezen, introduceert een nieuwe digitale detective genaamd GraphQLer. Denk aan de meeste beveiligingsscanners als onhandige toeristen die naar de verkoopautomaat lopen, op één willekeurige knop drukken en kijken wat er gebeurt. Als ze op "Frisdrank" drukken en frisdrank krijgen, gaan ze door. Als ze op "Water" drukken en een foutmelding krijgen, geven ze op. Ze beseffen nooit dat je om bij de "Geheime Voorraad" te komen, eerst op "Koop Frisdrank" moet drukken, daarna op "Ontvang Bon" en dan pas op "Geheime Voorraad" moet drukken. De oude tools zijn te dom om de punten te verbinden; ze testen elke knop in isolatie en missen de complexe sequenties die nodig zijn om het systeem te breken.
GraphQLer is anders. Het is als een detective die eerst de blauwdrukken van de machine bestudeert (het "schema") om te begrijpen hoe de knoppen met elkaar verbonden zijn. Het bouwt een mentale kaart die laat zien dat "Knop A" een nieuw item creëert, "Knop B" het verwijdert, en "Knop C" het misschien nog steeds kan zien nadat het weg is. Met deze kaart drukt GraphQLer niet zomaar willekeurig op knoppen; het creëert specifieke ketens van acties. Het simuleert een scenario waarin een gebruiker een item koopt, het vervolgens probeert te stelen, of het verwijdert en het dan toch weer probeert te lezen.
De onderzoekers hebben deze nieuwe detective getest op 21 verschillende echte en fictieve maar realistische API's (de computersystemen die worden getest). Ze kwamen tot de conclusie dat GraphQLer een enorme verbetering is ten opzichte van de oude tools. Terwijl de beste bestaande tools slechts ongeveer 29% van de knoppen van de machine konden bereiken, slaagde GraphQLer erin om 85,52% van de knoppen te bereiken. Belangrijker nog, wat betreft het vinden van de lastige beveiligingslekken, vonden de oude tools nul van de complexe, meerstaps problemen. GraphQLer vond echter alle vijf de bevestigde "IDOR"-kwetsbaarheden (waarbij je de spullen van iemand anders kunt zien door simpelweg een nummer te veranderen) en ontdekte zelfs een "Use-After-Free"-bug (waarbij je een bestand kunt zien nadat het is verwijderd).
In een realtime test op een financieel systeem (waar de auteurs "FinServ" aan noemen om het anoniem te houden), vond GraphQLer acht potentiële beveiligingsfouten zonder dat daar wachtwoorden of geheime documenten voor nodig waren. Het vond zelfs manieren om het systeem te laten crashen en de interne code te onthullen, wat een groot no-go is voor de beveiliging. Het artikel liet ook zien dat GraphQLer bekende kwetsbaarheden in een populair open-source platform genaamd Saleor kon reproduceren, wat bewijst dat het werkt op systemen die al bekend staan als defect.
De auteurs zijn zeer voorzichtig in hun opmerking dat, hoewel hun tool uitstekend is in het vinden van dit soort kettingreactie-bugs, het geen toverstaf is die alles oplost. Het worstelt nog steeds met enkele zeer specifieke, complexe scenario's waarbij de machine meerdere stukken informatie tegelijkertijd nodig heeft om te functioneren. Maar voor de overgrote meerderheid van moderne apps die deze flexibele GraphQL-technologie gebruiken, bewijst GraphQLer dat je niet meer simpelweg knoppen één voor één kunt testen. Je moet het verhaal begrijpen dat de machine vertelt, en pas dan kun je de plotgaten vinden.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.