)}

Penetration Test Report Example

A penetration test report is the document a testing team delivers after an engagement. It records what was tested, what was found, how each finding was proved, what it means for the business, and how to fix it. Below is a real one, redacted and published in full: 13 findings with CVSS severity scores, CWE and OWASP mapping, steps to reproduce, HTTP request and response evidence, business impact, remediation guidance, a retest section, and SOC 2 with ISO 27001 control mapping. Nothing is behind a form.

This is a redacted preview based on a real engagement covering two scopes across 10 business days. Identifying details have been replaced with fictional names (company: Acme SaaS, targets: app.acmesaas.io and api.acmesaas.io). Findings, methodology, severity ratings, and remediation guidance reflect the actual work. Sensitive details are marked [REDACTED].

Which plan this is: a Growth Pentest Plan report (2 scopes, 10 business days). Startup Plan reports use an identical structure and omit the SOC 2 + ISO 27001 compliance mapping section, which is exclusive to the Growth Plan.

Looking for a penetration test plan rather than a report? Those are two different documents, agreed at two different points in an engagement. See the difference and what belongs in each.

Want a clean copy to share with your team or auditor? Use the "Email me a PDF copy" form above and we will send it. You can read the full report right here on this page first, no email needed.

What a Penetration Test Report Contains

Report structure varies between firms, but a report you can act on and hand to an auditor carries the same eight parts. Each one below says what goes in it and why it is there, and links to that part of the real report further down this page.

The report is not an afterthought to the testing. NIST SP 800-115, the US National Institute of Standards and Technology guide to security testing, places reporting in Section 8 under post-testing activities, next to mitigation recommendations and remediation, and notes that a report may need more than one format because it has more than one audience. That is why the document below opens with an executive summary written for leadership and then repeats the same findings in reproducible technical detail for engineers.

01

Document control and revision history

What is in it: Report title, client, engagement type, version number, issue date, classification, and the named assessors. Plus a revision table showing what changed between versions.

Why it exists: Whoever reads this later needs to know which version they hold and whether it predates the fixes. A report with no version and no date cannot be used as evidence in an audit or a security questionnaire.

See document control
02

Executive summary

What is in it: An overall risk rating, the finding counts by severity, the business impact in plain language, the top priorities, and a recommendation on sequencing the work.

Why it exists: The people who approve budget and release schedules often read this page and nothing else. If the summary is only a count of findings, leadership has no basis to act on it.

See the executive summary
03

Scope and methodology

What is in it: Severity rating definitions, the in-scope targets, the environment tested, the testing window, the testing approach and access provided, the standards followed, the tools used, and an explicit out-of-scope list.

Why it exists: This is where the plan agreed before the engagement is carried into the report, so a reader can check the work against what was authorised. It is usually the first section an auditor reads, because it establishes whether the test covered the system inside the audit boundary.

See scope and methodology
04

Findings summary

What is in it: One row per finding: identifier, title, severity, CVSS score, CWE, OWASP category, affected endpoint, and current status.

Why it exists: This is the table engineering triages from and the table a reviewer scans first. It should be readable on its own, without opening a single detailed finding.

See the findings summary
05

Detailed findings

What is in it: For each finding: a description, the affected endpoint, severity with the full CVSS vector, numbered steps to reproduce, the raw request and response as evidence, the business impact, and remediation guidance.

Why it exists: This is where a report stops being a list and becomes reproducible. If your engineers cannot reproduce a finding from the report alone, they cannot confirm the fix worked either.

See a detailed finding
06

Retest results

What is in it: Every original finding re-checked after the fixes, with a remediated or still-open status, notes on what changed, and evidence captured in the fixed state.

Why it exists: Closes the loop. A finding marked resolved with no retest evidence behind it is the client word, not a verified result, and that is exactly the gap an auditor or an enterprise security reviewer probes.

See the retest trail
07

Compliance control mapping

What is in it: Each finding mapped to the SOC 2 trust services criteria and the ISO/IEC 27001:2022 Annex A controls it touches, with the evidence reference.

Why it exists: Turns findings into filed audit evidence instead of a narrative your compliance lead has to translate by hand. Included on the Growth plan.

See the control mapping
08

Appendix and disclaimer

What is in it: Tools used, assessor credentials, the report distribution list, a glossary of terms, and a statement of what the testing could not cover.

Why it exists: Testing is time-boxed and scope-bound. A report that does not say so in writing is overclaiming, and the disclaimer is what a reviewer looks for to judge whether the firm is being straight with them.

See the appendix

The document below is the worked example. It runs in that order, from cover page to disclaimer, exactly as it was delivered.

Confidential

Web & API Penetration Test Report

Acme SaaS, Application Security Assessment

Prepared for Acme SaaS Pvt. Ltd.

Prepared by Cyber Secify Consulting (OPC) Private Limited

Report Date 14 March 2026  ·  Engagement 2026-06-ACME  ·  v2.0 (Final)

Environment Development / staging, Web · REST API

This document contains confidential and proprietary information. Neither this document nor the information herein may be reproduced, used, or disclosed to or for the benefit of any third party without the prior written consent of Cybersecify Consulting (OPC) Private Limited. This is a redacted sample containing fictional data.

Title Details
Application NameAcme SaaS Platform (app.acmesaas.io + api.acmesaas.io/v2)
ClientAcme SaaS Pvt. Ltd.
Engagement TypeGrey-box Penetration Test (Growth Pentest Plan, 2 scopes)
Document Version2.0 (Final)
Date of Issue14 March 2026
ClassificationConfidential. Do not distribute.
Prepared ByCybersecify Consulting (OPC) Private Limited
Lead AssessorsRathnakara GN (OSCP), Ashok Kamat (CCIO)
Version Date Change Description
1.013 February 2026Initial report issued at engagement close. 13 findings: 2 Critical, 3 High, 5 Medium, 2 Low, 1 Info. All Open.
2.014 March 2026Post-retest final report. All 13 findings verified Remediated. Compliance evidence package attached for Growth Plan SOC 2 + ISO 27001 audit prep.

