Markdown Editor

Penetration Test Report Template (PTES, OWASP WSTG)

Pentest report: executive summary, scope and rules of engagement, PTES phases, WSTG coverage, CVSS ratings, findings, retest

Тестування та якістьПовнийPTES; OWASP Web Security Testing GuideCC BY-SA 4.0pentestreport

Як використовувати: Use it to report authorised security testing to both management and engineers. Record scope, rules of engagement and authorisation first, then each finding with evidence, CVSS vector and remediation. The main pitfall is unredacted secrets or personal data in evidence.

Перегляд

Penetration Test Report: [Client or system name]

Penetration test report. The engagement phases follow the Penetration Testing Execution Standard (PTES), and web application test coverage is organised by the test categories of the OWASP Web Security Testing Guide (WSTG). Replace every [bracketed] value and every finding marked Example. For authorised testing only: never test a system without written permission from its owner.

Document control

FieldValue
Document ID[PT-CLIENT-2026-001]
Client / system owner[Organisation name]
Target[Application or environment name and version]
Testing organisation[Internal red team / external testing firm]
Engagement datesYYYY-MM-DD to YYYY-MM-DD
Report version[0.1]
Status[Draft / Final / Retest update]
Classification[Confidential: restricted distribution]
Authorisation reference[Signed authorisation letter or contract ID, date]
Last updatedYYYY-MM-DD

Approvals

RoleNameDecisionDate
Lead tester[@name][Issued]YYYY-MM-DD
Quality reviewer (testing side)[@name][Reviewed]YYYY-MM-DD
Client security owner[@name][Accepted / Accepted with comments]YYYY-MM-DD

Distribution

NameOrganisationVersion receivedDate
[@name][Client][1.0]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]Draft for technical review
1.0YYYY-MM-DD[@name]Example: Final report issued
1.1YYYY-MM-DD[@name]Example: Retest results added; F-01 and F-03 closed

Contents

1. Executive summary

1.1 Overall assessment

Example: Testing of the customer portal between YYYY-MM-DD and YYYY-MM-DD found 1 high, 2 medium and 1 low severity issue. The most serious allows a logged-in customer to view and alter other customers' invoices by changing a number in the address bar, which would expose billing data of all [n] customers. No issue allowed access without an account. Authentication, transport security and session handling were well implemented.

Overall risk rating: [Critical / High / Medium / Low]

1.2 Findings by severity

SeverityCountFixed at retest
Critical0
High1[1]
Medium2[1]
Low1[0]
Informational2Not applicable

1.3 Key recommendations

  1. Example: Enforce object-level authorisation on every invoice and order endpoint (F-01) before the next release.
  2. Example: Encode user content on output across the portal and add a Content Security Policy (F-02).
  3. Example: Add rate limiting and lockout monitoring to login (F-03).

1.4 Strengths observed

  • [Example: TLS configuration rated strong; HSTS enabled with preload.]
  • [Example: Session cookies set with Secure, HttpOnly and SameSite attributes.]

2. Scope and rules of engagement

2.1 Targets in scope

TargetTypeEnvironmentNotes
Example: https://portal.example.comWeb applicationProductionRead-only on payment flows
Example: https://api.example.com/v2REST APIProductionOpenAPI file supplied
Example: 203.0.113.10-203.0.113.20External hostsProductionNetwork services only
[Target][Type][Environment][Notes]

2.2 Out of scope

  • [Example: third-party payment provider pages and domains.]
  • [Example: denial-of-service and load testing.]
  • [Example: social engineering of staff.]

2.3 Rules of engagement

ItemAgreement
Test type[Grey box: two customer accounts and one support account provided]
Testing windows[Weekdays 09:00-18:00 client time zone]
Source IP addresses of testers[198.51.100.25, 198.51.100.26]
Data handlingNo exfiltration of real customer data beyond the minimum needed as proof; proofs redacted
Destructive actionsNot permitted without prior written approval per action
Emergency contact[Name, phone] for critical findings and incidents
Critical finding notificationWithin [4 hours] of discovery, by phone and encrypted email
Authorisation[Letter reference, signed by system owner on YYYY-MM-DD]

2.4 Limitations

[Example: MFA enrolment flow could not be tested because test accounts were pre-enrolled; API rate limits slowed automated scanning, so coverage of /v2/reports is partial.]

3. Methodology

3.1 Engagement phases (PTES)

PhaseActivities performedOutput
Pre-engagement interactionsScope, rules of engagement, authorisation, contactsSection 2
Intelligence gatheringDNS and certificate enumeration, public code and document search, technology fingerprintingAsset list, technology stack (Appendix A)
Threat modellingIdentified assets (billing data, accounts), threat actors (external attacker, malicious customer), likely attack pathsPrioritised test focus
Vulnerability analysisAutomated scanning plus manual testing by WSTG category (3.2)Candidate vulnerabilities
ExploitationControlled proof of concept for confirmed issues within rules of engagementEvidence for findings
Post-exploitationAssessed reach and value of access gained (data exposed, privilege gained, lateral movement potential) without persistenceImpact statements
ReportingThis report; debrief meetingReport, debrief

