● Talk to a security engineer: +92 323 8295031info@protonyte.com  ·  PCSF batch enrolling now

API penetration testing for REST, GraphQL and SOAP

APIs are where the data actually is, and they are tested far less often than the screens in front of them. Protonyte tests REST, GraphQL and SOAP interfaces against the OWASP API Security Top 10 for teams in the United States, the UK, Canada and the Gulf - object-level authorisation first, because that is what keeps turning up, and the forgotten version-one endpoint nobody remembered was still answering.

account Aaccount B /orders/10043 authorisation served anyway

ENGAGEMENT SCOPEtypical 1 - 2 week test

REST and JSON APIsIN SCOPE
GraphQL schemas and resolversIN SCOPE
SOAP and XML servicesIN SCOPE
Authentication: OAuth 2, JWT, API keysIN SCOPE
Rate limiting and resource abuseIN SCOPE
The mobile or web clientOPTIONAL
// the basics

Why APIs fail differently

A web page hides what it does not want you to see. An API hands you the whole request and waits. There is no interface to constrain you, no dropdown limiting the value, no page flow enforcing an order - only whatever the server chooses to check.

That is why the OWASP API Security Top 10 is led by authorisation rather than injection. The question is almost never "can I make this crash"; it is "can I ask for somebody else’s record and be given it". We test that with two real accounts and a long, patient list of every object your API knows about.

  • 01Two accounts, alwaysObject-level authorisation cannot be tested with one login. We ask for two and try each against the other’s data.
  • 02The whole surfaceIncluding the endpoints your documentation forgot and the older version still answering alongside the new one.
  • 03GraphQL properlyIntrospection, nested-query depth, batching abuse and resolver-level authorisation, not just the happy path.
  • 04Mapped to the standardFindings tied to the OWASP API Security Top 10, which is what your enterprise customer will ask about.
// coverage

What we go after

The ten categories of the OWASP API Security Top 10, applied to the endpoints your service actually exposes.

// the first one

Broken object-level authorisation

Asking for a record that belongs to somebody else, and getting it.

  • Identifiers swapped between two real accounts
  • Predictable and enumerable IDs
  • Nested and indirect object references
  • Authorisation checked on read but not on write
// who is calling

Authentication and tokens

How the API decides a request is genuine.

  • JWT signature, algorithm and expiry handling
  • OAuth 2 flows, scopes and refresh tokens
  • API key exposure and rotation
  • Credential stuffing and login rate limits
// what you may do

Function and property level

Reaching an action, or a field, that is not yours.

  • Administrative endpoints from a normal account
  • Mass assignment of protected properties
  • Fields returned that should be filtered
  • Methods the documentation does not mention
// what you send

Input handling and injection

Everything the server parses on your behalf.

  • SQL, NoSQL and command injection
  • XML external entities in SOAP
  • GraphQL query depth and batching abuse
  • Deserialisation of untrusted payloads
// what it fetches

Server-side request forgery

Making your API fetch something on the attacker’s behalf.

  • URLs accepted as parameters
  • Webhook and callback destinations
  • Cloud metadata endpoints reached from inside
  • Redirect and DNS rebinding tricks
// what exists

Inventory and configuration

The endpoints and versions nobody is watching any more.

  • Older API versions still live
  • Staging and debug hosts answering publicly
  • CORS, headers and verbose errors
  • Documentation and schema exposure
// methodology

How the work runs

  1. 1

    Scope and credentials

    We agree which services are in scope and ask for two accounts at each permission level, which is what authorisation testing needs.

    • Base URLs and environments
    • Two accounts per role
    • Collection, schema or specification if you have one
    • Written authorisation
  2. 2

    Build the real inventory

    Documentation describes the API somebody meant to ship. We find the one that is answering.

    • Specification and schema review
    • Traffic captured from the real clients
    • Endpoint and version discovery
    • Undocumented parameters
  3. 3

    Test authorisation first

    Every object, every account, both directions, before anything else is attempted.

    • Object-level access between accounts
    • Function-level access between roles
    • Property-level filtering on read and write
    • Tenancy boundaries
  4. 4

    Everything else

    Injection, resource abuse, SSRF and configuration, against the inventory rather than the documentation.

    • Input handling across formats
    • Rate limits and cost-based abuse
    • Outbound request handling
    • Headers, CORS and error detail
  5. 5

    Report and retest

    Findings by OWASP API category, with the exact call that proves each one, then a free retest.

    • One reproducible request per finding
    • CVSS and business impact
    • Fix guidance for your framework
    • Retest and closure summary
// the deliverable

What you are left holding

Two documents and a conversation. Written so the person who signs the invoice and the person who writes the fix can both use them.

  • Executive summary in plain language, with the business risk first
  • Technical findings with the evidence that proves each one
  • CVSS score and a risk rating that reflects your business, not a template
  • Remediation written for the stack you actually run
  • A free retest, and a closure summary you can hand to a customer
  • A debrief call with the tester who did the work, not an account manager
Ask for a sample report
// the standards

Measured against something

The work follows OWASP API Security Top 10, OWASP Web Security Testing Guide, OWASP ASVS and NIST SP 800-115, so the coverage can be checked rather than taken on trust, and the report maps to what your auditor or your enterprise customer already recognises.

This page is one part of our penetration testing service. Where a finding needs a different kind of engagement to answer properly, we say so in the report rather than selling you the test we happen to be running.

// faq

Common questions

What do you need to test our API?

Base URLs, two accounts at each permission level, and written authorisation. A Postman collection, an OpenAPI or GraphQL schema speeds things up considerably, but we can work without one by watching the real clients and discovering the rest.

Why do you insist on two accounts?

Because the most common serious API finding is broken object-level authorisation, and you cannot demonstrate it with a single login. With two accounts we can ask for one customer’s records as the other and show you the response, which is very hard to argue with.

Is GraphQL tested differently from REST?

The categories are the same but the attacks are not. GraphQL adds introspection, deeply nested and recursive queries, aliasing and batching, and authorisation that has to hold at every resolver rather than once at the endpoint. We test all of it.

Can you test an API that is only used by our mobile app?

Yes, and we would recommend it. We capture the real traffic from the app, build the inventory from that, and then test the API directly - which is exactly what an attacker does once they have your app on a phone they control.

Will the test knock our API over?

No. Resource-exhaustion testing is done carefully and by agreement, usually against a non-production environment, and we stop at the point where the issue is proved rather than the point where something falls over.

// start here

Let's protect your business together.

Tell us what you need tested. Our team will reply with a clear scope and quote.

By submitting, you agree to our Terms of Use and Privacy Statement.