Table of Contents

  1. Executive Summary Overall risk, top priorities, statistics
  2. Scope and Methodology Frameworks, in-scope targets, risk rating
  3. Findings Summary All 13 findings, CVSS scoring, status
  4. Detailed Findings 2 of 13 shown in this preview
  5. Retest Results v1.0 to v2.0 remediation trail
  6. Compliance Evidence Package SOC 2 + ISO 27001 control mapping (Growth Plan)
  7. Appendix Glossary, references, contact
  8. Disclaimer Scope limits, legal terms
Section 1

Executive Summary

Cybersecify Consulting (OPC) Private Limited was engaged by Acme SaaS Pvt. Ltd. to conduct a grey-box penetration test of their primary SaaS platform and its supporting API infrastructure. The engagement covered two scopes: the web application at app.acmesaas.io (Scope 1) and the REST API at api.acmesaas.io/v2 (Scope 2).

The assessment was performed by a senior team led by Rathnakara GN (OSCP) and Ashok Kamat (CCIO), following the OWASP Web Security Testing Guide (WSTG) v4.2, OWASP Application Security Verification Standard (ASVS) 5.0.0, and the Penetration Testing Execution Standard (PTES). Findings are mapped to OWASP Top 10:2025, the current edition. Where a category changed from the 2021 edition, the report notes the prior label for teams still tracking against 2021. The testing approach combined manual exploitation with automated scanning, focusing on business logic flaws, privilege escalation, and chained attack scenarios that automated tools typically miss.

Active testing ran from 2 February 2026 to 13 February 2026 across 10 business days (5 business days per scope), with reporting prepared concurrently. The v1.0 initial report was delivered on 13 February 2026 at the close of the engagement, in line with the Growth Pentest Plan 10 business day commitment. This v2.0 final report supersedes v1.0 and reflects the post-retest state captured on 14 March 2026 (all 13 findings remediated and verified).

Overall Risk Rating
HIGH
Immediate remediation required for 2 critical findings before production deployment.

Key Statistics

13
Total Findings
2
Critical
3
High
5
Medium
2
Low
1
Info

Business Impact Summary

The most significant risk to Acme SaaS is the combination of an Insecure Direct Object Reference (IDOR) vulnerability in the billing API and a broken authentication flaw in the API token refresh mechanism. Together, these findings mean that any authenticated user on the platform can access billing records belonging to other organisations, and a compromised or expired token can be refreshed indefinitely without re-authentication. For a B2B SaaS platform handling financial transactions, these represent direct threats to customer trust, regulatory compliance, and revenue.

If exploited, the IDOR vulnerability alone could expose the billing records (names, addresses, invoice amounts, partial payment details) of every organisation on the platform. This would likely trigger mandatory breach notification obligations under India's Digital Personal Data Protection Act and, for any EU-based customers, under GDPR. The reputational cost to a SaaS company during a fundraise or enterprise sales cycle could be substantial.

Top 3 Priority Findings

Priority Finding Severity Why It Matters
1 IDOR in Billing API Critical Any user can read any other organisation's invoices and payment data.
2 SQL Injection in Search Critical Database extraction possible through the search endpoint. Full data compromise risk.
3 Broken Auth on Token Refresh High Expired API tokens can be refreshed indefinitely, defeating session timeout controls.

Strategic Recommendation

We recommend Acme SaaS treat the two critical findings as P0 and remediate them before the next production release. The billing API IDOR points to a missing server-side, organisation-level authorization check on invoice access; the SQL injection points to unparameterised queries in the search endpoint. Both are pinpointed to the exact endpoint in Section 4. The specific code change depends on Acme SaaS's own stack and architecture, which the engineering team is best placed to judge. Once these are resolved, the remaining high and medium findings should be addressed within the next two sprint cycles. The compliance evidence package (Section 6) maps all findings to SOC 2 and ISO 27001 controls, directly useful for Acme SaaS's upcoming SOC 2 Type 2 audit preparation.

Section 2

Scope and Methodology

Risk Rating Definitions

All findings in this report are scored using CVSS v3.1 and v4.0 (see Section 3 for dual-vector documentation). The severity bands below are identical across both versions. Remediation priority is set by Cybersecify in consultation with the client based on exploitability, business context, and remediation effort.

Risk Rating CVSS Score Description
Critical
9.0 to 10.0 Successful exploitation may cause multiple catastrophic effects on the organisation, customer data, or downstream systems. Immediate remediation required.
High
7.0 to 8.9 Direct impact on the security of the application or its supported systems. High probability vulnerabilities with material business impact.
Medium
4.0 to 6.9 Medium risk and medium business impact. Should be remediated within standard sprint cycles.
Low
0.1 to 3.9 Common vulnerabilities with minimal direct impact. Address as part of routine security hygiene.
Info
0.0 Negligible direct impact. Informational disclosures, hardening recommendations, or best-practice gaps.

In-Scope Targets

Scope Target Type Environment Testing Window
Scope 1 app.acmesaas.io Web Application Staging (full test), Production (read-only validation) 5 business days
Scope 2 api.acmesaas.io/v2 REST API Staging 5 business days

Testing Approach

Grey-box testing was performed with authenticated access. The Acme SaaS engineering team provided two sets of credentials: a standard user account (Member role) and an administrator account (Admin role). This approach simulates both external attacker scenarios (credential compromise, account takeover) and insider threat scenarios (malicious or compromised employee).

Manual testing was the primary method. Automated scanning was used to supplement coverage and identify common misconfigurations, but all critical and high findings in this report were discovered through manual analysis and exploitation. Business logic testing, privilege escalation, and chained-attack scenarios were performed manually.

Active testing was performed against the staging environment, with read-only validation against production. Staging and production run the same application codebase and an equivalent security configuration (matching framework versions, authentication flows, and access-control rules), confirmed with the Acme SaaS engineering team at kickoff, so the findings represent the production system covered by the audit.

Methodology and Standards

