Penetration Test Report Example
A real Cybersecify report, redacted and published in full. Read every page below, no form.
Looking for a specific kind of report? The Amazon SP-API DPP set covers network, web with API, and cloud from one engagement. The external attack surface report is what the free monthly scan produces. The report below is the general-purpose one.
Growth Pentest Plan report, two scopes over 10 business days. Company and targets are fictional (Acme SaaS, app.acmesaas.io, api.acmesaas.io); sensitive values are marked [REDACTED]. Findings, methodology, severities and remediation reflect the actual work. Startup Plan reports omit the SOC 2 and ISO 27001 mapping and carry OWASP Top 10 categories rather than WSTG test-case references.
Web & APIPenetration Test Report
Acme SaaS, Application Security Assessment
Prepared forAcme SaaS Pvt. Ltd.
Prepared byCyber Secify Consulting (OPC) Private Limited
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.
Document Details
| Title | Details |
|---|---|
| Application Name | Acme SaaS Platform (app.acmesaas.io + api.acmesaas.io/v2) |
| Client | Acme SaaS Pvt. Ltd. |
| Engagement Type | Grey-box Penetration Test (Growth Pentest Plan, 2 scopes) |
| Document Version | 2.0 (Final) |
| Date of Issue | 14 August 2026 |
| Classification | Confidential. Do not distribute. |
| Prepared By | Cybersecify Consulting (OPC) Private Limited |
| Lead Assessors | Rathnakara GN (OSCP), Ashok Kamat (CCIO) |
Revision History
| Version | Date | Change Description |
|---|---|---|
| 1.0 | 17 July 2026 | Initial report issued at engagement close. 13 findings: 2 Critical, 3 High, 5 Medium, 2 Low, 1 Info. All Open. |
| 2.0 | 14 August 2026 | Post-retest final report. All 13 findings verified Remediated. Compliance evidence package attached for Growth Plan SOC 2 + ISO 27001 audit prep. |
Table of Contents
- Executive SummaryOverall risk, top priorities, statistics
- Scope and MethodologyFrameworks, in-scope targets, risk rating
- Findings SummaryAll 13 findings, CVSS scoring, status
- Detailed Findings2 of 13 shown in this preview
- Retest Resultsv1.0 to v2.0 remediation trail
- Compliance Evidence PackageSOC 2 + ISO 27001 control mapping (Growth Plan)
- AppendixGlossary, references, contact
- DisclaimerScope limits, legal terms
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 6 July 2026 to 17 July 2026 across 10 business days (5 business days per scope), with reporting prepared concurrently. The v1.0 initial report was delivered on 17 July 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 August 2026 (all 13 findings remediated and verified).
Key Statistics
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.
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 |
Every finding in this report names the test case it came from, in the findings summary tables in Section 3 and in the finding entry itself. That is how a reader checks the work against the methodology instead of taking the list above on trust. Scope 1 findings cite an OWASP WSTG v4.2 identifier, for example WSTG-ATHZ-04 for the insecure direct object reference in Section 4. Scope 2 findings cite an OWASP API Security Top 10 2023 item instead, because WSTG v4.2 contains exactly one API test case (WSTG-APIT-01, Testing GraphQL) and Scope 2 is a REST API. Citing a web test case against a REST endpoint would look thorough and mean nothing.
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.
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 | Test Case | Severity | CVSS v3.1 | CVSS v4.0 | Status |
|---|---|---|---|---|---|---|
| CS-2026-001 | IDOR in Billing API (Invoice Access) | WSTG-ATHZ-04 | Critical | 9.1 | 7.2 | Fixed |
| CS-2026-002 | SQL Injection in Search Endpoint | WSTG-INPV-05 | Critical | 9.8 | 9.3 | Fixed |
| CS-2026-003 | Broken Access Control in Admin Panel | WSTG-ATHZ-02 | High | 8.2 | 8.8 | Fixed |
| CS-2026-004 | Stored XSS in User Profile Bio | WSTG-INPV-02 | High | 7.1 | 7.0 | Fixed |
| CS-2026-005 | CSRF on Email Change Endpoint | WSTG-SESS-05 | Medium | 6.5 | 6.9 | Fixed |
| CS-2026-006 | Insecure Direct Object Reference in File Export | WSTG-ATHZ-04 | Medium | 5.8 | 5.9 | Fixed |
| CS-2026-007 | Missing Rate Limiting on Login | WSTG-ATHN-03 | Medium | 5.3 | 6.9 | Fixed |
| CS-2026-008 | Verbose Error Messages Leaking Stack Traces | WSTG-ERRH-02 | Low | 3.1 | 2.3 | Fixed |
| CS-2026-009 | Missing Security Headers (X-Content-Type-Options, CSP) | WSTG-CONF-02 | 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 | Test Case | Severity | CVSS v3.1 | CVSS v4.0 | Status |
|---|---|---|---|---|---|---|
| CS-2026-010 | Broken Authentication on API Token Refresh | API2:2023 | High | 7.5 | 8.7 | Fixed |
| CS-2026-011 | Mass Assignment on User Profile Update | API3:2023 | Medium | 6.3 | 6.9 | Fixed |
| CS-2026-012 | Excessive Data Exposure in /users Endpoint | API3:2023 | Medium | 4.3 | 5.3 | Fixed |
| CS-2026-013 | API Versioning Endpoint Leaks Deprecated Routes | API9:2023 | Low | 2.0 | 1.8 | Fixed |
Detailed Findings
Two of 13 findings are shown in full below. The remaining 11 findings follow the same format in the complete report.
IDOR in Billing API (Invoice Access)
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
- Authenticate as User A (Organisation: Acme Test Org, Role: Member). Navigate to the Billing section and open any invoice.
- Note the invoice ID in the request URL:
/api/v2/billing/invoices/INV-2026-00142 - Using Burp Suite Repeater, modify the invoice ID to
INV-2026-00098(an invoice belonging to a different organisation). Send the request. - 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
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
{
"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-06-15"
}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.
// 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 |
Broken Authentication on API 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
- 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).
- 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.
- Send a POST request to
/api/v2/auth/token/refreshwith the expired access token in the Authorization header and the refresh token in the request body. - 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.
- Change the user's password from another session. Attempt the refresh again. The endpoint still issues a valid token for the old session.
Evidence
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"
}{
"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.
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 |
Retest Results
How a retest report differs from the first report.
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
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 (17 July 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 | 22 July 2026 | 5 | Met |
| CS-2026-002 | Critical | 7 days | 23 July 2026 | 6 | Met |
| CS-2026-003 | High | 14 days | 28 July 2026 | 11 | Met |
| CS-2026-004 | High | 14 days | 29 July 2026 | 12 | Met |
| CS-2026-005 | Medium | 30 days | 6 August 2026 | 20 | Met |
| CS-2026-006 | Medium | 30 days | 7 August 2026 | 21 | Met |
| CS-2026-007 | Medium | 30 days | 10 August 2026 | 24 | Met |
| CS-2026-008 | Low | 90 days | 12 August 2026 | 26 | Met |
| CS-2026-009 | Info | 90 days | 13 August 2026 | 27 | Met |
| CS-2026-010 | High | 14 days | 30 July 2026 | 13 | Met |
| CS-2026-011 | Medium | 30 days | 10 August 2026 | 24 | Met |
| CS-2026-012 | Medium | 30 days | 11 August 2026 | 25 | Met |
| CS-2026-013 | Low | 90 days | 12 August 2026 | 26 | Met |
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 lets the report serve as separate-evaluation evidence under CC4.1. Whether your CPA firm relies on it in the SOC 2 examination is their judgement under their own professional standards, not something we can promise on their behalf.
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 | Protection Against External Threats | 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.29 | Security Testing in Development and Acceptance | This engagement (scope, methodology, and retest) | Evidenced |
| A.8.8 | Management of Technical Vulnerabilities | This engagement (all 13 findings) | All Remediated |
The last two rows are evidenced by the engagement rather than by any single finding, and they are the two an ISO 27001 auditor asks for first. A.8.29 covers security testing in development and acceptance and is evidenced by the test itself, performed against the scope and methodology recorded in Section 2. A.8.8 covers management of technical vulnerabilities and is evidenced by the findings register, the severity ratings, and the dated remediation trail in Section 5. A.8.25 secure development life cycle is not claimed here: it is evidenced by your development process, not by a test report.
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) uses the same report structure and the same retest cadence on a single scope. Two things differ: there is no compliance mapping section, and findings are classified against the OWASP Top 10 rather than cited to a per-finding WSTG test case, because Startup covers the OWASP Top 10 rather than systematic WSTG test-case coverage. 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
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.
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 penetration test report?
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. A complete one carries a severity rating per finding, the methodology test case the finding came from, steps to reproduce, evidence such as HTTP request and response pairs, business impact in plain language, remediation guidance a developer can act on, and a retest section recording the fixed state. The report on this page is a real redacted example of exactly that.
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?
Seven 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 names the methodology test case behind each finding, for example an OWASP WSTG identifier, so you can look up what was actually tested instead of trusting a framework logo on the cover. 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 is in a penetration test plan?
A penetration test plan records what will be tested and on what terms, before any testing happens. It names the authorised targets and the explicit exclusions, who is authorised to test and the source addresses their traffic will come from, the access model and credentials provided, the testing window and permitted hours, the rules of engagement, how evidence containing sensitive data is stored and destroyed, what happens if testing disrupts a service, and who signs it. NIST SP 800-115 Section 6.5 sets out five questions an assessment plan should answer: what is in scope, who is authorised to conduct the assessment, what the logistics are, how sensitive data should be handled, and what should occur in the event of an incident. A worked plan covering all five is written out section by section on our penetration test plan example page.
What is an attack and penetration test plan?
It is another name for a penetration test plan. The phrasing differs between organisations and procurement templates, and the contents do not change: authorised targets and explicit exclusions, the named assessors, the access model and credentials provided, the testing window, the rules of engagement, sensitive data handling, the incident and escalation procedure, the deliverables, and sign-off by whoever owns the system. If a security questionnaire or a vendor onboarding form asks you for an attack and penetration test plan, the worked attack and penetration test plan example on our penetration test plan example page is the shape of the document it is asking for.
What is the difference between CWE and CVSS in a pentest report?
CWE and CVSS answer two different questions about the same finding. CWE, the Common Weakness Enumeration, names the class of weakness, for example CWE-639 Authorization Bypass Through User-Controlled Key. It is an identifier and carries no score. CVSS, the Common Vulnerability Scoring System, rates how serious that instance is from 0.0 to 10.0, and the vector string behind the score records the assumptions the score was built from. A finding with only a CWE tells you what kind of problem it is and nothing about how urgent it is. A finding with only a number tells you how urgent it is with no way to check the reasoning. A report worth acting on carries both, plus the vector, on every finding.
How does a retest report differ from the original penetration test report?
The original report, version 1.0, is issued when active testing finishes and records every finding as open. The retest report, version 2.0, is issued after your team has applied fixes and each original finding has been re-checked. It is a replacement document rather than an amendment, which is why it takes a major version number: a reader holding version 2.0 does not need version 1.0 to act on it. Nothing is removed from it either, because a report listing only what is still broken cannot evidence that anything was fixed. Both Cybersecify pentest plans include one free retest within one month of the version 1.0 report, and the retest itself takes 1 to 3 business days.
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.
How do I map penetration testing results to compliance controls like SOC 2 or ISO 27001?
Mapping happens at two levels. The engagement itself evidences the controls that require testing to take place: SOC 2 CC4.1 separate evaluations and CC7.1 detection of vulnerabilities, and ISO/IEC 27001:2022 Annex A control A.8.29 security testing in development and acceptance. Each individual finding then maps to the control it affects, so an authorisation flaw lands on CC6.1 and CC6.3 and on A.8.3 information access restriction, while an injection flaw lands on CC7.1 and on A.8.28 secure coding. The findings register and its dated remediation trail together evidence A.8.8 management of technical vulnerabilities. Section 6 of the report on this page shows both tables filled in for all 13 findings, with an evidence status per control. The compliance mapping section is included with the Growth Pentest Plan; Startup Plan reports use the same report structure without it.
What does an ISO 27001 auditor expect to see in a penetration test report?
An ISO 27001 auditor reads the report as evidence against a control rather than as a narrative, so the things they check are mostly structural: a dated and version controlled document, a scope that matches the systems inside your ISMS boundary, a named independent assessor, a methodology cited to a recognised standard such as OWASP WSTG v4.2 or OWASP ASVS 5.0.0, a severity and a current status on every finding, and a retest that verified anything marked closed. On top of that they want the Annex A mapping. A.8.29 security testing in development and acceptance is evidenced by the test itself, performed against a defined scope with a documented methodology, and A.8.8 management of technical vulnerabilities is evidenced by the findings register, the severity ratings and the dated remediation trail. Cybersecify supplies that testing evidence. The certificate itself is issued by a separate accredited certification body, which we are not.
How is ISO 27001 Annex A mapping different from SOC 2 Trust Services Criteria mapping?
The same findings are mapped twice, into two vocabularies, because two different questions are being asked of them. SOC 2 maps to Trust Services Criteria numbered CC1 through CC9, and a CPA firm tests whether a control was designed appropriately and operated across an observation period, which is why CC4.1 separate evaluations cares that an independent test actually happened inside that window. ISO 27001 maps to Annex A controls numbered A.5 through A.8, and a certification body audits your ISMS against the controls you selected in your Statement of Applicability, so a control you justified as excluded there is not evidence you owe. The practical effect on the report is two tables rather than one: the SOC 2 table points at CC4.1, CC7.1, CC6.1 and CC8.1, and the ISO table points at A.8.29, A.8.8, A.8.3 and A.8.32. Neither the certificate nor the attestation comes from us. ISO 27001 certification is issued by an accredited certification body and a SOC 2 report is issued by a licensed CPA firm; we supply the testing evidence they ask for.
What should an ISO 27001 pentest scope cover, and what do I ask a vendor to follow?
ISO/IEC 27001:2022 publishes no pentest scope template and sets no testing frequency. A.8.29 requires that security testing is defined and carried out; your own risk assessment and Statement of Applicability decide what gets tested and how often. In practice the scope should cover the systems inside your ISMS boundary that handle the information the certificate is about, which for a SaaS product usually means the production application, its authenticated roles, and its APIs. Ask a vendor to commit to five things in writing before testing starts: the named targets and the explicit exclusions, the testing window and rules of engagement, a methodology cited to a version you can look up such as OWASP WSTG v4.2, a severity and a status on every finding, and the Annex A control mapping included in the deliverable itself. Our penetration test plan example is the shape of that first document, and Section 6 of the report on this page is the mapping.
Ready to See Your Own Report?
Get a pentest quote, or book a 30-min discovery call to scope your needs first.
This report is a Growth Pentest: two scopes, ten business days, INR 1,79,999. The SOC 2 and ISO 27001 control mapping in it is Growth-only. A single scope is the Startup Pentest at INR 74,999 in five business days. Both founders work every engagement, and nothing is invoiced until a mutual NDA and a SOW are signed on both sides, so scope, timeline and deliverables are agreed in writing before any money moves.
Wondering who we have done this for? We do not publish client case studies. Here is why, and four ways to evaluate us without it.