Test GET / POST / PUT / PATCH / DELETE / OPTIONS
Examplecurl-i -X PATCH https://target/api/user/1 -H"Content-Type: application/json"-d'{"role":"admin"}'
IDOR
Swap:
- numeric IDs
- UUIDs
- org / tenant IDs
- order / invoice IDs
Watch:
- 403 vs 404 difference
- same schema for other users
- list endpoints returning extra data
Mass assignment
Try adding:
{"isAdmin":true}{"role":"admin"}{"verified":true}{"ownerId":"2"}
Great targets:
- signup
- profile update
- team membership
- order creation
03Auth & CORS
Auth placement
Check:
- Cookie only
- Bearer only
- both accepted
- x-api-key
- token in query
- trust of x-user-id / x-role
CORS
curl-i https://target/api/me -H"Origin: https://evil.example"
Look for:
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Allow-Headers
Bad signs:
- reflective Origin
- wildcard + sensitive data
curl-s https://target/graphql -H"Content-Type: application/json"-d'{"query":"{__schema{types{name fields{name}}}}"}' | jq
If blocked:
- inspect JS bundle
- use GraphQL errors
- fuzz common names: me, user, admin
GraphQL bug classes
- IDOR by resolver
- hidden fields via fragments
- batching / alias abuse
- expensive query DoS
- authZ mismatch between resolvers
- schema leakage through errors
05Bug Classes
IDOR
user/1 → user/2
invoice/100 → 101
Mass assignment
isAdmin
role
verified
ownerId
AuthZ drift
UI blocked
API still works
CORS
reflective Origin
wildcard + creds
Version drift
/v1 fixed
/v2 still broken
Debug leftovers
/openapi.json
/metrics
stack traces
06Decision Tree
What to test next?
Have endpoint but no docs?
→ OPTIONS, docs paths, JS bundle grep
Have token but little access?
→ IDOR, org / team / owner fields
JSON update endpoint?
→ mass assignment
GraphQL found?
→ __typename, introspection, schema hunting
Cross-origin behavior suspicious?
→ Origin + creds + preflight
07Automation
Docs probe
for p in /openapi.json /swagger.json /swagger /api/docs /redoc; docurl-skI https://target$p | head -n 1done