Standard Application
OWASP Top 10:2025 Primary vulnerability classification framework
OWASP WSTG v4.2 Web application testing methodology (Scope 1)
OWASP ASVS 5.0.0 Verification standard for security controls testing
OWASP API Security Top 10 (2023) API-specific vulnerability classification (Scope 2)
PTES (Penetration Testing Execution Standard) End-to-end engagement methodology
Real-world attack simulation Chained exploits, privilege escalation, lateral movement

Tools Used

Tool Purpose
Burp Suite Professional HTTP interception, manual testing, active scanning
Nuclei Template-based vulnerability scanning
ffuf Directory and parameter fuzzing
sqlmap SQL injection detection and exploitation validation
Custom Python scripts IDOR enumeration, token lifecycle testing, chained exploit automation
Nmap Port scanning and service enumeration

Out of Scope

Denial-of-service testing, social engineering, physical security assessments, and testing against third-party SaaS integrations (Stripe, AWS Cognito) were excluded from this engagement. All testing followed responsible disclosure practices.

Section 3

Findings Summary

Each finding is scored under both CVSS v3.1 (for parity with NVD, CISA KEV, and most vendor advisories) and CVSS v4.0 (current FIRST standard since November 2023). Severity bands are identical across both versions. Detailed finding entries include full v3.1 and v4.0 vectors. Scores reflect what the original engagement recorded; vectors are documented for reproducibility against the FIRST CVSS calculator.

Severity Distribution

Severity Count CVSS Range (v3.1 / v4.0) Remediation Priority
Critical 2 9.0 to 10.0 Immediate (before next release)
High 3 7.0 to 8.9 Within 1 sprint cycle
Medium 5 4.0 to 6.9 Within 2 sprint cycles
Low 2 0.1 to 3.9 Next quarterly review
Info 1 0.0 Best practice recommendation

Scope 1 Findings: Web Application (app.acmesaas.io)

Status column reflects v2.0 final state after retest verification. Original v1.0 status for all findings was Open. See Section 5 for full retest history.

ID Title Severity CVSS v3.1 CVSS v4.0 Status
CS-2026-001 IDOR in Billing API (Invoice Access) Critical 9.1 7.2 Fixed
CS-2026-002 SQL Injection in Search Endpoint Critical 9.8 9.3 Fixed
CS-2026-003 Broken Access Control in Admin Panel High 8.2 8.8 Fixed
CS-2026-004 Stored XSS in User Profile Bio High 7.1 7.0 Fixed
CS-2026-005 CSRF on Email Change Endpoint Medium 6.5 6.9 Fixed
CS-2026-006 Insecure Direct Object Reference in File Export Medium 5.8 5.9 Fixed
CS-2026-007 Missing Rate Limiting on Login Medium 5.3 6.9 Fixed
CS-2026-008 Verbose Error Messages Leaking Stack Traces Low 3.1 2.3 Fixed
CS-2026-009 Missing Security Headers (X-Content-Type-Options, CSP) Info 0.0 0.0 Fixed

Scope 2 Findings: REST API (api.acmesaas.io/v2)

Status column reflects v2.0 final state after retest verification. Original v1.0 status for all findings was Open. See Section 5 for full retest history.

ID Title Severity CVSS v3.1 CVSS v4.0 Status
CS-2026-010 Broken Authentication on API Token Refresh High 7.5 8.7 Fixed
CS-2026-011 Mass Assignment on User Profile Update Medium 6.3 6.9 Fixed
CS-2026-012 Excessive Data Exposure in /users Endpoint Medium 4.3 5.3 Fixed
CS-2026-013 API Versioning Endpoint Leaks Deprecated Routes Low 2.0 1.8 Fixed
Section 4

Detailed Findings

Two of 13 findings are shown in full below. The remaining 11 findings follow the same format in the complete report.

CS-2026-001

IDOR in Billing API (Invoice Access)

Scope 1: Web Application
Severity Critical
CVSS v3.1 9.1 (Critical)
CVSS v3.1 Vector AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:L
CVSS v4.0 7.2 (High)
CVSS v4.0 Vector CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:L/SI:L/SA:L
CWE CWE-639: Authorization Bypass Through User-Controlled Key
OWASP Category A01:2025 Broken Access Control
Affected Endpoint GET /api/v2/billing/invoices/{invoice_id}

Description

The billing API endpoint at /api/v2/billing/invoices/{invoice_id} does not validate that the authenticated user belongs to the organisation that owns the requested invoice. By modifying the invoice_id parameter, an authenticated user from Organisation A can retrieve invoices belonging to Organisation B, including billing addresses, payment amounts, plan details, and partial payment method information.

The vulnerability exists because the server trusts the invoice_id path parameter without checking it against the requesting user's org_id from the JWT token. Invoice IDs follow a sequential pattern (INV-2026-00001, INV-2026-00002, etc.), making enumeration trivial.

Steps to Reproduce

  1. Authenticate as User A (Organisation: Acme Test Org, Role: Member). Navigate to the Billing section and open any invoice.
  2. Note the invoice ID in the request URL: /api/v2/billing/invoices/INV-2026-00142
  3. Using Burp Suite Repeater, modify the invoice ID to INV-2026-00098 (an invoice belonging to a different organisation). Send the request.
  4. Observe that the API returns a 200 OK response with the full invoice details for the other organisation, including billing name, address, amount, and the last 4 digits of the payment card.

Evidence

HTTP Request
GET /api/v2/billing/invoices/INV-2026-00098 HTTP/1.1
Host: api.acmesaas.io
Authorization: Bearer eyJ0eXAi...[REDACTED]
X-Org-Id: org_acme_test_001
Accept: application/json
HTTP Response (200 OK)
{
  "invoice_id": "INV-2026-00098",
  "org_id": "org_different_company",
  "org_name": "[REDACTED]",
  "billing_email": "[REDACTED]@company.com",
  "amount": 24999.00,
  "currency": "INR",
  "plan": "Growth Annual",
  "payment_method": "**** **** **** 4832",
  "billing_address": {
    "line1": "[REDACTED]",
    "city": "[REDACTED]",
    "state": "[REDACTED]",
    "postal_code": "[REDACTED]"
  },
  "status": "paid",
  "issued_date": "2026-01-15"
}
[Screenshot evidence redacted for this sample report. Actual reports include annotated screenshots for every finding.]

