NieuwProbeer 7 dagen gratis
api pentest

Een API-pentest die ook de endpoints vindt die nergens gedocumenteerd zijn.

API's gaan vooral mis op autorisatie, en dat verschilt per endpoint. interopt test elk endpoint met verschillende accounts en laat je daarna de request en de response zien die het bewijs leveren.

api.acme.io
GET/v2/orders/{id}
POST/v2/orders/{id}/refund
PATCH/internal/users/{id}/role
DELETE/v1/legacy/export
GET/v2/statements
POST/v2/webhooks/test
31of 47 routes were missing from the spec
01 / Zo werkt het

Elk endpoint, aangeroepen met elk account dat je meegeeft.

Wat de scan bereikte, met welke accounts hij werkte, de patch die hij voorstelt en wat je team krijgt als hij klaar is.

Oppervlak

Het test de endpoints zelf, niet de documentatie.

De agent brengt in kaart waar de API echt op reageert: via verkeer, via de specificatie die je uploadt en, met de repository gekoppeld, via de routes in de code zelf. Ook een endpoint dat nergens gedocumenteerd is, valt binnen scope.

  • OpenAPI, WSDL of een Postman-collectie als context
  • Endpoints die niet in je documentatie staan, worden ook getest
  • De surface map laat zien wat elke run heeft bereikt
Surface map
Surface mapreached this run
api.acme.io
GET/v2/orders
GET/{id}
POST/{id}/refund
GET/v2/accounts/{id}/statements
PATCH/internal/users/{id}/role
DELETE/v1/legacy/export
Scope · Documentation
Context for this scan
openapi.yaml184 KB
acme.postman_collection.json96 KB
architecture.png1.2 MB
3 of 5 documents · read-only to this scan's agents
Autorisatie

Dezelfde request. Een ander account.

Geef twee accounts mee en elke call wordt met het andere account herhaald. Krijgt bob de bestelling van alice terug, dan bevat de bevinding de request, de response en het record dat bob nooit had mogen zien.

  • Ingelogd met de testaccounts die je toevoegt
  • Eén account per rol, of per klant
  • Grey box voor API's waarvan je de code niet hebt
Geauthenticeerd testen
Auth profiles · HTTP headers
Two tenants, replayed on every call
AL[email protected] Authorization: Bearer eyJhbGci…Q1
BO[email protected] Authorization: Bearer eyJhbGci…7x
criticalAny user can read another customer's orderWSTG-ATHZ-04
Observation
1GET /v2/orders/8842 HTTP/2
2Authorization: Bearer eyJhbGci…7x # bob
3
4HTTP/2 200
5{"id":8842,"customer":"[email protected]",
6 "total":"1,240.00","card_last4":"4417"}
Fix

De patch staat op een eigen branch.

Met de repository gekoppeld krijg je bij een bevinding meteen de wijziging die het lek dicht. Review hem per bestand, laat weg wat je niet wilt en open hem als pull request.

  • Gekoppeld aan het endpoint en de parameter die hij repareert
  • Een test voor het endpoint, meegeleverd met de fix
  • GitHub, GitLab of Bitbucket
Fixes en pull requests
Asset api.acme.ioEndpointGET /v2/orders/{id}Param id · pathAssigneeJR Jamie Reyes
FindingSuggested fixAIActivity3Notes
3 of 3 files included · +32 −1Branch fix/orders-owner-check · base main Open PR
src/routes/orders.ts+2−1
src/lib/authz.ts+6−0
src/routes/orders.test.tsnew+24−0
1414const order = await db.order.findFirst({
15− where: { id: req.params.id },
15+ where: { id: req.params.id, ownerId: user.id },
Wat je krijgt

Live volgen tijdens de run. Bevindingen als hij klaar is.

Volg een run terwijl hij loopt: welke endpoints hij heeft bereikt en wat hij nu test. De bevindingen komen pas aan het eind, omdat iets wat laat in de run blijkt een eerdere bevinding kan veranderen. Daarna gaan ze naar het kanaal dat je kiest, samen met het rapport.

  • Meldingen in Slack, Teams of Discord als een run iets vindt
  • Een ticket per bevinding in Jira, Linear of GitHub
  • Een pentestrapport als de run klaar is
Meldingen
api.acme.io38 of 56 endpoints tested
GET/v2/orders/{id} Tested
POST/v2/orders Tested
PATCH/v2/users/{id} Tested
GET/v2/invoicesTesting…
DELETE/v2/sessions/{id}Queued
Interopt#security · 18:40Run finished on api.acme.io: 1 critical, 2 high. Any user can read another customer's order.Open report →
02 / Dekking

Waar een API-pentest naar zoekt.

Het grootste risico van een API zit in wie wat mag aanroepen, maar daar blijft het zelden bij.

01

Kan de ene gebruiker bij de gegevens van de ander?

Verander een ID en kijk van wie het record terugkomt. Daarna wordt het object ook echt gelezen, want een 200 is nog geen bewijs.

02

Kan een rol iets aanroepen wat niet mag?

Routes die de interface verbergt, bestaan nog steeds, en de API stelt vaak meer beschikbaar dan de client laat zien.

03

Kan de client waarden aanpassen die hij niet mag zetten?

Een rol, abonnement of 'geverifieerd'-vlag meesturen bij een update, en kijken of die waarde blijft staan.

04

Houden tokens en sessies stand?

Tokens die blijven werken na uitloggen, en refresh-flows die meer teruggeven dan er gevraagd werd.

05

Wat doet de API met onverwachte invoer?

Injectie via JSON-bodies en queryparameters, en wat een misvormd verzoek aan informatie oplevert.

06

Wat zit er in de response?

Een endpoint dat het hele record teruggeeft, terwijl de client er maar drie velden van toont.

03 / Vragen

Veelgestelde vragen.

klaar wanneer jij dat bent

Laat je API testen.

Een basis-URL en een account zijn genoeg om te beginnen. Koppel je repository en je krijgt de ontbrekende controle als fix terug.