3.2 Web application coverage (OWASP WSTG categories)

WSTG categoryTestedCoverage notesFindings
Information GatheringYesFingerprinting, entry point mappingINFO-1
Configuration and Deployment Management TestingYesHeaders, HTTP methods, file extensions, admin interfacesF-04
Identity Management TestingYesRegistration, account provisioning, enumerationNone
Authentication TestingYesLockout, password policy, reset flowF-03
Authorization TestingYesHorizontal and vertical access, IDORF-01
Session Management TestingYesCookie attributes, fixation, timeout, logoutNone
Input Validation TestingYesXSS, injection, SSRF on file importF-02
Testing for Error HandlingYesStack traces, error codesF-04
Testing for Weak CryptographyYesTLS configuration, token randomnessNone
Business Logic TestingPartialRefund and discount logic; limited by test dataINFO-2
Client-side TestingYesDOM XSS, clickjacking, CORS, storageNone
API TestingPartialREST endpoints from OpenAPI fileF-01

3.3 Tools used

ToolPurpose
[Intercepting proxy]Manual testing and request manipulation
[Web vulnerability scanner]Automated discovery, verified manually
[Network scanner]Port and service discovery
[TLS testing tool]Transport security assessment
[Custom scripts]Authorisation matrix testing across accounts

4. Risk rating method

Findings are scored with the Common Vulnerability Scoring System (CVSS) [v3.1 / v4.0] base metrics, published by FIRST. The base score expresses technical severity; the final rating may be adjusted for business context, and any adjustment is explained in the finding.

SeverityCVSS base scoreExpected response
Critical9.0-10.0Fix or mitigate immediately; consider emergency change
High7.0-8.9Fix within [14] days
Medium4.0-6.9Fix within [60] days
Low0.1-3.9Fix within [120] days or accept with justification
Informational0.0 or not scoredConsider as hardening

Vector formats used:

  • CVSS v3.1: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
  • CVSS v4.0: CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Scores are calculated with the official FIRST calculator for the chosen version.

5. Findings summary

IDTitleSeverityCVSSAffected assetsStatus
F-01Example: Insecure direct object reference on invoice APIHigh8.1api.example.com/v2/invoices/{id}[Open / Fixed / Risk accepted]
F-02Example: Stored cross-site scripting in support ticket messagesMedium5.4portal.example.com/support[Status]
F-03Example: No rate limiting on loginMedium5.3portal.example.com/login[Status]
F-04Example: Verbose error messages disclose framework version and stack tracesLow3.7api.example.com[Status]
INFO-1Example: Server banner reveals web server versionInformationalNot scoredportal.example.com[Status]
INFO-2Example: Refund logic not fully tested due to test data limitsInformationalNot scoredRefund flow[Status]

6. Detailed findings

F-01: Insecure direct object reference on invoice API

AttributeValue
SeverityHigh
CVSS v3.18.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
Affected assetsGET and PUT /v2/invoices/{id}
WSTG categoryAuthorization Testing
CWECWE-639 Authorization Bypass Through User-Controlled Key
Status[Open]

Description. The invoice endpoints check that the caller is logged in but not that the invoice belongs to the caller. Invoice IDs are sequential integers, so any customer can read or modify any other customer's invoice.

Evidence. Logged in as test customer A (cust-a@test), the tester requested invoice 10482, which belongs to test customer B:

GET /v2/invoices/10482 HTTP/1.1
Host: api.example.com
Authorization: Bearer [token for customer A, redacted]

HTTP/1.1 200 OK
{"id":10482,"customerId":"[customer B, redacted]","total":"[redacted]", ...}

A PUT with a changed billing address returned 200 OK and the change was visible to customer B.

Impact. Disclosure and modification of billing names, addresses and amounts for all customers; potential invoice fraud by changing payee references. Exposure affects an estimated [n] records.

Remediation.

  1. Enforce object-level authorisation in the invoice service: resolve the invoice through the caller's customer ID, and return 404 when it does not match.
  2. Apply the same check to all endpoints that take an object ID (orders, payments, addresses).
  3. Add automated tests that call each endpoint with another customer's object ID.
  4. Consider non-sequential identifiers as defence in depth, not as the fix.

References. OWASP API Security Top 10, API1 Broken Object Level Authorization; OWASP WSTG Authorization Testing; CWE-639.

F-02: Stored cross-site scripting in support ticket messages

