Skip to content
Talk to a Security Expert
API PENETRATION TESTREST & GRAPHQLSAMPLE REPORT

API Penetration Testing Report — Sample

API Penetration Testing Report — REST & GraphQL Security Assessment. A fictional authenticated API penetration test of the OrionSphere Enterprise Platform, a fictional enterprise SaaS/FinTech infrastructure platform operated by OrionSphere Technologies, Inc., showing how TMG Security structures scope, methodology, attack-surface mapping, findings, risk analysis, and remediation guidance for a combined REST and GraphQL API security assessment.

Illustrative Sample Fictional Organization Not an Actual Client Assessment

OrionSphere Technologies, Inc. and the OrionSphere Enterprise Platform are fictional. No real production system was built, deployed, accessed, scanned, or tested, and no real client environment or customer data was involved in the creation of this document.

01 · OVERVIEW

Overview

An API penetration test is an authorized, hands-on security assessment in which testers actively attempt to identify and manually validate exploitable weaknesses across an organization's REST and GraphQL interfaces — object- and function-level authorization, tenant isolation, business logic, and GraphQL resolver security — going beyond automated scanning or fuzzing to confirm which weaknesses are real, how they manifest across interfaces, and what they mean for the business. The result is a report that gives engineering and security leadership a prioritized, evidence-based roadmap for remediation.

This sample report shows how TMG Security structures that deliverable for a combined REST and GraphQL engagement. It is built around the OrionSphere Enterprise Platform, a fictional enterprise SaaS/FinTech infrastructure platform operated by OrionSphere Technologies, Inc., a fictional organization headquartered in New York, New York, and covers a simulated one-month assessment window of 01–31 August 2026.

Assessment TypeAPI Penetration Test — REST & GraphQL (Illustrative)
Assessment Period01 August – 31 August 2026 (Fictional)
Report Date15 September 2026 (Fictional)
ClassificationConfidential — Sample / Demonstration
OrganizationOrionSphere Technologies, Inc. (Fictional Entity)
PlatformOrionSphere Enterprise Platform (Fictional)
Industry / HQEnterprise SaaS / FinTech Infrastructure · New York, NY, USA
Overall Illustrative PostureRequires Remediation
02 · WHAT THIS SAMPLE DEMONSTRATES

What this sample demonstrates

OrionSphere Technologies, Inc. and the OrionSphere Enterprise Platform do not exist. Every finding, test case, endpoint, operation, and figure in this sample is fictional and constructed to show TMG's methodology and reporting standard for a combined REST and GraphQL API penetration test — not to describe any real organization's security posture.

  • How TMG defines scope, rules of engagement, and testing objectives across parallel REST and GraphQL surfaces
  • How REST endpoints are enumerated and how a GraphQL schema is discovered and mapped
  • How authentication, session/token security, and role-based authorization are tested across both interfaces
  • How object-level authorization (BOLA), function-level authorization (BFLA), field-level authorization, and tenant isolation are validated consistently between REST and GraphQL
  • How GraphQL-specific risk — resolver authorization, nested-query authorization, introspection, query complexity/depth, and batching/aliases — is assessed
  • How business logic, webhook security, and API server-side controls are tested
  • How findings are rated for severity, evidenced, and root-caused with clear remediation guidance
  • How a remediation roadmap, management action plan, and retest recommendations are structured for engineering follow-through
03 · APPLICATION & API PROFILE

Application & API profile

The fictional OrionSphere Enterprise Platform is a multi-tenant enterprise SaaS/FinTech infrastructure platform serving approximately 4.2 million fictional registered customers across roughly 1,200 fictional employees' worth of operations. It exposes a versioned REST API (/api/v1/, with a subset of resources additionally available under /api/v2/) covering authentication, users, organizations and members/roles, accounts, transactions, invoices, subscriptions, files, notifications, webhooks, reports, and platform administration — alongside a single-endpoint GraphQL API (/graphql) modeling the same domain across Organization, User, Member, Role, Account, Transaction, Invoice, Subscription, Payment, File, Notification, Webhook, AuditEvent, Report, and Admin types, accessed through seven fictional API roles: Visitor, Standard User, Billing User, Manager, Support Agent, Administrator, and API Integration User.

The fictional technology stack pairs a Node.js/Express REST layer with a Node.js GraphQL server using a resolver-per-field execution model, a shared PostgreSQL data store, and a JWT access-token plus rotating refresh-token architecture (with independent API-key authentication for machine-to-machine integrations), deployed on an AWS-style fictional cloud environment behind a fictional cloud-based CDN/API gateway, with fictional object storage and centralized logging/audit-event infrastructure.