Business Impact

  • PII Exposure: Any authenticated user can enumerate and access invoices of all organisations on the platform, exposing names, addresses, payment amounts, and partial card details.
  • Revenue Loss: A data breach of billing information during an active enterprise sales cycle or fundraise could directly impact deal closure and valuation.
  • Compliance Violation: Direct violation of data isolation between tenants. Triggers mandatory breach notification obligations under India's DPDP Act and, for EU customers, under GDPR Article 33.
  • Reputational Damage: Multi-tenant data leakage is particularly damaging for SaaS platforms, as it undermines the core trust promise to enterprise customers.
  • Audit Impact: This finding would be a critical exception in a SOC 2 Type 2 audit and would likely result in a qualified opinion.

Remediation

Implement server-side authorisation checks on the billing API endpoint. The API must verify that the authenticated user's organisation ID matches the organisation associated with the requested invoice before returning any data. The pattern below illustrates the direction in Express as an example; we do not have Acme SaaS's source, so adapt it to your framework and data layer. The control that matters is the organisation-ownership check before any invoice data is returned.

Illustrative Fix Pattern (Express shown as an example)
// middleware/authorizeInvoice.js
const authorizeInvoice = async (req, res, next) => {
  const invoice = await Invoice.findById(req.params.invoiceId);

  if (!invoice) {
    return res.status(404).json({ error: "Invoice not found" });
  }

  // Verify org-level ownership
  if (invoice.orgId !== req.auth.organisationId) {
    logger.warn("IDOR attempt", {
      userId: req.auth.userId,
      requestedInvoice: req.params.invoiceId,
      userOrg: req.auth.organisationId,
      invoiceOrg: invoice.orgId
    });
    return res.status(403).json({
      error: "Forbidden: insufficient permissions"
    });
  }

  req.invoice = invoice;
  next();
};

Additionally, migrate from sequential invoice IDs (INV-2026-00098) to UUIDs to reduce enumeration risk. Implement rate limiting on the billing API to detect and block enumeration attempts. Add alerting for unusual patterns of invoice access across organisations.

Compliance Mapping

Framework Control Requirement
SOC 2 CC6.1 Logical access security over protected information assets
SOC 2 CC6.3 Role-based access and least privilege enforcement
ISO 27001:2022 A.8.3 Information access restriction
ISO 27001:2022 A.8.27 Secure system architecture and engineering principles
CS-2026-010

Broken Authentication on API Token Refresh

Scope 2: REST API
Severity High
CVSS v3.1 7.5 (High)
CVSS v3.1 Vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
CVSS v4.0 8.7 (High)
CVSS v4.0 Vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
CWE CWE-287: Improper Authentication
OWASP Category A07:2025 Authentication Failures
Affected Endpoint POST /api/v2/auth/token/refresh

Description

The API token refresh endpoint at /api/v2/auth/token/refresh accepts expired access tokens and issues new ones without validating the associated refresh token's expiry or revocation status. An attacker who obtains a single valid JWT (even after it expires) can indefinitely refresh it to maintain persistent access. The refresh endpoint does not check whether the user's session has been revoked, the password has been changed, or the account has been deactivated.

Steps to Reproduce

  1. Authenticate as a test user via the login endpoint. Note the access token (expires in 15 minutes) and the refresh token (expected to expire in 7 days).
  2. Wait for the access token to expire (or manually set the system clock forward). Confirm the access token returns 401 Unauthorized on any protected endpoint.
  3. Send a POST request to /api/v2/auth/token/refresh with the expired access token in the Authorization header and the refresh token in the request body.
  4. Observe that a new access token is issued. Repeat this process after the refresh token's stated 7-day expiry. The endpoint continues to issue new tokens.
  5. Change the user's password from another session. Attempt the refresh again. The endpoint still issues a valid token for the old session.

Evidence

HTTP Request (with expired refresh token)
POST /api/v2/auth/token/refresh HTTP/1.1
Host: api.acmesaas.io
Content-Type: application/json
Authorization: Bearer eyJ0eXAi...[EXPIRED ACCESS TOKEN]

{
  "refresh_token": "rt_[REDACTED]...expired_8_days_ago"
}
HTTP Response (200 OK, new token issued)
{
  "access_token": "eyJ0eXAi...[NEW VALID TOKEN]",
  "token_type": "Bearer",
  "expires_in": 900
}

Business Impact

  • Persistent Unauthorized Access: A compromised token (through XSS, log exposure, or man-in-the-middle) grants indefinite API access, even after the user changes their password or the admin revokes their session.
  • Session Management Bypass: Session timeout controls (a SOC 2 CC6.1 requirement) are effectively defeated. Auditors will flag this as a control failure.
  • Incident Response Gap: During a security incident, revoking user sessions will not actually terminate attacker access if they hold a refresh token.

Remediation

Implement proper refresh token lifecycle management. The refresh endpoint must validate: (1) the refresh token has not expired, (2) the refresh token has not been revoked, (3) the user's password has not changed since the token was issued, and (4) the user account is still active.

Recommended Fix (Pseudocode)
async function refreshToken(req, res) {
  const { refresh_token } = req.body;

  // 1. Validate refresh token exists and is not expired
  const storedToken = await RefreshToken.findOne({
    token: refresh_token,
    expiresAt: { $gt: new Date() },
    revoked: false
  });

  if (!storedToken) {
    return res.status(401).json({ error: "Invalid or expired refresh token" });
  }

  // 2. Verify user account is still active
  const user = await User.findById(storedToken.userId);
  if (!user || !user.isActive) {
    await RefreshToken.revokeAll(storedToken.userId);
    return res.status(401).json({ error: "Account deactivated" });
  }

  // 3. Check if password changed after token was issued
  if (user.passwordChangedAt > storedToken.issuedAt) {
    await RefreshToken.revokeAll(storedToken.userId);
    return res.status(401).json({ error: "Password changed, re-authenticate" });
  }

  // 4. Rotate: revoke old token, issue new pair
  await storedToken.revoke();
  const newTokens = generateTokenPair(user);
  return res.json(newTokens);
}

