Reporting

What a Penetration Test Report Should Contain

Section by section, what belongs in a report, what it is for, and the six things reports leave out that make them harder to act on than they need to be.

Pental5

A report is read by three people who want different things: an executive deciding whether to worry, an engineer deciding what to change, and an auditor deciding whether to accept it. A report that serves one of them well and the other two badly is the normal outcome, and it is avoidable.

The sections, and who each is for

  1. Executive summary. One page, no jargon, answering four questions in this order: what was tested, what is the worst thing found, what does it mean for the business, what happens next. Not a severity tally. A count of highs tells a director nothing they can act on.
  2. Scope statement. What was in, what was out, and the dates. The out-of-scope list is the more valuable half and it is usually missing.
  3. Methodology. Short. Enough to show the work was structured, not a transcription of a public standard.
  4. Findings. The body of the document, one entry each, ordered by severity.
  5. Remediation summary. A table an engineering lead can turn into tickets without reading the whole thing.
  6. Appendices. Tool output, host lists, anything long enough to interrupt the narrative.

What belongs in a finding

This is where reports differ most. A finding that an engineer can act on without asking a question contains all of the following, and one that is missing any of them will generate an email.

  • A title that names the weakness, not the tool. "Authenticated user can read another organisation’s invoices" beats "Insecure Direct Object Reference".
  • Where. The exact endpoint, parameter, host or file. Not "the application".
  • Reproduction. Numbered steps that a competent developer can follow to see it themselves. If they cannot reproduce it, they will conclude it does not exist.
  • Evidence. The request and response, or the screenshot, with anything sensitive redacted at the point of capture.
  • Impact in your terms. Not the generic consequence of the vulnerability class. What an attacker gets in THIS system.
  • Remediation that names the change. "Validate authorisation server-side on this endpoint against the authenticated session" is actionable. "Implement proper access controls" is not.
  • A severity, with the reasoning. If you used CVSS, publish the vector, not just the number: many vectors give the same score and the vector is what somebody can argue with.

Hand the finding to a developer who was not on the call. If they can fix it without contacting anybody, it is finished. If their first move is to reply asking where, it is not.

The six things reports leave out

  • What was NOT tested and why. Without it, a reader assumes coverage you did not have, and that assumption outlives the engagement.
  • The version or commit tested. A report about a system that has shipped forty times since is a historical document, and nothing in it says so.
  • Positive results. The controls that were tested and held. It is evidence, it is short, and it stops the report reading as a list of everything that is wrong with the team.
  • Effort. Days spent, so a reader can weigh the absence of findings appropriately. Two days finding nothing means something different from ten.
  • Retest terms. When a retest is available, what it covers, and how long the result is valid for.
  • A contact. A named person to ask, with a phone number, for the finding that turns out to be worse than it looked.

Length, and the trap of thoroughness

Long reports are not more thorough, they are less read. Padding usually comes from three places: a methodology section reproducing a public standard, boilerplate repeated in full for every instance of the same weakness, and raw tool output inline instead of in an appendix.

Fix all three by merging: one finding for one weakness with every affected host listed against it, and the evidence for each host in a table beneath. Eleven findings become one finding on eleven hosts, and the report gets shorter while saying more.

Severity, and the argument you are inviting

Every severity is a claim, and the report should make it possible to disagree with the claim without disagreeing with the finding. That means showing the reasoning: the vector if you scored with CVSS, and a sentence about the context you applied, because the same weakness on an internal tool and on an internet-facing platform is not the same risk.

Where you adjusted a rating up or down from the tool’s default, say so and why. A finding that arrives at medium with no explanation invites a client to argue it down to low, and you will be arguing from memory. A finding that arrives at medium with the reasoning attached is usually accepted, and where it is not, the disagreement is about something specific.

Write the remediation for the person who has to do it

The most common weakness in an otherwise good report is remediation written for the reader of the report rather than the person who will change the code. "Implement input validation" is addressed to a manager. "Bind this query parameter rather than concatenating it, in this handler" is addressed to a developer, and only one of those gets done this sprint.

Where a fix has trade-offs, name them. Where there is a quick mitigation and a proper fix, give both and say which is which, because the team will do the quick one first whatever you write and it is better that they know it is temporary.

The format matters less than people argue about

PDF for the record, because it is fixed and quotable. Something structured for the engineers, because a table of findings that can be filtered is more use to them than a document. What matters is that both come from the same source, so the version an auditor reads and the version a developer works from cannot disagree.

Every section above is a section you can reorder, rename or switch off, and the fields on a finding are your own: rename them, add your own, decide which are reused from the Library and which stay specific to the engagement. The PDF and the Word version render from the same record, so the document an auditor keeps and the one an engineer edits started life as the same thing.


Pental Is Built by the People Writing This

Engagement management for testing firms, on a database you own, under your brand, with the AI running on your key.

Common questions

What should a penetration test report include?

An executive summary answering what was tested, what is worst, what it means and what happens next. A scope statement including what was excluded. A short methodology, the findings, a remediation summary an engineering lead can turn into tickets, and appendices for anything long.

What makes a finding actionable?

A title naming the weakness rather than the tool, the exact location, numbered reproduction steps, evidence with anything sensitive redacted at capture, impact in terms of your system, remediation that names the change, and a severity with its reasoning attached. If a developer’s first move is to reply asking where, it is not finished.

What do reports usually leave out?

What was not tested and why, the version or commit tested, the controls that were tested and held, the effort spent, the retest terms, and a named contact with a phone number. The first is the most damaging: without it a reader assumes coverage you did not have.

Related reading

Reporting · 5 min read min read
Writing Remediation a Developer Will Actually Action
"Implement input validation" is not remediation, it is a category. What a developer needs from your finding, how specific to be without writing their code for them, and what to do when there is no clean fix.
Reporting · 12 min read min read
Writing an Attestation Letter an Auditor Will Actually Accept
The one-page letter your client forwards to their auditor, their insurer and their biggest customer. What has to be on it, what quietly gets it rejected, and why it outlives the report it summarises.
Reporting · 13 min read min read
CVSS in practice: the scoring mistakes that make a report arguable
Most disputed findings are disputed on the score, not the facts. What changed in CVSS v4.0, the errors that survive peer review, and how to score so the conversation stays on the fix.