Skip to content

Checklist

API pentesting checklist for SaaS and software teams

By Lucas Weber, CyberSec42 · Updated 28 Oct 2026

CyberSec42

An API pentest checks whether your interface only returns and only executes what each account is allowed to. It centres on the risks in the OWASP API Security Top 10, currently the 2023 edition: above all broken authorization at object, property and function level, plus missing limits, server-side request forgery and trusting third-party APIs too readily. The single most important test fits in one sentence: with two accounts in two tenants, swap every object ID from one into a request carrying the other's token, and not one request may succeed.

In short.

Why APIs are the main target

Data and logic without going through the UI.

Go to section

OWASP API Top 10

The ten risks of the 2023 edition at a glance.

Go to section

Scope, accounts, environment

What to settle before the first request.

Go to section

The test steps

Concrete, with example requests.

Go to section

Scanners and their limits

What automation covers and what it misses.

Go to section

The report

What every finding has to include.

Go to section

Why APIs are the main target

In a SaaS product, the user interface is just one client among several. The web front end, the mobile app and customer integrations all talk to the same API, and whatever the interface hides, the API may still return. An attacker opens the browser's developer tools, sees the requests with their IDs and tokens, and replays them with changes. No known library vulnerability is required.

That is why the typical API weaknesses are not exotic coding bugs but gaps in business logic:

For SaaS vendors, the first item weighs heaviest. If one customer can read another customer's data through the API, the trust promise of the whole platform is broken.

The OWASP API Security Top 10 (2023 edition)

Alongside its well-known Top 10 for web applications, the Open Worldwide Application Security Project (OWASP) publishes a separate list for APIs. The first edition appeared in 2019, the current second edition in 2023. No newer edition has been published on the project site as of 28 October 2026. According to the release notes, no data was contributed for the 2023 edition; the list rests on the project team's experience, review by API security specialists and community feedback. It is an awareness document, not a testing standard with a pass mark.

No.RiskWhat the test checks
API1Broken Object Level AuthorizationSwapping object IDs between accounts and tenants
API2Broken AuthenticationLogin, password reset, token validation, brute-force protection
API3Broken Object Property Level AuthorizationToo many fields in responses, writable fields such as role (mass assignment)
API4Unrestricted Resource ConsumptionRate limits, page sizes, upload caps, spending limits on third-party services
API5Broken Function Level AuthorizationAdmin functions with a regular account, alternative HTTP methods
API6Unrestricted Access to Sensitive Business FlowsAutomated abuse of flows such as purchase, booking or invitation
API7Server Side Request ForgerySteering user-supplied URLs to internal targets
API8Security MisconfigurationTLS, CORS, error messages, unnecessary methods, missing hardening
API9Improper Inventory ManagementOld API versions, exposed test and staging hosts, documentation gaps
API10Unsafe Consumption of APIsValidation of data, redirects and timeouts when calling external APIs

Compared with 2019, OWASP merged "Excessive Data Exposure" and "Mass Assignment" into API3, because both share a root cause: missing authorization at the level of individual properties. API6 and API10 are new in 2023.

How an API pentest works

We cover the general flow of a penetration test, from sign-off to retest, in a separate article: Penetration testing: process, duration and cost. This section is about what is different with APIs. Three things decide how meaningful the test will be.

Scope: specification and inventory

The starting point is an up-to-date description of the interface, usually an OpenAPI specification (formerly Swagger), or the schema for GraphQL. It lists every endpoint, parameter and expected response, which makes the test plannable. Just as important is what the specification leaves out. Under API9, OWASP explicitly names old versions, forgotten hosts and missing documentation as a risk. So agree in writing:

Roles and test accounts per tenant

Without the right test accounts, an API pentest stays on the surface. A multi-tenant application needs at least two separate tenants, one account per relevant role in each, and real test data in each account, meaning created objects such as projects, invoices or documents. Only then can you check whether tenant A reaches tenant B's objects and whether a basic role reaches the functions of a higher one.

AccountTenantRolePurpose in the test
A-AdminAAdministratorcreates objects, baseline for permitted functions
A-UserAbasic roleprivilege escalation within the tenant
B-AdminBAdministratoraccess across the tenant boundary
B-UserBbasic roleboth combined
unauthenticatednonenonewhat is reachable without a token

Environment

A staging environment that matches production in code, configuration and upstream components such as the API gateway and web application firewall works best. If it differs, the test examines a different system. Under API9, OWASP advises against using production data in non-production environments and, where that cannot be avoided, protecting them like production. Payment, email and SMS providers should run in test mode so that checks for API4 and API6 do not trigger real costs or messages.

A note for anyone testing in-house: only test systems for which the operator has given written authorization. That includes connected third-party APIs you do not own.

The test steps in detail

The following steps follow the OWASP API Security Top 10 and the "API Testing" chapter of the OWASP Web Security Testing Guide. The example paths are made up and stand for patterns found in many APIs.

1. Object access: swap IDs between tenants (API1)

The most important single test. Account A creates an object, say an invoice. The same request is then sent with account B's token:

