Markdown Editor

API Security Review Template (OWASP API Top 10 2023, ASVS 5.0)

API scope, method and rating, inventory and shadow endpoints, trust boundaries, API1 to API10 review, ASVS 5.0 API checklist, findings, decision, retest

Kỹ thuật bảo mậtĐầy đủOWASP API Security Top 10 2023; OWASP ASVS 5.0.0CC BY-SA 4.0apireview
Mở trong editorTải .md

Cách dùng: Use it to review one API release against the OWASP API Security Top 10 2023 and the API chapters of ASVS 5.0.0. Fill the inventory from spec, gateway and traffic first, then work risk by risk with two users and two tenants. The main pitfall is testing only the documented endpoints while shadow and older versions stay reachable.

Xem trước

API Security Review: [API name and version]

Security review record for one API (REST, GraphQL, gRPC gateway or WebSocket): scope and context, review method and evidence, API inventory and exposure, data flow and trust boundaries, a structured review against each of the ten risks of the OWASP API Security Top 10 2023, a checklist of the API-relevant chapters of the OWASP Application Security Verification Standard (ASVS) 5.0.0 (May 2025), a scored findings register, risk summary, remediation plan, retest and sign-off. Versions as checked in October 2026. The questions, structure and examples are original. Replace every [bracketed] value and every row marked Example.

Document control

FieldValue
Document ID[APISR-2026-001]
Version[1.0]
Status[Draft / In review / Approved / Superseded]
Owner (API product owner)[@api-owner]
Reviewer(s)[@appsec-reviewer], [@second-reviewer]
Approvers[@engineering-lead], [@security-lead]
Last updatedYYYY-MM-DD
Classification[Confidential: contains unremediated findings]
API under review[Parcel Booking API] version [2.4.0]
Review type[Design / Pre-release / Periodic / Post-incident]
Review windowYYYY-MM-DD to YYYY-MM-DD
BaselinesOWASP API Security Top 10 2023; OWASP ASVS 5.0.0, target level [L2]
Related threat model[TM-API-007]

Approvals

RoleNameDecisionDate
Lead reviewer[@name][Submitted]YYYY-MM-DD
API product owner[@name][Accepted / Accepted with conditions / Rejected]YYYY-MM-DD
Security lead[@name][Approved / Changes requested]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]Scope and inventory drafted
0.9YYYY-MM-DD[@name]Example: Review complete, 10 findings recorded
1.0YYYY-MM-DD[@name]Example: Owner decision and remediation dates agreed
1.1YYYY-MM-DD[@name]Example: Retest results for APISR-001 to APISR-003 added

Contents

1. Scope and context

ItemValue
API style[REST over HTTPS / GraphQL / gRPC with HTTP gateway / WebSocket]
Specification[OpenAPI 3.1 document parcel-booking-v2.yaml, commit [hash]]
ConsumersExample: Customer web app, Android and iOS apps, 14 partner integrations, internal pricing service
AuthenticationExample: OAuth 2.0 authorization code with PKCE for apps, client credentials for partners, JWT access tokens (15 minutes)
Data classesExample: Personal data (names, addresses, phone numbers), commercial data (rates, contracts)
Hosting and gateway[Cloud region], [API gateway product and version], [WAF]
Environments reviewed[Staging with production configuration; read-only checks in production]
TenancyExample: Multi-tenant: one partner must never see another partner's shipments
Business criticality[High: booking outage stops dispatch]

In scope: [all operations under /v2/, the webhook delivery service, the GraphQL tracking endpoint, gateway policies, token validation].

Out of scope (with reason): [the identity provider itself (reviewed in IAM review IAM-2026-03), the mobile app binaries (covered by the mobile app security assessment), denial-of-service load testing (scheduled separately)].

Rules of engagement: testing accounts [list], allowed time windows, production actions limited to [read-only requests with test tenants], emergency contact [@on-call].

2. Method, evidence and rating

The review combines four evidence sources. Record which ones you used for each risk in section 5.