AttributeValue
SeverityMedium
CVSS v3.15.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Affected assetsportal.example.com/support/tickets/{id}
WSTG categoryInput Validation Testing
CWECWE-79 Improper Neutralization of Input During Web Page Generation
Status[Open]

Description. Ticket messages are rendered as HTML without output encoding. A customer can submit markup that runs script in the browser of the support agent who opens the ticket.

Evidence. A message containing <img src=x onerror=alert(document.domain)> triggered an alert showing portal.example.com when opened with the support account. Screenshot: Appendix B, figure 2.

Impact. Script runs in the support agent's session, which can read other customers' tickets. No Content Security Policy limits the effect.

Remediation. Encode output by context in the ticket view (use the framework's default escaping, remove the raw-HTML rendering), sanitise any rich text with an allow-list sanitiser, and deploy a Content Security Policy that forbids inline script.

References. OWASP WSTG Input Validation Testing; OWASP Cross Site Scripting Prevention Cheat Sheet; CWE-79.

F-03: No rate limiting on login

AttributeValue
SeverityMedium
CVSS v3.15.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Affected assetsPOST /login
WSTG categoryAuthentication Testing
CWECWE-307 Improper Restriction of Excessive Authentication Attempts
Status[Open]

Description. 500 consecutive failed logins for one test account from one IP address were all processed with no delay, lockout or CAPTCHA.

Evidence. Request log excerpt and timing summary in Appendix B, table 3.

Impact. Enables password guessing and credential stuffing against customer accounts.

Remediation. Add per-account and per-IP rate limiting with progressive delays, alert on credential stuffing patterns, and offer MFA to customers.

References. OWASP WSTG Authentication Testing; OWASP Authentication Cheat Sheet; CWE-307.

F-04: Verbose error messages

AttributeValue
SeverityLow
CVSS v3.13.7 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Affected assetsapi.example.com (malformed JSON bodies)
WSTG categoryTesting for Error Handling
CWECWE-209 Generation of Error Message Containing Sensitive Information
Status[Open]

Description. Malformed request bodies return a stack trace including framework name, version and internal file paths.

Impact. Helps an attacker select exploits for the exact framework version.

Remediation. Return a generic error with a correlation ID; log details server-side only.

References. OWASP WSTG Testing for Error Handling; CWE-209.

7. Remediation roadmap

PriorityFindingActionOwnerEffortTarget date
1F-01Object-level authorisation in invoice and related services[@api-lead]MediumYYYY-MM-DD
2F-02Output encoding and CSP[@web-lead]LowYYYY-MM-DD
3F-03Login rate limiting and alerting[@platform-lead]MediumYYYY-MM-DD
4F-04, INFO-1Generic errors, remove banners[@platform-lead]LowYYYY-MM-DD
5SystemicAdd authorisation tests to CI for all ID-based endpoints[@test-lead]MediumYYYY-MM-DD

8. Retest results

IDOriginal severityRetest dateBuildResultNotes
F-01HighYYYY-MM-DD[build]Example: FixedRequests for other customers' invoices return 404
F-02MediumYYYY-MM-DD[build]Example: Partially fixedEncoding fixed; CSP not yet deployed
F-03MediumYYYY-MM-DD[build]Example: FixedLockout after 10 attempts; alert confirmed by client
F-04LowYYYY-MM-DD[build]Example: Not fixedScheduled for next release

9. Appendices

Appendix A: Asset and technology inventory

AssetTechnology observedSource
Example: portal.example.com[Web server], [front-end framework]Response headers, page source
[Asset][Technology][Source]

Appendix B: Evidence index

RefFindingDescriptionStored at
Fig. 1F-01Request and response pair, redacted[Secure evidence store path]
Fig. 2F-02Screenshot of script execution[Path]
Table 3F-03Login attempt timings[Path]

Appendix C: Test accounts and clean-up

Account or artefactCreated forRemoved on
cust-a@test, cust-b@testAuthorisation testingYYYY-MM-DD
Test support tickets with payloadsF-02YYYY-MM-DD

Appendix D: Glossary

TermMeaning
IDORInsecure direct object reference
CVSSCommon Vulnerability Scoring System
CWECommon Weakness Enumeration
CSPContent Security Policy

Standard and licence note

Based on the engagement phases of the Penetration Testing Execution Standard (PTES, pentest-standard.org); phase names are used as references only. Test categories are taken from the OWASP Web Security Testing Guide (owasp.org/www-project-web-security-testing-guide), copyright the OWASP Foundation, licensed under Creative Commons Attribution-ShareAlike 4.0 (https://creativecommons.org/licenses/by-sa/4.0/); the adapted category structure in section 3.2 is shared under CC BY-SA 4.0. Severity uses CVSS from FIRST (first.org/cvss). Weakness IDs are from MITRE CWE. All other text is original and written for this collection under the MIT licence. This template is for documenting authorised security testing only.

Схожі шаблони