GET /api/v2/invoices/8f3c… with Authorization: Bearer <B-User token>

2. Properties and mass assignment (API3)

3. Function level: roles and methods (API5)

4. Authentication and tokens (API2)

5. Limits and sensitive flows (API4, API6)

6. Server-side request forgery (API7)

Wherever the API fetches a user-supplied URL, for example webhook targets, import by link, image from URL or link previews:

7. Configuration and inventory (API8, API9)

8. Third-party APIs (API10)

The checklist

AreaCheck
PreparationCurrent OpenAPI specification or GraphQL schema, hosts and versions in the written scope
PreparationTwo tenants, one account per role, test data created, payment and messaging in test mode
Object accessEvery object ID swapped with the other tenant's token, for every method
Object accessLists, filters and exports limited to your own tenant
PropertiesNo surplus fields in responses, role and tenant not writable by request
FunctionsAdmin functions refused for basic roles and without a token, method switching tested
AuthenticationToken signature and expiry validated, brute-force protection on login, reset and one-time codes
LimitsRate limits, maximum page size, upload caps, spending limits on third-party services
FlowsSensitive business flows limited against automated abuse
SSRFFetching user URLs restricted to allowed targets, no redirects, no raw responses
ConfigurationTLS, CORS, error messages, unnecessary methods disabled
InventoryOld versions and test hosts switched off or equally protected
Third-party APIsIncoming data validated, webhook signatures checked, timeouts set

What automated scanners find, and what they miss

API scanners and fuzzers are useful, and a good test uses them. They work through the specification, send altered input and compare responses against known patterns. That reliably covers one class of flaws. Authorization logic is not part of it.

A scanner usually findsNeeds human testing
Missing TLS, loose CORS rules, verbose error messagesWhether object 8f3c… belongs to tenant A and must stay hidden from B
Known vulnerabilities in server componentsWhether a basic role may not call a function that technically works
Obvious injection patterns in parametersWhich response fields are sensitive and which may be writable
Unauthenticated endpoints, exposed documentationWhether a business flow can be abused without any error occurring

The reason is simple: a 200 with data looks correct to a scanner. Whether that data belongs to the requesting account is not in the response; it is in your application's business rules. Only someone who knows which account belongs to which tenant, and who cross-checks the request with two accounts, can judge it. OWASP says as much for function level flaws: the best way to find them is a deep analysis of the authorization mechanism with the role and group hierarchy in mind. For how an automated vulnerability assessment differs from a penetration test overall, see Vulnerability assessment: what it is and when you need one.

For your engineering team, there is a practical upside: the swap test from step 1 can become an automated test in your own pipeline. OWASP recommends writing tests for the authorization mechanism and not shipping changes that make them fail. The pentest finds the gaps; the regression test keeps them from coming back.

What the report should contain

An API pentest report is useful when your engineers can reproduce every finding without asking. For each finding it should include:

Add a management summary, the coverage (which endpoints and roles were tested and which were not) and a retest of the fixes.

API pentest or SaaS pentest?

For many SaaS products the API is the largest part of the attack surface, but not the only one. Tenant isolation also concerns file storage, background jobs, search indexes, exports and support access. If your goal is to show an enterprise customer that no tenant can see another tenant's data, a SaaS penetration test focused on tenant isolation is the right frame, with the API review at its core. For a public or partner API without its own interface, an API pentest on its own is often enough.

Does your API hold the tenant boundary?

We test your API within a scope agreed in writing, along the OWASP API Security Top 10: object and function level authorization with test accounts across several tenants, mass assignment, authentication and tokens, limits, SSRF and how you consume third-party services. Every finding comes with the reproducible request as evidence and a concrete fix. Learn more about SaaS penetration testing and penetration testing.

Request an API pentest

CyberSec42 is an independent technical security assessment, not an accredited certification body, and does not provide legal advice. CyberSec42 is not affiliated with the OWASP Foundation.

Frequently asked questions

What is an API pentest?

A penetration test that examines a programming interface directly, without going through the user interface. The core question is whether each account reaches only the objects and functions it is entitled to. It is usually based on the OWASP API Security Top 10 and a specification such as OpenAPI.

Which edition of the OWASP API Security Top 10 is current?

The 2023 edition. It is the second edition, following the first in 2019. As of 28 October 2026, no newer edition has been published on the OWASP project site.

What is BOLA?

Broken Object Level Authorization: the API does not check whether the requested object belongs to the requesting account. Anyone who swaps the ID in a request gets someone else's data. OWASP ranks BOLA as risk number one on the API list.

Is an automated API scanner enough?

A scanner helps with misconfigurations and known patterns. It cannot judge whether an object belongs to another tenant or whether a role may use a function. That requires testing with several accounts and knowledge of the business rules.

Should we test in production or staging?

Usually in a staging environment that matches production in code and configuration, with test data instead of customer data and with payment and messaging providers in test mode. Any differences from production should be known in advance and noted in the report.

What do you need from us for an API pentest?

A current specification of the interface, test accounts per role in at least two tenants with test data in place, access to the test environment, written authorization with the scope, and a contact person for the duration of the test.

Further reading

Sources