Compliance Mapping

Framework Control Requirement
SOC 2 CC6.1 Logical access security, session management controls
SOC 2 CC7.2 Monitoring of system components for anomalies
ISO 27001:2022 A.8.3 Information access restriction
ISO 27001:2022 A.8.2 Privileged access rights
Findings CS-2026-002 through CS-2026-009 and CS-2026-011 through CS-2026-013 follow the same detailed format: description, reproduction steps, HTTP evidence, business impact, remediation with code examples, and compliance mapping.
Section 5

Retest Results

Both pentest plans include a free retest within one month of the v1.0 initial report. The retest verifies every original finding against the current state of the application and confirms whether remediation is effective. The retest completes in 1 to 3 business days on our side, with no extra charge. The updated report (v2.0) is issued at retest close.

Retest

Date: 14 March 2026 (completed in 3 business days). Conducted by: Rathnakara GN.

The Acme SaaS engineering team deployed fixes for all 13 findings across two release cycles within the 30-day remediation window. The retest verified each finding against the current state of the application. All 13 findings were confirmed Remediated.

ID Title Severity Retest Status Notes
CS-2026-001 IDOR in Billing API Critical Fixed Org-level auth check added. UUID migration in progress.
CS-2026-002 SQL Injection in Search Critical Fixed Parameterized queries implemented across all search endpoints.
CS-2026-003 Broken Access Control in Admin Panel High Fixed Role-based middleware added to all admin routes.
CS-2026-004 Stored XSS in User Profile Bio High Fixed Input sanitization and CSP header implemented.
CS-2026-005 CSRF on Email Change Medium Fixed CSRF token validation added.
CS-2026-006 IDOR in File Export Medium Fixed Ownership validation added to export endpoint.
CS-2026-007 Missing Rate Limiting on Login Medium Fixed Rate limiter (5 attempts/min) deployed.
CS-2026-008 Verbose Error Messages Low Fixed Generic error responses in production.
CS-2026-009 Missing Security Headers Info Fixed X-Content-Type-Options, CSP, and HSTS headers added.
CS-2026-010 Broken Auth on Token Refresh High Fixed Refresh token rotation and blocklist implemented. Password change now revokes all tokens.
CS-2026-011 Mass Assignment on User Profile Medium Fixed Allowlist-based input filtering applied.
CS-2026-012 Excessive Data Exposure in /users Medium Fixed Response schema trimmed to required fields only.
CS-2026-013 API Versioning Leaks Deprecated Routes Low Fixed Deprecated v1 routes removed from production API gateway.

Remediation SLA Tracking

The table below records, for each finding, the date it was fixed and the number of days that took against Acme SaaS's remediation SLA. The clock starts at the v1.0 report date (13 February 2026), when every finding was communicated. The SLA targets are Critical 7 days, High 14 days, Medium 30 days, and Low or Info 90 days. SOC 2 and ISO 27001 do not set specific remediation deadlines; they require you to define an SLA and evidence that you met it. These targets are Acme SaaS's own policy, shown here as an example. This doubles as evidence that the vulnerability-management control operated: every finding was remediated inside its target, which is what a SOC 2 or ISO 27001 auditor tests.

ID Severity SLA Target Fixed Date Days to Fix Result
CS-2026-001 Critical 7 days 18 February 2026 5 Met
CS-2026-002 Critical 7 days 19 February 2026 6 Met
CS-2026-003 High 14 days 24 February 2026 11 Met
CS-2026-004 High 14 days 25 February 2026 12 Met
CS-2026-005 Medium 30 days 5 March 2026 20 Met
CS-2026-006 Medium 30 days 6 March 2026 21 Met
CS-2026-007 Medium 30 days 7 March 2026 22 Met
CS-2026-008 Low 90 days 11 March 2026 26 Met
CS-2026-009 Info 90 days 12 March 2026 27 Met
CS-2026-010 High 14 days 26 February 2026 13 Met
CS-2026-011 Medium 30 days 9 March 2026 24 Met
CS-2026-012 Medium 30 days 10 March 2026 25 Met
CS-2026-013 Low 90 days 11 March 2026 26 Met
13 of 13
Remediated
All findings verified Remediated at retest close, each inside its SLA target.
Final Report Status
All 13 findings remediated. Report closed clean.
Section 6

Compliance Evidence Package

Included with the Growth Pentest Plan only. The Startup Pentest Plan includes the technical and executive report without this compliance evidence package.

The tables below map all pentest findings to relevant SOC 2 and ISO 27001 controls. This section is formatted for direct inclusion in your audit evidence package. Hand these tables to your auditor as evidence of penetration testing, findings, and remediation.

Two Trust Services Criteria are evidenced by the engagement itself rather than by any single finding, and they are the primary reason a client's SOC 2 auditor asks for this report. CC4.1 requires that the entity uses separate evaluations to ascertain whether the components of internal control are present and functioning; an independent penetration test is a separate evaluation. CC7.1 requires that the entity uses detection and monitoring procedures to identify vulnerabilities; the testing performed here is that identification step. Both appear as the first rows of the SOC 2 table below. The remaining criteria are evidenced by specific findings and their remediation.

Independence of assessors. This engagement was performed by Cybersecify as an independent third party. The assessors had no role in building, operating, or maintaining the controls under test. That separation is what allows the report to stand as separate-evaluation evidence under CC4.1 and allows the client's CPA firm to rely on it during a SOC 2 examination.

A one-page Letter of Attestation (scope, testing dates, methodology, summary result, and retest outcome) is available on request. Clients hand it to auditors or prospects as proof that testing took place, without disclosing the findings themselves. It references the same ISO/IEC 27001:2022 Annex A controls (A.8.8, A.8.29) and SOC 2 criteria used in this report.

SOC 2 Control Mapping

