Written for: CTOs, engineering leads and founders receiving a first report
How to read a penetration test report (and argue about severity)
Report anatomy, CVSS 4.0 and business context, reproduction steps, remediation, retests and attestation letters, and briefing a board and engineers.
Published · 9 min read
A penetration test report is written for two audiences at once: the people who decide what to fund, and the people who write the fix. Most readers skim the severity chart, panic or relax, and never check the vector behind a score or the root cause shared by three similar findings. To see the format first, there is a real finding, anonymised on our work page.
What a complete report contains
Section names vary between providers, but a complete report answers the same questions. The PCI Security Standards Council publishes a report outline and an evaluation checklist in its penetration testing guidance, and both make a useful yardstick for any report, payment-related or not.
| Section | What it should contain | What to check |
|---|---|---|
| Executive summary | Scope, overall posture and the handful of issues that matter, in plain language | Could a board member act on it without reading further? |
| Scope and methodology | Targets, exclusions, dates, accounts used, testing perspective and the standard followed | Does it match what you agreed? Anything missing was not tested. |
| Limitations | Constraints such as testing windows, blocked traffic or unavailable environments | Which conclusions are weaker because of them |
| Findings summary | Every finding with its severity and current status | Do the counts by severity match the detail that follows? |
| Finding detail | Description, affected assets, severity with its vector, reproduction steps, evidence, impact, remediation and references | Could an engineer reproduce it without calling the tester? |
| Strategic observations | Root causes and patterns that run across several findings | Often worth more than any single finding |
| Appendices | Tools used, timeline, and test data created with instructions for cleaning it up | That test accounts and data are removed once the retest is done |
Two quality signals are easy to spot. First, findings should be demonstrated rather than inferred: the PCI guidance itself says that merely reporting lists of vulnerabilities does not meet the intent of a penetration test. Second, the narrative should say which manual and automated testing was done and what held up, because a report that lists only failures gives you no idea how much ground was covered.
Severity: what CVSS 4.0 measures, and what it leaves out
Most reports score findings with the Common Vulnerability Scoring System. Version 4.0 was published by FIRST on 1 November 2023 and organises its metrics into four groups.
| Group | What it captures | Who sets it | Changes the score? |
|---|---|---|---|
| Base | Intrinsic properties: attack vector, attack complexity, attack requirements, privileges required, user interaction, and impact on the vulnerable system and on subsequent systems | The tester | Yes |
| Threat | Exploit maturity: whether the issue is being attacked, has a public proof of concept, or neither | The tester, from threat intelligence | Yes, and only downwards from the default |
| Environmental | Your confidentiality, integrity and availability requirements, plus base metrics modified for your deployment | You, or the tester with your input | Yes |
| Supplemental | Extra context such as safety, automatability, recovery and value density | Either | No |
Scores fall into five bands: None (0.0), Low (0.1 to 3.9), Medium (4.0 to 6.9), High (7.0 to 8.9) and Critical (9.0 to 10.0). A score should always arrive with its vector string, which begins CVSS:4.0/ and lists every base metric. Without the vector you cannot check the reasoning, only the conclusion.
Two defaults matter more than any other detail. In CVSS 4.0 an unset exploit maturity is scored as if the vulnerability is already being attacked, and unset security requirements are scored as High. A Base-only score, written CVSS-B, is therefore a reasonable worst case, and FIRST's own user guide says Base scores measure severity and should not be used alone to assess risk. Threat and Environmental metrics, written CVSS-BT, CVSS-BE or CVSS-BTE, are where real-world context belongs.
That is why our reports pair a CVSS 4.0 score with an adjustment for your business context, and why you should expect any provider to show the reasoning behind an adjusted score. For findings that are known CVEs in third-party components, two public sources add evidence about exploitation: CISA's Known Exploited Vulnerabilities catalogue (opens in a new tab), which records vulnerabilities exploited in the wild, and FIRST's EPSS (opens in a new tab), which estimates the probability that a published CVE will be exploited in the next 30 days.
How to argue about severity
The tester knows how the attack works; you know what the system is for, so expect to dispute some ratings. The UK's National Cyber Security Centre says vulnerability risk assessment is a business process that should not be wholly outsourced to the test team. The goal of the conversation is the right priority, not a smaller number.
Arguments that should move a score
- A compensating control that exists and can be shown to work, such as network policy that genuinely blocks the attack path.
- A precondition that cannot occur in your deployment, for example a feature flag that is off for every customer.
- Data that is less sensitive than the tester assumed, backed by your data classification.
- Evidence that the affected component is not reachable in production at all.
Arguments that should not
- It is hard to find, or nobody would think to try it.
- Our scanner did not flag it.
- We plan to rewrite that service next quarter.
- The attacker would need an account, when anyone can sign up for one.
- A higher rating would delay a release or a customer deal.
How to dispute a rating
- 1
Restate the finding
Describe the attack in your own words and confirm with the tester that you have understood it.
- 2
Name the metric you dispute
Point at the specific part of the vector, such as attack requirements or privileges required, rather than at the overall number.
- 3
Bring evidence
Configuration, logs or architecture that supports a different value. Assertions are not evidence.
- 4
Re-score in the open
Agree the new vector and record the rationale in the report. The PCI guidance asks for a traceable set of reasoning whenever a standard score is modified, and an auditor or customer will want to follow it later.
- 5
Fix the priority, not the label
If you accept a lower severity, still decide when it will be fixed. Accepting a risk should be a named person's decision, with a date to review it.
Reproduction steps and evidence
A finding you cannot reproduce is a finding you cannot fix or verify. Good reproduction steps read like a recipe, with:
- The account and role used, and any set-up the attack depends on.
- The exact requests or actions, in order, with the parameters that were changed.
- What should have happened, and what happened instead.
- Evidence: request and response captures, screenshots or output, with sensitive data redacted.
- Timestamps and source addresses, so you can find the attack in your own logs.
That last item is a free detection exercise. Search your logs and alerts for each finding's timestamps: if a critical authorisation bypass left no trace your team would have seen, you have learned something about monitoring as well as about code, and your incident response readiness. If your engineers cannot reproduce a finding within an hour or so, raise it in the walkthrough rather than closing it as unconfirmed. The difference is usually an account state or a header the steps took for granted.
What good remediation guidance looks like
Generic advice such as 'validate all input', or a bare link to an OWASP page, tells an engineer which category of thing went wrong, not what to change. Good guidance is specific to your stack and fixes the class of bug, not only the instance.
| Weak | Strong |
|---|---|
| Implement proper access control. | Enforce tenant scoping in the authorisation middleware, so every new endpoint inherits the check by default instead of relying on each handler. |
| Use secure identifiers. | Replace sequential identifiers on externally exposed resources with random ones, as defence in depth behind the authorisation fix. |
| Test the fix. | Add a contract test asserting that cross-tenant reads return 404, so the endpoint never confirms that a record exists and the regression cannot return silently. |
| See the OWASP guidance. | Cite the guidance, and also name the middleware, files or configuration where the change belongs. |
Look for three things in each remediation section: the root cause, the specific change, and a way to verify it. When findings share a root cause, a good report says so. Three insecure direct object references are usually one missing authorisation pattern, and fixing the pattern is worth more than patching three endpoints. If the same class keeps returning, the fix is partly in how the team builds, which is what secure development training addresses.
Retests and attestation letters
A retest confirms that fixes work and did not introduce anything new. It should cover every finding you report as fixed and produce an updated report rather than an email. The PCI guidance suggests a retest report carry the dates of the original test and the retest, the original findings and the result for each, which is a sensible minimum from any provider. Expect every finding to end in one of a few states:
- Fixed: the tester can no longer reproduce it.
- Partially fixed: the original instance is closed, but a variant still works.
- Not fixed: the reproduction steps still succeed.
- Risk accepted: you decided not to fix it, with a named owner and a reason.
An attestation letter is a short document for third parties: who tested what, when, using which methodology, and the status of the findings after retest. It is what you send a customer's security team instead of the full report, which is a map of how to attack you. It is not a certification or a guarantee, and a careful reader will check its dates and scope against the product they are buying. Our engagements include a free retest of every fixed finding within 30 days of report delivery and a reissued report with an attestation letter, and anything we have not verified as fixed stays open in the letter.
Briefing the board and briefing engineers
The same report needs two translations, and neither is a copy of the executive summary.
| Element | Board | Engineers |
|---|---|---|
| Length | One page, or five minutes | A working session per area of the product |
| Lead with | What was tested, why, and the overall posture in plain words | The root causes, and the findings grouped by owner |
| Severity | The two or three issues that matter, in business terms: which data, which customers, what consequence | Every finding with its vector, reproduction steps and evidence |
| The ask | Decisions and resources: accept a risk, fund a fix, move a date | Owners, dates and a booked retest |
| Over time | The trend: are serious findings getting rarer from one test to the next? | Regression tests, so fixed bugs stay fixed |
For directors who want a structured way into the subject, the NCSC publishes a Cyber Security Toolkit for Boards (opens in a new tab). For engineers, hold the walkthrough within days of the report arriving, while the tester's memory and your context are both fresh. Most severity disputes are settled in that room, in front of the evidence, and most remediation questions are quicker to answer there than in a ticket thread.
If you are about to commission a test and want a report that reads like this, start with a scoping call, or read how our penetration testing engagements run from scope to retest.
Sources
- Common Vulnerability Scoring System v4.0: Specification Document (opens in a new tab) · FIRST · 1 November 2023
- Common Vulnerability Scoring System v4.0: User Guide (opens in a new tab) · FIRST
- Information Supplement: Penetration Testing Guidance, version 1.1 (September 2017) (opens in a new tab) · PCI Security Standards Council
- Penetration testing (opens in a new tab) · National Cyber Security Centre (UK)
- Known Exploited Vulnerabilities Catalog (opens in a new tab) · CISA
- Exploit Prediction Scoring System (EPSS) (opens in a new tab) · FIRST
- Cyber Security Toolkit for Boards (opens in a new tab) · National Cyber Security Centre (UK) · 30 March 2023