SourceWhat it showsUsed
Specification reviewDeclared operations, schemas, security schemes, scopes[Yes / No]
Code and configuration reviewAuthorization checks, field binding, outbound calls, gateway policies[Yes / No]
Dynamic testingBehaviour with two users and two tenants, manipulated IDs, fields, rates[Yes / No]
Production telemetryOperations actually called, versions in use, error and rate patterns[Yes / No]

Rating method. Rate each finding for likelihood (1 to 5) and impact (1 to 5) and multiply them. Use your organisation's risk method if it has one, and record the mapping here.

Score (likelihood x impact)SeverityTarget fix time (Example policy)
20 to 25CriticalBefore release, or 7 days in production
10 to 16High30 days
5 to 9Medium90 days
1 to 4LowNext planned release

Where your vulnerability management policy requires CVSS, add a CVSS v4.0 vector in the finding detail and keep this score as the business rating. Test accounts used: [User A in Tenant 1, User B in Tenant 1, User C in Tenant 2, Partner client P1, administrator ADM1].

3. API inventory and exposure

Host and base pathVersionStatusAudienceIn specIn gatewaySeen in traffic (30 days)Owner
Example: api.[example].com/v22.4.0CurrentPublic and partnersYesYesYes[@booking-team]
Example: api.[example].com/v11.9.3Deprecated (sunset YYYY-MM-DD)PartnersNoYesYes (2 partners)[@booking-team]
Example: api.[example].com/graphqln/aCurrentWeb appPartlyYesYes[@tracking-team]
Example: staging-api.[example].com2.5.0-rcPre-releaseInternaln/aYesYes (from internet)[@platform-team]

Example counts for the /v2 surface: 46 operations were seen in gateway logs over 30 days and 41 of them are in the specification, so 5 operations (10.9%) are undocumented and documentation covers 89.1% of the live surface. Each undocumented operation is listed below and either documented, retired or raised as a finding.

OperationWhy undocumentedDecision
Example: GET /v2/admin/rates/exportInternal tool routeMove behind internal gateway (APISR-004)
Example: POST /v2/debug/replayLeft from incident analysisRemove (APISR-004)

4. Data flow and trust boundaries

BoundaryCrossingControl expectedEvidence
TB1 Internet to gatewayClient requestTLS, token validation, rate limits, schema validation[Gateway policy file, test results]
TB2 Gateway to serviceVerified claimsService re-checks authorization; does not trust client-supplied headers[Code reference]
TB3 Service to third partyOutbound requestTLS validation, timeouts, response validation[Code reference]
TB4 Webhook to customer URLOutbound request to user-supplied URLAllow-list, private address blocking, no redirects[Code reference]

5. Review against the OWASP API Security Top 10 2023

The OWASP API Security Top 10 2023 is still the current edition of the list as of October 2026 (owasp.org/API-Security). Risk IDs and short names are cited for mapping.

5.1 API1:2023 Broken Object Level Authorization

Questions:

  • Does every operation that takes an object identifier (path, query, body, header) check that the caller may access that specific object, in the service and not only in the client?
  • With User A's token, can you read, change or delete an object that belongs to User C in another tenant by changing the identifier?
  • Are identifiers random, and does the design still check authorization (random IDs reduce guessing, they do not replace the check)?
  • Are bulk and list operations filtered by the caller's tenant on the server?