Control ID Control Name Findings Mapped Evidence Status
CC4.1 Separate Evaluations of Internal Control This engagement (all 13 findings) Evidenced
CC7.1 Detection of Vulnerabilities This engagement (all 13 findings), incl. CS-2026-002 All Remediated
CC6.1 Logical Access Security CS-2026-001, CS-2026-003, CS-2026-010 All Remediated
CC6.3 Role-Based Access and Least Privilege CS-2026-001, CS-2026-003, CS-2026-006 All Remediated
CC6.6 System Boundaries and Network Security CS-2026-007 All Remediated
CC7.2 Monitoring of System Components CS-2026-010, CS-2026-008 All Remediated
CC8.1 Change Management CS-2026-004, CS-2026-005, CS-2026-011 All Remediated

The SQL injection finding (CS-2026-002) is mapped to CC7.1. CC6.1 through CC6.7 cover logical and physical access boundaries; an application-layer injection flaw is not a boundary control, so it is evidenced under vulnerability detection (CC7.1) and its parameterized-query fix under change management (CC8.1) rather than under CC6.6.

ISO/IEC 27001:2022 Annex A Control Mapping

Control references use ISO/IEC 27001:2022 Annex A numbering. The 2013 to 2022 transition deadline passed in October 2025, so current certificates use the 2022 controls.

Control ID Control Name Findings Mapped Evidence Status
A.8.3 Information Access Restriction CS-2026-001, CS-2026-003, CS-2026-006, CS-2026-010 All Remediated
A.8.2 Privileged Access Rights CS-2026-003, CS-2026-010 All Remediated
A.8.20 Networks Security CS-2026-007 All Remediated
A.8.28 Secure Coding CS-2026-002 All Remediated
A.8.15 Logging CS-2026-008, CS-2026-010 All Remediated
A.8.32 Change Management CS-2026-004, CS-2026-005, CS-2026-011 All Remediated
A.8.8 Management of Technical Vulnerabilities This engagement (all 13 findings) All Remediated
Section 7

Appendix

A. Tools

Each engagement records the exact tool versions in use at the time. Versions vary by engagement and are captured in the live report shared with the client. The list below covers the tools we routinely use during a Growth Pentest Plan engagement.

Tool Purpose
Burp Suite Professional HTTP proxy, manual testing, active scanning
Nuclei Template-based vulnerability scanning
ffuf Directory and parameter fuzzing
sqlmap SQL injection validation
Nmap Port scanning and service enumeration
Custom Python scripts IDOR enumeration, token lifecycle testing
Subfinder Subdomain enumeration
OpenEASD External attack surface discovery (our free open-source tool)

Run the first step yourself, free

Every pentest we run starts by mapping what an attacker can see from the outside: subdomains, exposed services, forgotten assets, and misconfigured DNS. That discovery step runs on OpenEASD, our free, open-source external attack surface tool. You can run the same scan on your own domain in a few minutes, with no engagement required. Run a free OpenEASD snapshot at cybersecify.com/openeasd, or see a sample external attack surface report at cybersecify.com/sample-openeasd-report first.

B. Testing Team Credentials

Assessor Role Credentials
Rathnakara GN Lead Assessor OSCP, Masters of Science in Cyber Security
Ashok Kamat Engagement Lead CCIO. Domain expertise across CTI, compliance, and client delivery
Cybersecify Team Supporting Capabilities CISSP, CEH, ISO 27001 Lead Auditor, CREST, CompTIA PenTest+

C. Report Distribution

Recipient Role Access Level
[REDACTED] CTO, Acme SaaS Full Report
[REDACTED] VP Engineering, Acme SaaS Full Report
[REDACTED] CEO, Acme SaaS Executive Summary Only
[REDACTED] External Auditor Compliance Evidence Package Only

D. Glossary

Term Definition
IDOR Insecure Direct Object Reference. A vulnerability where the application exposes internal object identifiers without proper authorization checks.
CVSS Common Vulnerability Scoring System. An industry standard for rating the severity of security vulnerabilities on a 0 to 10 scale, maintained by FIRST. CVSS v3.1 (released 2019) remains widely used by NVD, CISA KEV, and most vendor advisories. CVSS v4.0 (released November 2023) introduces Attack Requirements (AT), separates Vulnerable System (VC/VI/VA) from Subsequent System (SC/SI/SA) impacts, and replaces the v3.x Scope metric. Both versions use identical severity bands.
CWE Common Weakness Enumeration. A categorization system for software security weaknesses maintained by MITRE.
Grey-box Testing A testing approach where the assessor has partial knowledge of the system (e.g., authenticated access) but not full source code access.
OWASP ASVS Application Security Verification Standard. A framework of security requirements and controls for web application security testing.
PTES Penetration Testing Execution Standard. A methodology defining the phases and procedures for conducting penetration tests.
SOC 2 Service Organization Control 2. An auditing framework for service providers that evaluates security, availability, processing integrity, confidentiality, and privacy controls.
JWT JSON Web Token. A compact token format used for securely transmitting information between parties as a JSON object.

Disclaimer

Penetration testing is inherently limited by the scope, time, and resources allocated to the engagement. Therefore, no individual or organization can guarantee identifying all security issues. The testing we performed is conducted on a best-effort basis, and the findings reported herein are specific to the environment provided for testing.

The dynamic nature of technology and the constant evolution of new attack techniques mean that security assessments can only provide a snapshot of the current security posture.

Limitations of Testing

The reported findings apply exclusively to the tested environment and configurations during testing. Information systems rely on human factors and can be inherently vulnerable to human error. While we have endeavoured to identify significant security vulnerabilities in the analysed applications, it is impossible to assure that all potential vulnerabilities have been discovered.

Scope of Findings

The recommendations provided are based on the information, technologies, and known threats as of the date of this report. As technologies and risks evolve, so will the nature of vulnerabilities and the necessary mitigation measures.

Continued Vigilance

Security is an ongoing process. Regular assessments and updates to security measures are essential to maintaining a strong security posture. We recommend periodic penetration testing and continuous monitoring to adapt to new threats and vulnerabilities.

By accepting this report, you acknowledge the testing's inherent limitations and understand the necessity of ongoing security vigilance.

Note: This sample report is based on a Growth Pentest Plan engagement (2 scopes, 10 business days). It includes SOC 2 + ISO 27001 compliance mapping, real-world attack simulation, and 1 free retest within one month. The Startup Pentest Plan (1 scope, 5 business days) follows the same report structure and methodology with the same retest cadence but covers a single scope without compliance mapping. View plan details. Looking for what an external attack surface report looks like? See the sample OpenEASD report.

