Skip to content

Penetration testing

APIs fail at authorization, one endpoint at a time.

An API has no UI to hide behind. Every endpoint is directly reachable, and an attacker reads your own client code to learn which ones exist.

CyberArc tests APIs the way they are actually attacked: endpoint by endpoint, asking whether the server re-checks authorization or trusts the caller.

Object-level authorization, checked per endpoint

The dominant API flaw is an endpoint that authenticates the caller correctly and then never asks whether this caller owns the object being requested. Change an identifier and you read someone else's record.

The only way to find this is to test every endpoint that accepts an identifier, with a token that should not have access to the object. It is tedious and it is where the real findings are. One endpoint checking ownership is not evidence that the next one does.

What gets exercised

Scope includes the endpoint inventory itself, because an undocumented endpoint is still a live endpoint.

  • Authorization on every endpoint, including ones absent from the documentation
  • Object-level access control with tokens from a different account and a different tenant
  • Token handling: expiry, revocation, signature validation, scope enforcement, refresh flows
  • Mass assignment: fields the client should not be able to set
  • Schema abuse: type confusion, oversized payloads, unexpected nesting, enum bypass
  • Rate limiting and resource exhaustion within the limits in the rules of engagement

Documentation helps, and its absence is a finding

An OpenAPI or GraphQL schema makes the test faster and deeper, because the tester spends the time on authorization rather than on discovery.

If no specification exists, the endpoint inventory is built from your client applications and traffic. The gap between what you believe is exposed and what is actually exposed then becomes one of the report's findings.

GraphQL and REST are tested differently

REST spreads authorization across many routes, so coverage means enumerating them all. GraphQL concentrates it behind one endpoint, so the questions become resolver-level authorization, query depth and cost limits, and whether introspection hands an attacker the whole schema.

Questions

What is API penetration testing?
Authorized testing of an API's endpoints for authorization flaws, broken object-level access control, token handling weaknesses, mass assignment and schema abuse. Every endpoint is checked independently, because one endpoint enforcing ownership does not mean the next one does.
Do you need our OpenAPI specification?
It helps and it is not required. With a specification the test spends its time on authorization instead of discovery. Without one, the endpoint inventory is rebuilt from your clients and traffic, and any gap between that and what you expected is reported.
Can you test a GraphQL API?
Yes. GraphQL testing focuses on resolver-level authorization, query depth and cost limits, introspection exposure, and whether a single permitted query can be nested into one that reads data the caller should not see.

Next step

Start with a scoping call.

Tell us what you need tested. Before any testing begins, the scope is written down and the agreement and rules of engagement are signed.

Book a scoping call