API Security Testing

By Davy Rogers

APIs are the most exposed attack surface. Test them before attackers do.

APIs rarely have browser protections. Most exposed surface.

Reconnaissance

Sources: OpenAPI/Swagger, GraphQL introspection, gRPC reflection, client JS, mobile traffic.

Hidden endpoints:

ffuf -u https://api.example.com/api/FUZZ -w api-endpoints.txt -mc 200,401,403

401/403 = exists, needs auth.

REST testing

Auth bypass: Test every endpoint without token.

BOLA (#1 API vuln):

GET /api/users/102/documents/5002  # With user 101's token
# Should 403, not 200

Function-level: Regular user tries POST /api/admin/users.

Mass assignment: PATCH /api/users/me {"role": "admin"} - accepted?

Rate limiting: 100 requests - any 429?

Excessive exposure: Response includes passwordHash, internal IDs?

GraphQL

Introspection: { __schema { types { name } } } - should be disabled in prod.

Depth attacks: Nested queries to exhaust server.

Batch attacks: Multiple mutations in one request bypass rate limits?

Resolver authz: Access via relationship might skip checks.

gRPC

grpcurl -plaintext localhost:50051 list
grpcurl -d '{"user_id": 102}' -H "auth: $USER_A_TOKEN" localhost:50051 myapp.UserService/GetUser

The takeaway

Map all endpoints including undocumented. Test auth bypass. BOLA on every ID. Function-level access. Mass assignment. Rate limits. Data exposure. Test systematically using OWASP API Security Top 10.

Want a professional to look at it?Get an AppSec Health Check.