This is a sample. Your report would be about your stack.

Get a real pentest with a report like this.

Both founders test every engagement. On the Growth plan we map every finding to SOC 2 and ISO 27001 controls (Section 6). One free retest within one month. Transparent published pricing, no sales-call gate.

Book a 30-minute founder call: cybersecify.com/book  ·  Email: contact@cybersecify.com  ·  Pricing: cybersecify.com/pricing  ·  Free external attack surface scan: cybersecify.com/openeasd

End of Report

Penetration Test Plan vs Penetration Test Report

These get searched for interchangeably and they are two different documents, produced at two different points in an engagement. A penetration test plan is agreed before any testing happens and authorises the work. A penetration test report is delivered after testing finishes and records what was found. If someone has asked you for one, the split below is what they expect to receive.

NIST SP 800-115 keeps them structurally apart: assessment planning is Section 6, reporting sits in Section 8 under post-testing activities, and Appendix B of the same guide is a rules of engagement template. Section 6.5 states that an assessment plan should answer five questions. They make a usable checklist to hold any proposed engagement against, including ours.

The five questions a test plan has to answer

What is the scope of the assessment?

The exact hosts, applications, API base paths and versions authorised for testing, and, just as importantly, the systems explicitly not authorised. In the report above that is Scope 1 (app.acmesaas.io) and Scope 2 (api.acmesaas.io/v2), with denial of service, social engineering, physical security and third-party SaaS integrations named as out of scope.

Who is authorised to conduct the assessment?

The named assessors and their credentials, plus the source addresses the traffic will come from, so your monitoring team does not open an incident on the test. In the report above the assessors are named on the cover page and again in Appendix B.

What are the assessment logistics?

The testing window, the environment (staging, production or both), the credentials and roles provided, the escalation contact, and the permitted testing hours. Above, that is 5 business days per scope, grey-box with a Member account and an Admin account, active testing against staging and read-only validation against production.

How should sensitive data be handled?

How evidence containing real customer data is collected, stored, transmitted and destroyed, and who is on the distribution list for the finished report. Appendix C above is that distribution list, including the row that gives an external auditor the compliance package and nothing else.

What should occur in the event of an incident?

What happens if testing disrupts a service, or if an assessor finds evidence that someone got there first: who is contacted, how quickly, and whether testing pauses while that is handled.

What belongs in each document

Question Test plan (agreed before) Test report (delivered after)
What is it for Authorises and bounds the work Evidences what was done and what was found
Targets Proposed targets and explicit exclusions Targets actually tested, plus anything that could not be reached
Timing The agreed testing window The dates testing actually ran and the date of issue
Method Standards to be applied and the access model (black, grey or white box) Standards actually applied, tools used, and how each finding was produced
Findings None. The plan predates the testing Severity, CVSS, evidence, business impact, remediation, current status
Signed by The client and the testing firm, before work starts The named assessors, at issue
Read by Procurement, legal, and the system owner authorising the test Engineering, leadership, auditors, enterprise customers, investors

In the sample above, the plan is visible inside the report. Section 2, Scope and Methodology, restates every element that was agreed before testing began: the two in-scope targets, the environments, the 5 business days per scope, the grey-box approach with two credential sets, the standards, the tools, and the out-of-scope list. That is deliberate. A report with a vague scope section cannot be checked against the engagement it claims to document, which is the first thing a reviewer tries to do.

If your procurement or audit process needs the plan as a separate signed document before work can start, raise it when you get in touch and we will tell you what we can put in writing before kickoff.

How to Tell a Real Penetration Test Report From Scanner Output

Plenty of documents sold as penetration test reports are an automated scan with a cover page on it. Both cost money, only one of them survives contact with an auditor or an enterprise security review. Six things separate them, and you can check all six in about two minutes without a security background.

A named tester, not a tool version

A real report says who tested and what they hold. Scanner output credits a product and a scan engine build number. In the report above the assessors are named on the cover and their credentials are listed in Appendix B.

Reproduction steps against your application

Look for numbered steps plus the exact request and response that triggered the issue, on your endpoints. Scanner output gives a generic description of the vulnerability class and a link to a public advisory, which your engineers cannot act on directly.

Business impact written in your context

A real finding names the data, the users, or the revenue at risk in your product. Boilerplate impact text that would read identically for any customer is the tell that no human considered your system.

Authorisation and business logic findings

Automated tools cannot reason about who should be allowed to do what, so they do not surface an IDOR in a billing flow or a token refresh that never expires. If every finding is a missing header, an outdated library or a TLS setting, the application logic was never tested. The two critical findings above are exactly the class scanners miss.

Findings chained together

A tester shows how two medium issues combine into one high-severity path. A scanner scores every finding in isolation because it has no view of the others and no ability to try the combination.

An honest statement of limits

A real report says what was out of scope, what the time-box did not cover, and that testing is a snapshot. A tool cannot write that section because it does not know what it was not pointed at.

A finding count is not a quality signal in either direction. Automated output usually carries far more rows because nothing in it has been validated by hand, and a validated report is shorter for exactly that reason.

What an Auditor Checks in a Penetration Test Report

If the report is going into a SOC 2 or ISO 27001 file, or into an enterprise customer security review, it stops being a technical document and becomes evidence. Evidence gets checked differently. Seven things get looked at, usually in this order.

  1. Date and version. Is this the current version, and does a revision history show what changed between issues? An undated report cannot be tied to a point in the audit period.
  2. Scope match. Do the targets named in the report match the system inside the audit boundary? A report covering a different application, or a staging environment with no statement that it mirrors production, leaves the control open.
  3. Named methodology. Does it cite a recognised standard rather than describing an in-house process? OWASP WSTG v4.2, OWASP ASVS 5.0.0, OWASP API Security Top 10 2023, PTES and NIST SP 800-115 are the ones auditors recognise on sight.
  4. A published rating scale. Every finding needs a severity, and the report itself needs to define what each severity band means. CVSS scores with the vector shown let the rating be reproduced rather than taken on trust.
  5. Status per finding. Open or remediated, on every row, in the version being filed.
  6. Retest evidence. Anything marked closed should be closed because it was re-tested and re-evidenced, not because it was reported as fixed. This is the single most common gap, and it is the one that generates follow-up questions.
  7. Control mapping. For SOC 2 and ISO 27001, each finding tied to the control it affects, so the report files as evidence instead of being read as a narrative your compliance lead has to translate by hand.