ASVS 5.0.0: 8.2.2, 8.3.1, 8.4.1. Result: Example: Finding APISR-001 (GET /v2/shipments/{id} returns another tenant's shipment).

5.2 API2:2023 Broken Authentication

Questions:

  • Which operations accept no authentication, and is each one intended (list them)?
  • Are access tokens validated for signature, allowed algorithm, issuer, audience and expiry on every request?
  • Are credential and token endpoints protected against brute force and credential stuffing?
  • How long do access and refresh tokens live, and can they be revoked?

ASVS 5.0.0: 6.3.1, 9.1.1, 9.1.2, 9.2.1, 9.2.3, 10.3.1. Result: Example: Finding APISR-009 (partner access tokens valid for 24 hours, no revocation).

5.3 API3:2023 Broken Object Property Level Authorization

Questions:

  • Do responses return only the fields the caller may see, or whole database objects filtered by the client?
  • Can a caller set fields they should not control (role, price, status, owner, tenant) by adding them to a request body?
  • Are read and write field rules documented per role?

ASVS 5.0.0: 8.1.2, 8.2.3, 15.3.1, 15.3.3. Result: Example: Finding APISR-002 (PATCH /v2/accounts/{id} accepts role).

5.4 API4:2023 Unrestricted Resource Consumption

Questions:

  • Are there limits on request rate, payload size, page size, upload size, query depth and execution time?
  • Which operations trigger paid third-party calls (SMS, email, maps, rating engines), and is each one limited per caller?
  • Do timeouts and limits exist on outbound calls so a slow partner cannot exhaust threads?

ASVS 5.0.0: 2.4.1, 4.3.1, 15.1.3, 15.2.2. Result: Example: Finding APISR-003 (POST /v2/quotes calls a paid rating engine without a per-client limit).

5.5 API5:2023 Broken Function Level Authorization

Questions:

  • Can a normal user call administrative operations by guessing paths or changing the HTTP method?
  • Are administrative operations on a separate path, audience or gateway, with role checks in the service?
  • Are unused HTTP methods rejected?

ASVS 5.0.0: 8.2.1, 4.1.4, 8.4.2. Result: Example: Pass for /v2/; admin export route covered by APISR-004.

5.6 API6:2023 Unrestricted Access to Sensitive Business Flows

Questions:

  • Which business flows would hurt the business if automated at scale (booking scarce slots, creating accounts, redeeming credits, scraping prices)?
  • What limits each flow (per account, per device, per payment instrument), and is the limit enforced on the server?
  • Do high-value flows need step-up authentication or a second approver?

ASVS 5.0.0: 2.3.2, 2.3.4, 2.3.5, 2.4.1. Result: Example: Pass: pickup slot booking is locked per slot and limited to 20 bookings per account per hour.

5.7 API7:2023 Server Side Request Forgery

Questions:

  • Where does the API fetch a URL supplied or influenced by the caller (webhooks, image import, document fetch, OAuth metadata)?
  • Is the destination checked against an allow-list of schemes, hosts and ports, with private, link-local and metadata addresses blocked after DNS resolution?
  • Are redirects disabled for outbound calls unless needed?

ASVS 5.0.0: 1.3.6, 15.3.2. Result: Example: Finding APISR-005 (webhook URL accepts http://169.254.169.254).

5.8 API8:2023 Security Misconfiguration

Questions:

  • Are TLS settings, CORS policy, security headers and content types correct on every host?
  • Do error responses hide stack traces, framework versions and internal hostnames?
  • Are debug modes, introspection and documentation endpoints disabled or protected in production where not meant to be public?

ASVS 5.0.0: 4.1.1, 4.3.2, 12.2.1, 13.4.2, 13.4.5, 13.4.6, 16.5.1. Result: Example: Findings APISR-006 (GraphQL introspection enabled) and APISR-007 (stack traces in 500 responses).

5.9 API9:2023 Improper Inventory Management

Questions:

  • Does the inventory in section 3 match the specification, gateway and traffic?
  • Do deprecated versions have a sunset date, an owner and the same controls as current versions?
  • Are non-production hosts reachable from the internet, and do they hold production data?

ASVS 5.0.0: 13.1.1, 13.4.5, 15.2.3. Result: Example: Finding APISR-004 (five undocumented operations, including a debug route).

5.10 API10:2023 Unsafe Consumption of APIs

Questions:

  • Which third-party APIs does this API call, and is each response validated against a schema and treated as untrusted input?
  • Are TLS certificates of partners validated, and are redirects from partners refused?
  • What happens if a partner returns a huge, slow or malformed response?

ASVS 5.0.0: 1.2.4, 12.3.2, 13.1.3, 15.3.2. Result: Example: Finding APISR-008 (carrier client disables certificate validation in one code path).

5.11 Summary of results

RiskResultFinding IDs
API1:2023Example: FindingAPISR-001
API2:2023Example: FindingAPISR-009
API3:2023Example: FindingAPISR-002
API4:2023Example: FindingAPISR-003
API5:2023Example: Pass(see APISR-004 for admin route)
API6:2023Example: Passnone
API7:2023Example: FindingAPISR-005
API8:2023Example: FindingAPISR-006, APISR-007
API9:2023Example: FindingAPISR-004
API10:2023Example: FindingAPISR-008

6. ASVS 5.0.0 API checklist

ASVS 5.0.0 has 17 chapters (V1 to V17). The API-relevant sections are listed below with an original one-line description of what to check. Read the requirement text in ASVS itself.

ASVS sectionWhat to check (own wording)ResultFinding
V4.1 Generic Web Service SecurityCorrect content types, header handling through intermediaries, only supported HTTP methodsExample: Pass
V4.2 HTTP Message Structure ValidationConsistent message framing across proxies, no request smuggling, safe outbound request buildingExample: Pass
V4.3 GraphQLQuery cost, depth or allow-list limits, introspection off where not publicExample: FindingAPISR-006
V4.4 WebSocketWSS only, origin check on handshake, dedicated session tokens[N/A: no WebSocket]
V8.1 to V8.4 AuthorizationDocumented function, object and field rules, enforcement in a trusted layer, cross-tenant isolationExample: FindingAPISR-001, APISR-002
V9.1 and V9.2 Self-contained TokensSignature check, algorithm allow-list, trusted keys, expiry, type and audience checksExample: FindingAPISR-009
V10.3 OAuth Resource ServerAccepts only tokens meant for this API, decisions based on token claims and scopesExample: Pass
V2.3 and V2.4 Business Logic and Anti-automationStep order, business limits, locking of scarce resources, anti-automationExample: FindingAPISR-003
V1.2 and V1.3 Injection and SanitizationParameterised queries, SSRF protection on outbound URLsExample: FindingAPISR-005
V12.2 and V12.3 Secure CommunicationTLS for external and service-to-service traffic, certificate validationExample: FindingAPISR-008
V13.4 Unintended Information LeakageDebug off, internal docs and monitoring endpoints not exposed, no version disclosureExample: FindingAPISR-007
V15.3 Defensive CodingField subsets in responses, mass assignment protection, redirects not followedExample: FindingAPISR-002
V16.3 Security EventsAuthentication, authorization failures and control bypass attempts loggedExample: FindingAPISR-010

Example coverage: 13 sections listed, 1 not applicable, 12 reviewed, 3 passed, 9 with at least one finding.

7. Findings register

IDTitleTop 10ASVS 5.0.0OperationLIScoreSeverityOwnerDue
APISR-001 (Example)Shipment read without tenant checkAPI18.2.2, 8.4.1GET /v2/shipments/{id}4520Critical[@booking-team]YYYY-MM-DD
APISR-002 (Example)Role field writable through account updateAPI38.2.3, 15.3.3PATCH /v2/accounts/{id}3412High[@account-team]YYYY-MM-DD
APISR-003 (Example)Paid rating calls not limited per clientAPI42.4.1, 15.2.2POST /v2/quotes4312High[@pricing-team]YYYY-MM-DD
APISR-004 (Example)Undocumented admin and debug routes reachableAPI913.4.5, 15.2.35 operations (section 3)339Medium[@platform-team]YYYY-MM-DD
APISR-005 (Example)Webhook URL can target internal addressesAPI71.3.6PUT /v2/webhooks/{id}2510High[@integration-team]YYYY-MM-DD
APISR-006 (Example)GraphQL introspection enabled in productionAPI84.3.2POST /graphql326Medium[@tracking-team]YYYY-MM-DD
APISR-007 (Example)Stack traces in server error responsesAPI813.4.2, 16.5.1All /v2/ on 500326Medium[@platform-team]YYYY-MM-DD
APISR-008 (Example)Certificate validation disabled in carrier client fallbackAPI1012.3.2Carrier rate client248Medium[@pricing-team]YYYY-MM-DD
APISR-009 (Example)Partner access tokens live 24 hours without revocationAPI29.2.1, 10.4.9Token issuance for partners236Medium[@iam-team]YYYY-MM-DD
APISR-010 (Example)Authorization failures not loggedAPI816.3.2All /v2/224Low[@platform-team]YYYY-MM-DD

Detail for each finding (repeat the block):

FieldAPISR-001 (Example)
DescriptionThe service loads the shipment by ID and returns it without comparing the shipment tenant with the tenant in the access token.
ReproductionWith User C (Tenant 2) token, request a shipment ID created by User A (Tenant 1); the API returns 200 with the full record.
ImpactAny partner can read names, addresses and phone numbers of other partners' customers.
RecommendationEnforce the tenant check in the data access layer for every shipment query; add a cross-tenant test to the API test suite.
ReferencesOWASP API1:2023; ASVS 5.0.0 8.2.2 and 8.4.1
Evidence[Request and response IDs in the test log, redacted]

8. Risk summary and decision

SeverityCount (Example)Share
Critical110%
High330%
Medium550%
Low110%
Total10100%

Example summary: the API has one Critical object level authorization flaw that exposes personal data across tenants, so release is blocked until APISR-001 is fixed and retested. The three High findings (APISR-002, APISR-003, APISR-005) must be fixed before partner onboarding opens. Medium and Low findings follow the target fix times in section 2.

DecisionConditionsDecided byDate
[Release / Release with conditions / Do not release]Example: APISR-001 fixed and retested; APISR-002, APISR-003 and APISR-005 fixed within 30 days[@api-owner]YYYY-MM-DD

Any finding the owner chooses to accept rather than fix needs a security exception with an expiry date, recorded through the security exception request process.

9. Remediation plan and retest

IDFixRegression test addedFixed inRetest dateRetest resultStatus
APISR-001 (Example)Tenant filter in repository layershipments_cross_tenant_test2.4.1YYYY-MM-DDPass: 404 for other tenantClosed
APISR-002 (Example)Explicit allow-list of writable fields per roleaccount_patch_fields_test2.4.1YYYY-MM-DDPassClosed
APISR-003 (Example)Per-client quota of 600 quotes per hour at gatewayGateway policy test2.4.2YYYY-MM-DD[Pending]Open
APISR-005 (Example)Resolve and block private ranges, disable redirectswebhook_ssrf_test2.4.2YYYY-MM-DD[Pending]Open

Preventive actions beyond the individual fixes:

  • Example: Add an authorization test matrix (role x operation x tenant) to the API contract tests.
  • Example: Generate the gateway route list from the specification so undocumented routes fail the build.
  • Example: Add the review checklist in section 6 to the API design review gate.

10. Sign-off and next review

ItemValue
All Critical and High findings closed or excepted[Yes / No]
Residual risk accepted by[@api-owner], YYYY-MM-DD
Next periodic reviewYYYY-MM-DD (at least yearly)
Earlier review triggersNew authentication method, new consumer type (for example AI agents), new tenant model, new third-party dependency, major version, security incident

11. Glossary and references

TermMeaning
BOLABroken object level authorization: access to an object without a check that the caller may access that object
BOPLABroken object property level authorization: reading or writing fields the caller should not see or set
Mass assignmentBinding all request fields to an internal object, including fields the client should not control
SSRFServer-side request forgery: making the server send a request to a destination chosen by the attacker
Shadow APIAn operation that is reachable in production but not documented or owned
Sender-constrained tokenAn access token bound to a key held by the client, so a stolen token alone cannot be used
ReferenceVersion (as checked October 2026)Official page
OWASP API Security Top 102023 (current edition)https://owasp.org/API-Security/editions/2023/en/0x11-t10/
OWASP Application Security Verification Standard5.0.0 (30 May 2025)https://github.com/OWASP/ASVS/releases/tag/v5.0.0_release
OWASP REST Security Cheat SheetLiving documenthttps://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html
OWASP GraphQL Cheat SheetLiving documenthttps://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html

Standard and licence note

Based on the OWASP API Security Top 10 2023 and the OWASP Application Security Verification Standard 5.0.0, both published by the OWASP Foundation under CC BY-SA 4.0. Risk IDs and short names and ASVS chapter, section and requirement numbers are cited for mapping only; the review questions, structure and examples are original and no OWASP description or requirement text is reproduced, so no ShareAlike obligation arises from this template. If you paste OWASP text into your copy, that adapted material is under CC BY-SA 4.0, must credit OWASP and must be shared alike. Check the current OWASP versions at owasp.org before relying on the mapping. Template licence: MIT.

Template liên quan