Registered Customers~4.2 million (Fictional)
Employees~1,200 (Fictional)
REST APIapi.orion-example.com (Fictional, non-resolving)
GraphQL APIgraphql.orion-example.com/graphql (Fictional, non-resolving)
AuthenticationJWT access token + rotating refresh token; API-key for integrations
InfrastructureAWS-style cloud + CDN/API gateway (Fictional)
04 · TESTING SCOPE & RULES OF ENGAGEMENT

Testing scope & rules of engagement

In scope

  • All /api/v1/* and /api/v2/* REST endpoints supporting the platform
  • The full /graphql schema — Query, Mutation, and Subscription root types
  • Authentication — login, refresh, logout, MFA, MFA recovery, API-key issuance
  • Authorization — role enforcement, object-, function-, and field-level access control, tenant isolation
  • GraphQL resolver security — root and nested resolver authorization, schema introspection, query complexity/depth
  • Organization management, billing workflows, file/object APIs, and webhook configuration and delivery

Out of scope

  • Denial-of-service testing, including GraphQL resource-exhaustion exploitation — not performed under any circumstances
  • Destructive testing, including destructive race-condition automation
  • Social engineering and physical security
  • Production infrastructure, third-party systems, and cloud-provider internals — testing restricted to the fictional staging environment

Testing was strictly non-destructive and used only the dedicated fictional test accounts listed in Appendix F of the full report — no real user accounts, API keys, or customer data were used at any point. GraphQL testing used only safe, synthetic queries and fictional test objects; no bulk-extraction technique or automated resource-exhaustion exploitation was performed, and no real customer data was accessed, used, or referenced during the engagement.

05 · METHODOLOGY

Methodology

TMG Security's API testing approach is conceptually informed by industry-recognized frameworks, including OWASP API Security guidance, OWASP GraphQL Security guidance, and the OWASP Web Security Testing Guide. TMG Security is not affiliated with or certified by OWASP, and no copyrighted material from these references is reproduced in this report — they are cited only as conceptual grounding for TMG's own methodology.

Testing followed a 26-stage illustrative lifecycle spanning both disciplines: reconnaissance and attack-surface discovery, REST API enumeration, GraphQL schema discovery, authentication and authorization testing, object-, function-, and field-level authorization and tenant-isolation testing, session and token security, REST and GraphQL input validation and injection testing, REST and GraphQL data-exposure and mass-assignment testing, GraphQL introspection, query-complexity/depth, batching/alias, resolver and mutation-security testing, subscription security, API rate limiting, business-logic testing, webhook and file/object API testing, configuration and abuse-case testing, manual vulnerability validation, and structured reporting with retest planning. Every candidate finding was manually validated by a TMG Security fictional tester before inclusion — no automated-scanner output was included without manual confirmation.

06 · API ATTACK SURFACE DISCOVERY

API attack surface discovery

TMG Security mapped the fictional OrionSphere Enterprise Platform's combined REST and GraphQL attack surface before beginning role-based testing, combining authenticated browsing, GraphQL introspection (available in this fictional staging environment), published API documentation, and systematic parameter/route enumeration. The result is a total logical API attack surface of 218 interfaces and operations across four categories.

Illustrative attack surface inventory — fictional sample data.
CategoryCount
REST Endpoints126
GraphQL Operations (Queries + Mutations + Subscriptions)78
GraphQL Types41
Webhook Callback Operations14
Total Logical API Attack Surface218
07 · REST API ENUMERATION & GRAPHQL SCHEMA DISCOVERY

REST API enumeration & GraphQL schema discovery

TMG Security enumerated the fictional REST surface through authenticated browsing across all seven roles, review of the published OpenAPI/Swagger documentation, and systematic testing of resource, sub-resource, and legacy-route variants — producing a complete 126-row REST endpoint register. In parallel, TMG Security mapped the fictional GraphQL schema using a combination of introspection, the published GraphQL documentation portal, and manual query construction validated against observed responses — producing a complete 78-row GraphQL operation register spanning 41 types.

Why REST and GraphQL together: the OrionSphere platform exposes materially the same underlying objects through both interfaces, so TMG Security tested REST and GraphQL representations of the same objects in parallel to identify inconsistent authorization enforcement between them. This proved to be the single most significant pattern in this assessment — several of the highest-severity findings (including API-001 and API-003) are reproducible through both interfaces, while others (API-002, API-007, API-008, API-011) are GraphQL-specific weaknesses that a REST-only assessment would not surface. Authorization consistency between REST and GraphQL matters because both interfaces converge on the same shared resolver/service layer, and a control implemented for one interface but not ported to the other creates a direct authorization-downgrade path.

Representative fictional REST endpoints — full 126-row register in the sample PDF, Appendix B.
EndpointMethodResult
/api/v1/organizations/{id}GETFinding
/api/v1/invoices/{id}PATCHFinding
/api/v1/organizations/{id}/roles/{userId}PATCHFinding
/api/v1/files/{id}GETFinding
/api/v1/webhooks/validatePOSTFinding
/api/v1/reports/{id}/commentsPOSTFinding
/api/v1/auth/loginPOSTClean
/api/v2/accounts/{id}GETClean
Representative fictional GraphQL operations — full 78-row register in the sample PDF, Appendix C.
OperationTypeResult
organization(id)QueryFinding
updateOrganizationBilling(id, input)MutationFinding
organization.members.billing (nested)Query (nested)Finding
user(id)QueryFinding
updateMemberRole(orgId, userId, role)MutationFinding
meQueryClean
__schemaQuery (introspection)Finding
08 · AUTHENTICATION & SESSION / TOKEN SECURITY TESTING

Authentication & session/token security testing

TMG Security assessed the fictional OrionSphere authentication surface — credential login, refresh-token issuance and rotation, logout, MFA challenge/verification, and MFA account recovery — across both the REST API and the shared authentication service used by the GraphQL gateway, along with token lifecycle (issuance, rotation, expiration, revocation on logout) across both REST-issued and GraphQL-consumed tokens. Credential-based login correctly rejects invalid attempts with a generic error and enforces MFA where enrolled, and refresh-token rotation and expiration enforcement both operate as expected. Two gaps were confirmed: the MFA account-recovery flow does not bind a recovery confirmation code to its originating recovery request, allowing a code issued for one request to be accepted against a second, concurrently pending request on the same account; and token revocation on logout is not fully synchronous, leaving a narrow validity window during which a just-invalidated token remains technically usable.

API-005 · HIGH · CWE-640 Weak Password Recovery Mechanism

Account Recovery API Weakness

The MFA-recovery confirmation step (POST /api/v1/auth/mfa/recovery) accepts a confirmation code that is not bound to the specific recovery request that generated it, allowing an already-authenticated low-privilege session to complete a recovery flow intended for a different, concurrently pending request. Recommendation: bind each confirmation code to its originating recovery-request ID and invalidate superseded pending requests when a new one is created.

CVSS-style: 7.7 (High) · Owner: Identity & Access Lead (Fictional Role) · Target: 29 Oct 2026 · Status: Open

09 · AUTHORIZATION TESTING — BOLA, BFLA, FIELD-LEVEL & TENANT ISOLATION

Authorization testing — BOLA, BFLA, field-level & tenant isolation

Authorization testing was the most significant category in this fictional assessment, covering object-level authorization (BOLA), function-level authorization (BFLA), field-level authorization, and tenant isolation across all seven fictional roles, on both REST endpoints and their GraphQL equivalents. General role-boundary enforcement was found to be consistently applied at the root/entry-point level across both interfaces — the material exceptions are concentrated in these four dedicated categories. Object-level authorization testing confirmed a cross-tenant gap reproducible through both the REST organization endpoint and its GraphQL equivalent, the most severe finding in this report given its consistency across both interfaces. Function-level testing confirmed that a GraphQL billing mutation intentionally hidden from the UI remains callable by non-administrative roles, and that a role-change mutation insufficiently validates the caller's own authority over the target organization, enabling a privilege-escalation path. Tenant isolation requires enforcement at the resolver/service layer, not the presentation layer — flat, root-level tenant checks were consistently enforced, but the confirmed gaps are concentrated where tenant context must be re-derived deeper in the object graph or workflow.

API-001 · CRITICAL · CVSS-style 9.1 · CWE-639 Authorization Bypass Through User-Controlled Key

Cross-Tenant BOLA Across REST and GraphQL Objects

Both the REST organization-profile endpoint (GET /api/v1/organizations/{id}) and the equivalent GraphQL organization(id) query accept a client-supplied object identifier and return the corresponding organization record without verifying that the requesting user's session is associated with that organization. Neither handler performs a server-side ownership check between the authenticated session and the requested object; both rely solely on the client-supplied identifier — indicating the tenant-ownership check is missing at the shared service layer rather than in either interface individually. Recommendation: implement a single, centrally enforced tenant-scoping check so REST and GraphQL inherit the same authorization guarantee.

Owner: VP Engineering (Fictional Role) · Target: 15 Oct 2026 · Status: Remediation In Progress

API-011 · HIGH · CVSS-style 7.6 · CWE-269 Improper Privilege Management

Privilege Escalation Through Role Mutation

The GraphQL updateMemberRole mutation checks that the requesting user is authenticated and belongs to the organization, but does not additionally verify the requester's own role is authorized to grant the requested target role — a fictional Standard User account successfully updated its own role to Manager. Recommendation: add explicit requester-role authorization to the role-update resolver and disallow self-targeted role changes entirely.

Owner: Identity & Access Lead (Fictional Role) · Target: 29 Oct 2026 · Status: Remediation In Progress

10 · REST & GRAPHQL INPUT VALIDATION, INJECTION & DATA EXPOSURE TESTING

REST & GraphQL input validation, injection & data exposure testing

TMG Security tested SQL/NoSQL-injection-style, command-injection-style, template-injection-style, and cross-site-scripting-style fictional payloads across REST parameters, GraphQL arguments, and free-text fields, using only safe, non-destructive markers. Database- and OS-level injection classes were not reproducible against the fictional target; parameterized queries and consistent input sanitization were observed throughout. The one confirmed injection-class finding is a stored cross-site scripting condition in API-supplied support content. Separately, REST and GraphQL data-exposure testing reviewed response payloads across all resource groups for fields returned beyond what the requesting role's function requires — REST input handling and structural validation were found generally sound, while a field-level authorization gap (detailed in Section 09) allows both interfaces to over-serialize sensitive fields to non-privileged roles.

API-004 · HIGH · CVSS-style 8.2 · CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Stored Cross-Site Scripting Through API-Supplied Support Content

The report-comment API (POST /api/v1/reports/{id}/comments) does not sufficiently encode HTML/script content before it is rendered in the internal Support Agent and Administrator report-review views. Encoding is applied on the customer-facing view but not consistently on the internal agent/admin view. Recommendation: apply a single shared, context-aware output-encoding component across all report-rendering views.

Owner: Engineering Lead, Support Platform (Fictional Role) · Target: 29 Oct 2026 · Status: Open

API-007 · HIGH · CVSS-style 7.1 · CWE-213 Exposure of Sensitive Information Due to Incompatible Policies

GraphQL Excessive Sensitive Data Exposure

GraphQL field resolvers on the User type return fields based on a broad, shared object serializer rather than role-aware field-level authorization, so an authenticated Standard User's query returns internal-only fields (internalRiskScore, billingAccountReference, adminNotes) not shown in that role's UI. Recommendation: introduce role-aware field resolvers (or a field-authorization directive) for all sensitive fields across the User, Organization, and Account types.

Owner: API Platform Lead (Fictional Role) · Target: 28 Nov 2026 · Status: Open

11 · GRAPHQL-SPECIFIC SECURITY — INTROSPECTION, QUERY COMPLEXITY/DEPTH, BATCHING/ALIASES, RESOLVER & MUTATION SECURITY

GraphQL-specific security

Because GraphQL's single-endpoint, client-driven query model introduces trust-boundary complexity that a flat REST authorization model does not, TMG Security applied dedicated GraphQL-specific testing. Introspection (__schema, __type) is available in this fictional staging environment, and exposure-versus-impact analysis found that introspection meaningfully shortens the discovery path to operations that are separately exploitable. Query complexity and depth controls were found not to be enforced server-side: a synthetic nested query well above the documented safe threshold was accepted and fully executed rather than rejected — a resource-consumption risk rather than a confirmed denial-of-service, consistent with the non-destructive rules of engagement. Batching and aliases testing found that individual authorization checks were correctly applied to each aliased object in a batch, but rate-limiting counters treat an aliased batch as a single call rather than counting each aliased sub-query independently.

Most significantly, GraphQL resolver authorization testing — verifying that authorization checks performed at a root query or mutation are independently re-validated at each nested field resolver — produced this report's most technically significant finding: the root organization query and its immediate child resolver both enforce tenant-ownership authorization correctly, but a resolver three levels deep in the object graph honors a caller-supplied override argument without re-checking authorization, trusting the parent object's already-authorized context instead. Mutation-security testing of all 28 fictional GraphQL mutations found this same pattern — authorization implemented per-mutation rather than through a shared, centrally enforced middleware — concentrating the majority of this report's most severe findings in the mutation layer.

API-002 · CRITICAL · CVSS-style 9.1 · CWE-862 Missing Authorization

GraphQL Privileged Mutation Authorization Bypass

The GraphQL mutation updateOrganizationBilling is hidden from the front-end UI for non-administrative roles, but the mutation itself performs no server-side role check and remains fully callable by any authenticated Standard User. A fictional Standard User account changed its own organization's billing tier to "enterprise" with no authorization error. Recommendation: apply the same shared role-authorization guard used by REST billing endpoints to every GraphQL mutation resolver that touches billing or entitlement state.

Owner: Director, API Platform (Fictional Role) · Target: 15 Oct 2026 · Status: Remediation In Progress

API-008 · HIGH · CVSS-style 7.7 · CWE-863 Incorrect Authorization

GraphQL Nested Resolver Authorization Bypass

The root organization query correctly authorizes access to the requester's own organization, but a nested resolver three levels deep (organization.members.billing.invoices) does not independently re-check tenant/role authorization, instead trusting the parent object's already-authorized context to resolve child invoice data that in fact belongs to a different fictional member record. Recommendation: adopt a per-resolver (or per-type) authorization pattern — e.g., a GraphQL directive applied to every sensitive field — so nested resolvers cannot bypass tenant/role checks by relying on parent-level authorization.

Owner: Director, API Platform (Fictional Role) · Target: 29 Oct 2026 · Status: Remediation In Progress

12 · BUSINESS LOGIC, WEBHOOK & API SERVER-SIDE SECURITY TESTING

Business logic, webhook & API server-side security testing

Business-logic testing examined fictional multi-step workflows — subscription plan-tier transitions, discount redemption, invoice/refund state changes, and account-ownership transfer — for state-integrity and authorization gaps not caught by endpoint- or field-level testing alone. This category produced the assessment's third Critical finding: an invoice can be moved directly to a "refunded" state — via both REST and the equivalent GraphQL mutation — without a preceding approval or payment-reversal workflow event, and in the GraphQL case, against an invoice belonging to a different fictional tenant. Webhook-security testing assessed destination validation, payload signing, and replay protection for the fictional outbound event-delivery system: webhook payloads are signed and secrets are not re-exposed after issuance, but the destination-validation endpoint performs a server-side fetch to a client-supplied URL without restricting internal/private address ranges (a Server-Side Request Forgery-class finding), and webhook signatures do not incorporate a timestamp or nonce, so a captured payload could in principle be replayed. Rounding out this category: REST and GraphQL mass-assignment testing found both interfaces bind a subset of hidden fields from a Standard User session; API rate limiting is applied on the standard login endpoint but is inconsistent across other authentication-adjacent endpoints and the GraphQL endpoint generally; CORS configuration on both interfaces trusts an overly broad set of origins; error handling is generally sound on REST but GraphQL error responses include verbose internal resolver/database detail; and API documentation, versioning, and configuration hygiene showed only lower-severity, hardening-oriented gaps.

API-003 · CRITICAL · CVSS-style 9.6 · CWE-841 Improper Enforcement of Behavioral Workflow

Business Logic Authorization Bypass Allowing Unauthorized Financial State Manipulation

Both the REST invoice-update endpoint and the equivalent GraphQL updateInvoice mutation accept a client-supplied invoice status/amount transition and apply it without validating that the transition is reachable from the invoice's current state or that the requesting role is permitted to perform it. A fictional Billing User was able to move a test invoice directly from "issued" to "refunded" — skipping the required "paid" and approval states — and, in the GraphQL case, the mutation simultaneously revealed invoice detail belonging to a different fictional tenant during the same test sequence. Recommendation: introduce an explicit, server-side invoice state machine shared by REST and GraphQL, gate every transition on both role authorization and current-state validity, and require an approval-reference for refund-class transitions.

Owner: VP Finance Engineering (Fictional Role) · Target: 15 Oct 2026 · Status: Remediation In Progress

API-010 · HIGH · CVSS-style 8.1 · CWE-918 Server-Side Request Forgery (SSRF)

Server-Side Request Forgery Through Integration Webhook API

The webhook "validate" feature (POST /api/v1/webhooks/validate), which performs a server-side test request to a customer-supplied callback URL before saving a webhook subscription, does not restrict the destination beyond basic URL-format validation. No destination allow-listing, DNS-resolution restriction, or private-IP-range blocking was observed in the fictional test environment. Recommendation: implement an egress allow-list and explicit blocklist for private/link-local/metadata IP ranges on all server-initiated outbound fetches; route validation requests through an isolated, non-privileged network egress path.

Owner: Platform Security Lead (Fictional Role) · Target: 29 Oct 2026 · Status: Remediation Planned

>
13 · FINDINGS SUMMARY

Findings summary

This fictional assessment identified 42 illustrative findings across the OrionSphere Enterprise Platform's REST and GraphQL API surface, drawn from 140 fictional test cases executed against 126 REST endpoints and 78 GraphQL operations (Appendices A–C of the full report). Every finding, severity rating, and evidence reference below is fictional and specific to this API penetration test — none are drawn from any other TMG sample report.

3
Critical
8
High
12
Medium
9
Low
10
Informational
Full illustrative finding register — fictional sample data, Appendix E of the sample PDF.
IDTitleSeverity
API-001Cross-Tenant BOLA Across REST and GraphQL ObjectsCritical
API-002GraphQL Privileged Mutation Authorization BypassCritical
API-003Business Logic Authorization Bypass Allowing Unauthorized Financial State ManipulationCritical
API-004Stored Cross-Site Scripting Through API-Supplied Support ContentHigh
API-005Account Recovery API WeaknessHigh
API-006REST File Authorization BypassHigh
API-007GraphQL Excessive Sensitive Data ExposureHigh
API-008GraphQL Nested Resolver Authorization BypassHigh
API-009Legacy API v1 Authorization WeaknessHigh
API-010Server-Side Request Forgery Through Integration Webhook APIHigh
API-011Privilege Escalation Through Role MutationHigh
API-012GraphQL Introspection Exposes Privileged Administrative OperationsMedium
API-013GraphQL Query Complexity Enforcement GapMedium
API-014GraphQL Query Depth Control GapMedium
API-015GraphQL Batching / Alias-Based Excessive Object RetrievalMedium
API-016Insufficient Rate Limiting on Authentication EndpointsMedium
API-017Access Token Revocation Weakness on LogoutMedium
API-018Mass Assignment via REST and GraphQL Update OperationsMedium
API-019Webhook Replay Protection MissingMedium
API-020CORS Configuration Trusts Unnecessary OriginsMedium
API-021Verbose GraphQL Error Responses Reveal Internal DetailsMedium
API-022API Versioning Weakness — Inconsistent Deprecation EnforcementMedium
API-023Business Logic Replay in Discount Redemption WorkflowMedium
API-024Technology / Version Disclosure via Response HeadersLow
API-025Missing Security Header Hardening (Permissions-Policy / Referrer-Policy)Low
API-026Unused / Unnecessary HTTP Methods EnabledLow
API-027Minor Input Validation Inconsistencies Across EndpointsLow
API-028Non-Sensitive GraphQL Schema Metadata ExposureLow
API-029Residual Debug Logging in Client BundleLow
API-030API Documentation / Enforcement MismatchLow
API-031Stale Endpoint Metadata in API RegistryLow
API-032Incomplete Session Artifact Cleanup on LogoutLow
API-033Public GraphQL Documentation Portal (Intended Exposure — Review Recommended)Informational
API-034Introspection Intentionally Available in Non-Production EnvironmentInformational
API-035Non-Sensitive Schema Metadata Present in Build ArtifactsInformational
API-036Security.txt Not PresentInformational
API-037API Inventory / Asset-Management Improvement OpportunityInformational
API-038Logging Coverage Recommendation for Authorization EventsInformational
API-039Monitoring Enhancement Opportunity for GraphQL Resolver ErrorsInformational
API-040API Lifecycle Governance RecommendationInformational
API-041Deprecated Endpoint Cleanup BacklogInformational
API-042Recommend Automated Authorization Regression TestingInformational
14 · RISK HEATMAP & ATTACK CHAIN ANALYSIS

Risk heatmap & attack chain analysis

The full sample PDF plots all 42 fictional findings on a likelihood-versus-impact risk heatmap: the three Critical and eight High findings cluster in the "Likely/Almost Certain × Major/Severe" quadrant, the twelve Medium findings sit in the mid-range "Possible × Major" band, and the Low and Informational findings cluster toward "Rare/Unlikely × Minor" — a distribution that supports prioritizing the authorization and GraphQL resolver findings first.

Individual findings are often most meaningful in combination. The report's fictional composite attack-chain scenario illustrates how, starting from a low-privilege authenticated Standard User session, the GraphQL nested-resolver authorization gap (API-008) permits traversal into another member's billing and invoice data through a nested query, even though the root organization query is correctly scoped; the excessive GraphQL data-exposure finding (API-007) means that object — and equivalent objects reachable the same way — returns more internal detail than intended; and the business-logic authorization bypass in invoice/refund handling (API-003) shows that workflow-state enforcement has gaps elsewhere in the platform, reachable through both REST and GraphQL. Combined, this fictional path could reach cross-tenant financial data exposure together with unauthorized financial-state manipulation — a composite illustrative impact more significant than any single finding in isolation, and a concrete example of why resolver-level authorization testing is treated as a priority discipline in this methodology. This is a fictional composite scenario and must not be construed as an exploit chain against any real system.

15 · BUSINESS IMPACT ANALYSIS

Business impact analysis

The table below maps each Critical and High fictional finding to the illustrative business dimensions it most directly affects, supporting prioritization conversations beyond pure technical severity.

Illustrative business impact by finding — Critical & High findings only, fictional sample data.
FindingConfidentialityIntegrityFraud / Revenue RiskCustomer Trust
API-001HighLowMediumHigh
API-002LowHighHighMedium
API-003MediumHighHighHigh
API-004MediumMediumLowMedium
API-005MediumLowLowMedium
API-006MediumLowLowMedium
API-007HighLowLowMedium
API-008HighMediumMediumHigh
API-009MediumLowLowLow
API-010MediumMediumLowLow
API-011LowHighMediumMedium
16 · REMEDIATION ROADMAP

Remediation roadmap

The fictional sample remediation roadmap sequences all 42 findings across three phases, prioritizing the Critical authorization and GraphQL resolver findings first. All dates and timelines shown are illustrative.

0–30 days

  • Critical cross-tenant BOLA across REST and GraphQL (API-001)
  • GraphQL privileged mutation authorization bypass (API-002)
  • Business logic / financial workflow authorization bypass (API-003)
  • Legacy API v1 authorization weakness (API-009)
  • Privilege escalation through role mutation (API-011)

31–60 days

  • High GraphQL data exposure (API-007) and nested resolver authorization bypass (API-008)
  • SSRF through the integration webhook API (API-010) and REST file authorization bypass (API-006)
  • Stored XSS through API-supplied support content (API-004) and account recovery API weakness (API-005)
  • Rate-limiting hardening and GraphQL query-control gaps (API-016, API-013, API-014, API-015)

61–90 days

  • Configuration & header hardening (API-020, API-024, API-025, API-026)
  • Logging & monitoring improvements (API-038, API-039)
  • Documentation & schema governance (API-030, API-033, API-035, API-037)
  • API lifecycle / deprecation controls (API-022, API-031, API-040, API-041)
  • Remaining defense-in-depth backlog (API-017, API-018, API-019, API-021, API-023, API-027, API-028, API-029, API-032, API-036, API-042)
17 · MANAGEMENT ACTION PLAN & RETEST RECOMMENDATIONS

Management action plan & retest recommendations

The full sample PDF tracks fictional management response, ownership, and validation approach for every finding in a single management action plan, ensuring each of the 42 findings appears exactly once with an owner, priority, target date, status, and validation method. TMG Security recommends a structured retest following remediation: a full retest of all three Critical findings and all eight High findings, including role-based regression testing across related REST endpoints and GraphQL operations; a targeted retest of each Medium finding against its specific affected endpoint, GraphQL operation, or workflow, with independent verification that GraphQL resolver-authorization findings (API-002, API-008, API-011) are enforced at every nested resolver level; and a confirmation-only review of Low and Informational items, batched into the next general assessment cycle. This retest methodology is illustrative — this report does not claim that any finding has been remediated or retested.

18 · POSITIVE SECURITY CONTROLS & TESTING LIMITATIONS

Positive security controls & testing limitations

This fictional assessment is not intended to be entirely negative. TMG Security identified a number of controls operating effectively across the OrionSphere Enterprise Platform's REST and GraphQL surfaces, including functional MFA with single-use recovery codes for enrolled accounts, appropriate refresh-token rotation, disallowed deprecated TLS protocols and weak cipher suites, a centralized fictional API gateway fronting both layers, a baseline cloud-based WAF, type-level GraphQL input validation and REST schema validation, centralized authentication and role-change logging, root-level GraphQL query and mutation authorization correctly enforced in the majority of operations tested, effective rate limiting on the primary login endpoint, and root-level object-level authorization correctly enforced on the majority of REST endpoints and GraphQL queries tested.

The following limitations apply to this fictional sample assessment: OrionSphere Technologies, Inc. and the OrionSphere Enterprise Platform are fictional and no real organization, REST, or GraphQL API was assessed; no real credentials, API keys, cloud credentials, or production systems were used or accessed; no real customer data was accessed at any point; no production environment was tested — only a fictional staging/controlled assessment environment is represented; no destructive testing or denial-of-service testing, including GraphQL resource-exhaustion exploitation, was performed; no bulk-data-extraction technique was constructed or demonstrated, including from the batching/alias finding (API-015); no social engineering or physical security testing was performed; and all evidence, screenshots, GraphQL queries, and request/response examples referenced in the full report are synthetic.

19 · IMPORTANT DISCLAIMER
Illustrative Sample — Not an Actual Client API Penetration Test

OrionSphere Technologies, Inc. and the OrionSphere Enterprise Platform are fictional. They do not correspond to any real business or application, and any resemblance to an actual organization is purely coincidental. The REST API (api.orion-example.com) and GraphQL API (graphql.orion-example.com/graphql) referenced throughout this sample are fictional, non-resolving placeholder domains used only for illustration.

No real client was engaged and no real client API infrastructure was tested. No production environment, system, network, or cloud resource of any kind was accessed, scanned, or tested in the creation of this document. No real user data, personal information, or customer records were accessed, viewed, or processed, and no real credentials — including cloud, application, API, or third-party credentials — were used or disclosed anywhere in this report.

All GraphQL schemas, queries, mutations, subscriptions, and type definitions shown in this report are synthetic and constructed for illustration only. All vulnerabilities, findings, risk ratings, CVSS scores, dates, and remediation statuses described in this report are fictional and were constructed for demonstration purposes. All proofs of concept are illustrative, synthetic, and non-destructive; none were executed against a real or live target, and none involved denial-of-service exploitation or destructive race-condition automation. All screenshots, request/response examples, and evidence panels are synthetic or simulated representations created specifically for this sample report. No real exploitation occurred at any point, and no actual customer impact occurred.

This document is not an actual client API penetration test. It does not represent evidence of the security posture of any real organization, does not constitute a certification or compliance decision, and does not constitute security, legal, or compliance advice for any real system. It may be shared with prospective clients, partners, and other interested parties to illustrate TMG Security's API security testing methodology, technical reporting standards, and evidence-presentation quality across both REST and GraphQL interfaces, and should not be relied upon for any compliance, legal, contractual, or procurement decision.

20 · FREQUENTLY ASKED QUESTIONS

Frequently asked questions

What is an API penetration testing report?+

An API penetration testing report is the formal deliverable produced after an authorized, hands-on security assessment of an organization's REST and/or GraphQL interfaces. It documents scope and methodology, the API attack surface tested, detailed findings with severity ratings and evidence, risk and business-impact analysis, and remediation guidance — giving engineering and security leadership an evidence-based roadmap for closing the gaps found.

What does an API penetration test cover?+

An API penetration test covers authentication and session/token security, authorization at the object, function, field, and tenant level, business logic, injection and input validation, data exposure, mass assignment, rate limiting, webhook security, and configuration hardening — tested across every defined API role under authenticated and unauthenticated conditions. When both REST and GraphQL interfaces exist, as illustrated in this sample, testing also validates that authorization is enforced consistently between them.

What is included in a REST API penetration test?+

A REST API penetration test typically includes systematic endpoint enumeration (including legacy and deprecated routes), authentication and session testing, object- and function-level authorization testing, input validation and injection testing, data-exposure and mass-assignment testing, rate-limiting and CORS review, and error-handling and configuration review — as demonstrated across Sections 07–12 of this sample report.

What is included in a GraphQL security assessment?+

A GraphQL security assessment covers schema discovery and introspection review, query-complexity and query-depth controls, batching and alias abuse, resolver-level authorization at both root and nested fields, mutation and subscription security, and data-exposure testing specific to GraphQL's flexible, client-driven query model — categories illustrated in Sections 07 and 11 of this sample report.

What is BOLA in API security?+

BOLA (Broken Object-Level Authorization) occurs when an API returns or modifies a specific object based on a client-supplied identifier without verifying the requesting user is actually authorized to access that particular object. It is one of the most common and highest-impact API vulnerability classes, illustrated in this sample by API-001, a cross-tenant BOLA finding reproducible through both the REST and GraphQL interfaces.

How does GraphQL resolver authorization differ from traditional REST authorization?+

REST authorization is typically checked once, at the endpoint that handles a single, flat request. GraphQL's resolver model lets a single query traverse an arbitrarily deep, client-shaped object graph, so authorization checked only at the root query or mutation does not automatically protect nested field resolvers deeper in that graph — each resolver that touches sensitive data must independently re-validate authorization. This distinction is illustrated in this sample by API-008, a nested-resolver authorization bypass.

Why is tenant isolation important in API security?+

In a multi-tenant API, tenant isolation ensures one customer's authenticated session can never read or modify another customer's data, regardless of how deeply nested the request or how the object is reached. Because tenant checks must be enforced at the resolver/service layer rather than inferred from the presentation layer, gaps often appear where tenant context must be re-derived deeper in a workflow or object graph — as illustrated by API-001, API-003, and API-008 in this sample.

Is this API penetration testing report based on a real client?+

No. This is a fictional, illustrative sample report created to demonstrate TMG Security's API security testing methodology and technical reporting depth across REST and GraphQL. OrionSphere Technologies, Inc. and the OrionSphere Enterprise Platform are fictional, and no real client environment, REST API, or GraphQL API was assessed.

21 · VIEW FULL SAMPLE PDF

View the full sample PDF

The complete 92-page illustrative report, including the full methodology, REST endpoint and GraphQL operation registers, all 42 detailed findings with dual REST/GraphQL evidence panels, the risk heatmap, attack-chain analysis, remediation roadmap, and every appendix — API test case register, REST endpoint register, GraphQL operation register, role & authorization matrix, finding register, and test account register.

OrionSphere Technologies, Inc. API Penetration Testing Report — Sample.pdf
API PENETRATION TESTING REPORT · REST & GraphQL · OrionSphere Enterprise Platform · 92 Pages · Illustrative Sample
22 · REQUEST A SIMILAR ASSESSMENT

Request a similar assessment

Looking to validate your own REST and GraphQL API security directly? TMG Security's API Security Testing team can scope a real API penetration test built with the same structure, methodology, and reporting depth shown in this sample — attack-surface discovery, authenticated role-based testing, object-, function-, and field-level authorization testing, GraphQL resolver security, a full finding register, and a remediation roadmap your engineering team can execute against. TMG's offensive security practice also covers Web Application Security Testing and the broader Offensive Security & Penetration Testing program this assessment type sits within. For a conceptual reference on common testing categories, see TMG's OWASP Top 10:2025 quick reference for penetration testers.