The report above carries all seven. The SOC 2 and ISO/IEC 27001:2022 Annex A control mapping in Section 6 is included on the Growth Pentest plan; Startup plan reports are identical in every other respect. To be explicit about what we are: we do audit preparation work. We are not an audit firm and we do not issue certifications.

What Makes Our Reports Different

Most pentest reports are either too generic to act on or too technical for leadership. Ours are designed for both audiences.

Tested by named founders, not anonymous juniors

Every engagement is led by Rathnakara GN (OSCP) and Ashok Kamat (CCIO), named in the report. You know exactly who tested your stack, not a report signed only by a firm.

Manual depth, not a scanner dump

Automated tools supplement coverage, but every Critical and High finding is found through manual exploitation, business-logic testing, and chained attacks that scanners miss.

Reproduction steps and real evidence

Each finding ships with numbered steps to reproduce, the raw HTTP request and response, and annotated screenshots, so your engineers can confirm and fix without a follow-up call.

Fix direction you can act on

Every finding points to the exact affected endpoint and the direction of the fix, with illustrative code patterns you adapt to your own stack. We tell you where and how, you own the change.

Free retest and a clean remediation trail

One free retest within a month of the report re-verifies every finding. The final v2.0 report shows the full fixed-or-open trail, the evidence a prospect or auditor actually trusts.

Compliance-ready format (Growth plan)

On the Growth plan, every finding maps to SOC 2 and ISO 27001 controls, formatted to hand straight to your auditor. Startup reports use the same format without the compliance mapping.

Curious what an attacker sees on your domain?

That report was one company's stack. Before you even talk to us, you can see your own external attack surface for free. OpenEASD is our open-source tool that maps what an attacker can find from outside your domain: exposed subdomains, forgotten services, DNS and email-spoofing gaps, and TLS issues. It is passive and external only, so nothing is touched, logged into, or exploited. Run a snapshot in a few minutes, with no engagement required.

Get this report as a PDF

Enter your details and we'll email you the PDF copy right away. Useful if you want to share it with your team or save it for compliance archives.

Work email preferred so we can tailor the reply. Personal email is fine too.
Select a service
Select if you remember

We email you the PDF link and keep your details to follow up on whether a similar engagement fits your stack. No spam, no third-party sharing.

Frequently Asked Questions

What is included in a penetration test report?

A penetration test report includes an executive summary, the scope and methodology, a findings summary table, and a detailed entry for each finding. Each finding lists a severity rating, a CVSS score, the CWE and OWASP category, the affected endpoint, a description, steps to reproduce, evidence, business impact, and remediation guidance. A retest section and, for the Growth plan, a SOC 2 and ISO 27001 control mapping are also included.

What does CVSS severity mean in a pentest report?

CVSS is the Common Vulnerability Scoring System, a standard way to rate how serious a vulnerability is on a scale of 0.0 to 10.0. Higher scores mean higher severity. The bands are Critical (9.0 to 10.0), High (7.0 to 8.9), Medium (4.0 to 6.9), Low (0.1 to 3.9), and Info (0.0). This report scores each finding under both CVSS v3.1 and v4.0 and documents the full vector so the score can be reproduced.

How is a vulnerability finding evidenced in the report?

Each finding is evidenced with numbered steps to reproduce, the raw HTTP request and response that demonstrate the issue, and annotated screenshots. Sensitive values are marked as redacted in this sample. The evidence lets your engineering team confirm the issue and verify the fix without guesswork.

What is a retest section in a pentest report?

A retest section records the result of re-checking every original finding after your team has applied fixes. It shows whether each finding is now remediated or still open, along with notes on what changed. Both Cybersecify pentest plans include one free retest within one month of the initial report, and the updated report is reissued at retest close.

What is the difference between a penetration test plan and a penetration test report?

A penetration test plan is agreed before testing starts and a penetration test report is delivered after it finishes. The plan is the authorisation document: it records what is in scope, what is excluded, who is authorised to test, the environment and credentials provided, the testing window, the rules of engagement, and how sensitive data will be handled. The report records what was actually found, with evidence, severity, business impact, remediation guidance and status per finding. NIST SP 800-115 keeps them in separate phases, assessment planning in Section 6 and reporting under post-testing activities in Section 8. In a well-written report the plan is carried forward into the scope and methodology section so a reader can check the work against what was agreed.

How do you tell a real penetration test report from scanner output?

Six tells separate the two. A real report names the assessor and their credentials. It evidences each finding with the exact request and response plus numbered steps to reproduce against your application, not a generic description. It rates business impact in your context, naming the data or the users at risk. It contains business logic and authorisation findings, which scanners cannot reason about. It chains findings together the way an attacker would. And it states what was out of scope and what the testing could not cover. Scanner output has generic titles, boilerplate remediation copied from a tool database, no named tester, no reproduction path specific to your stack, and a finding count far larger than a human would report because nothing has been validated.

What does an auditor look for in a penetration test report?

An auditor checks that the report is dated and version controlled, that the scope named in it matches the system inside the audit boundary, that the methodology cites a recognised standard such as OWASP WSTG v4.2, OWASP ASVS 5.0.0 or PTES, that every finding carries a severity and a current status, and that anything marked closed was verified by a retest rather than accepted on the client word. For SOC 2 and ISO 27001 work the auditor also wants each finding mapped to the control it affects, so the report can be filed as evidence rather than read as a narrative. A report with no version history, no dates and no retest trail usually generates more audit questions than it answers.

Ready to See Your Own Report?

Get a pentest quote, or book a 30-min discovery call to scope your needs first.