open atlas
↑ Back to track
Offensive Security RED · 05 · 04

The pentest report

A pentest report has two readers — an exec deciding whether the risk is acceptable and an engineer applying the fix. A single document has to serve both, plus a defender who reads it as a roadmap. Structure it so each gets what they need on the first page they open.

RED Senior ◷ 18 min
Level
FoundationsJuniorMiddleSenior

The engagement is over. You had a signed scope, a window, written authorization, and a rules-of-engagement document that said exactly which hosts you could touch and which you could not. You found nine findings on the authorized targets, including one metadata-credential SSRF that could have compromised the whole cloud account. Now the only thing the customer will ever see — the only artifact that survives the engagement — is a PDF. And here’s the trap that sinks junior reports: a VP of Engineering opens that PDF in a budget meeting, reads three pages of HTTP requests and CVSS vectors, understands none of it, and decides the spend wasn’t worth it. Meanwhile the backend engineer who could fix the SSRF never gets tasked, because the one person who allocates the time bounced off page one. Same nine findings. The report failed not because the testing was weak but because it was written for one reader when it had two.

By the end of this lesson you’ll know how to structure a single report so an executive can make a risk decision and an engineer can apply the fix — and how a defender reads that same document as a remediation roadmap.

Authorization first: a report is a record, not just a deliverable

Everything in this unit assumes the work was authorized — a signed scope, rules of engagement, and a defined window, the way the PTES pre-engagement phase requires before a single packet is sent. The report is where that authorization becomes a permanent record. A good report restates the scope and the dates at the top precisely because, months later, it is the document that proves you tested only what you were permitted to, when you were permitted to. A finding without the scope context around it is an accusation; a finding inside a clearly-bounded engagement is evidence. So the report is not only a list of bugs — it is the artifact that ties every observation back to the authorization that made it legal, and that framing is what lets a defender trust and act on it rather than treat it as a threat.

Two readers, one document

A penetration test report has two primary audiences who never read the same page, and the central skill is serving both in one document without diluting either.

The executive — a VP, a CISO, a customer’s board — reads to make a decision: is our risk acceptable, do we need to spend, are we exposed before a launch or an audit. They have minutes, not hours, and they do not read HTTP requests. What they need is on the first page: an honest overall risk posture, a count of findings by severity, the two or three issues that actually matter to the business, and a clear “here is what could happen and here is roughly what it costs to fix.” Bury that under technical detail and the decision-maker never reaches it.

The engineer — the backend dev, the SRE, the security champion — reads to act: which handler, what exact change, how do I verify it’s fixed. They will read the deep technical section, and for them brevity is the enemy; they need the full reproduction, the precise request, the root-cause remediation, and the evidence. What’s noise to the executive is the entire value of the report to them.

The architecture that serves both is layered, not split: one document, ordered from least technical to most. The executive summary sits up front and is self-contained — readable on its own with zero security background. Behind it, a findings table acts as the bridge both audiences share. Behind that, the detailed findings carry everything an engineer needs. Nobody is forced to read the layer that isn’t theirs, and the same artifact answers both questions.

What goes in each layer

The executive summary is the highest-leverage page in the report and the one juniors write worst. It is prose, not a table, and it answers four questions in business terms: what did we test and when (the scope and dates, one line), what is the overall risk posture (a defensible sentence, e.g. “the application is well-built but one configuration issue exposes cloud credentials”), what are the few things that actually matter (name the two or three findings whose impact a non-technical reader will feel — “an attacker could read every customer’s billing data”), and what’s the shape of the work (rough effort, are these quick fixes or architectural). No request bodies, no CVSS vectors, no jargon — if a smart non-engineer can’t act on it, it has failed.

The findings table is the bridge. One row per finding, sorted by severity, with just enough to triage: title, severity, affected component, and a one-line impact. The executive scans it to sanity-check the summary; the engineer scans it to build a work queue and clicks into the rows that are theirs. The detailed findings behind it carry the full anatomy you learned to write — reproduction with expected-vs-actual, concrete impact, justified severity, root-cause remediation — one self-contained section per finding. And the appendices hold what neither audience needs inline but both occasionally need: raw request/response evidence, the methodology and tools used (so the test is repeatable and the coverage is auditable), and the exact scope and authorization.

LayerPrimary readerQuestion it answersWhat “good” looks likeFailure mode
Executive summaryVP / CISO / boardIs our risk acceptable; do we spend?Plain-language risk posture + the 2–3 issues that matter, in business termsJargon and HTTP dumps → decision-maker bounces, nothing gets funded
Findings tableBothHow many, how bad, where?One row per finding, severity-sorted: title, severity, component, one-line impactEverything “High” → no triage signal; table can’t be a work queue
Detailed findingsEngineerWhat exactly do I change, and how do I verify?Repro (expected-vs-actual), concrete impact, justified severity, root-cause fixThin repro / “sanitize input” → can’t reproduce or fixes wrong layer
AppendicesEngineer / auditorShow me the evidence and the coverageRaw request/response, methodology, tools, exact scope + authorizationMissing methodology/scope → coverage unauditable, can’t retest cleanly

Communicating risk without crying wolf

The executive summary lives or dies on calibration. Two failure modes mirror each other. Over-stating — painting a competent application as a five-alarm fire to look thorough — gets the report distrusted and the relationship burned; the next report’s real critical gets discounted because last time everything was a crisis. Under-stating — softening the one genuinely serious finding so the readout feels comfortable — is worse, because it lets the business unknowingly ship the risk that ends it. The senior move is an honest posture sentence that separates the signal from the noise: “the application is generally well-built; the eight low and informational findings are routine hardening, but one configuration issue lets an attacker read cloud credentials and should be fixed before launch.” That sentence lets a non-technical reader allocate attention correctly — which is the entire job of the summary.

Risk has to be expressed in consequence, not mechanism. An executive does not act on “SSRF to the metadata endpoint”; they act on “an attacker could obtain the keys to our cloud account and access all customer data.” Translate every headline finding from what it is into what it lets someone do to the business — and put a number on likelihood and effort where you honestly can, because “high impact, low effort to fix” is a sentence a VP can fund in the meeting they’re reading it in.

Why this works

Why is the retest the part that decides whether a report had any value? Because a finding isn’t closed when the engineer says “fixed” — it’s closed when someone re-runs the exact reproduction steps and the bug no longer happens. This is why airtight, replayable reproduction in the detailed finding pays off twice: once to confirm the bug, once to confirm the fix. A report that can’t be retested produces “we think we fixed it,” which under audit or breach is worth nothing. The reproduction you wrote for the engineer to see the bug is the same script the retest uses to prove it’s gone — and a credible engagement ends with a retest section that marks each finding fixed, partially-fixed (the fix missed a variant), or still-open, against those same steps. No retest, no closure; no closure, the risk decision the executive made was made on a promise.

How a defender reads the report

A defender — the team that owns the system — reads the report differently from both the exec and the implementing engineer, and understanding their lens makes you write a better one. They read it as a prioritized remediation roadmap and a coverage map. They take the severity-sorted table and turn it into a backlog ordered by risk-reduced-per-effort, not raw rank: the cheap high-impact fixes first, the architectural ones scheduled. They read the methodology appendix to learn what was not tested, because the gaps in your coverage are their next blind spots — an untested admin panel is a risk they now know to model. They mine the patterns: three separate IDOR findings aren’t three bugs, they’re one missing authorization pattern, and the defender’s durable fix is a shared access-control layer, not three one-off patches. And they feed the findings back into their own threat model, so the same class doesn’t recur. The report you write for the attacker’s-eye view becomes the defender’s prioritization input — which is exactly why structure, calibrated severity, and an auditable methodology aren’t formatting niceties; they’re what makes the document usable on the other side.

Pick the best fit

Your engagement found one metadata-credential SSRF (Critical) plus eight low/informational hardening items. You're writing the report that a VP of Engineering and a backend engineer will both read. Which approach serves both readers?

Quiz

A VP opens your report in a budget meeting and the first thing they see is a page of HTTP requests and CVSS vectors for a Critical SSRF. What's the most likely outcome?

Quiz

A defender on the customer's team reads your report and sees three separate IDOR findings on three endpoints. How does a senior defender act on this versus a junior?

Order the steps

Order the sections of a layered pentest report from front to back — least technical to most, the way the document is meant to be read:

  1. 1 Executive summary: plain-language risk posture + the 2–3 findings that matter, in business terms
  2. 2 Findings table: one severity-sorted row per finding (title, severity, component, one-line impact)
  3. 3 Detailed findings: repro with expected-vs-actual, concrete impact, justified severity, root-cause fix
  4. 4 Appendices: raw request/response evidence, methodology and tools, exact scope and authorization
  5. 5 Retest section: each finding re-run against its repro steps and marked fixed / partial / open
Recall before you leave
  1. 01
    A pentest report has two primary readers. Who are they, what does each need, and why does a single layered document serve both better than two separate reports?
  2. 02
    How does a defender read a pentest report differently from the exec and the implementing engineer, and what should that change about how you write it?
Recap

A pentest report is the one artifact that survives the engagement, and it has two readers who never share a page. The executive reads to make a funded risk decision in minutes and needs a plain-language summary up front — an honest risk posture and the two or three findings that matter, expressed as business consequence (“an attacker could read every customer’s billing data”), not mechanism (“SSRF to the metadata endpoint”). The engineer reads to act and needs the full detail: reproduction with expected-vs-actual, concrete impact, justified severity, and a root-cause fix. The way to serve both is a layered document ordered least-technical to most — executive summary, then a severity-sorted findings table as the shared bridge, then detailed findings, then appendices with evidence, methodology, and the scope and authorization that make the test auditable — not two separate reports that drift apart. Calibrate severity honestly: over-stating burns trust so the next real critical is discounted, under-stating lets the business ship the risk that ends it. And remember the document has a third reader: the defender, who turns your severity-sorted findings into a remediation roadmap, reads your methodology to find their untested blind spots, treats three IDORs as one missing pattern to fix systemically, and feeds it all back into their threat model. The engagement isn’t done when the PDF ships — it’s done when each finding is retested against its own reproduction steps and marked fixed, partial, or open. No retest, no closure.

Practice

Start at the top. Tasks go easiest → hardest: recall a fact, apply it to a case, then a senior-level stretch. Open one, attempt it, then reveal.

recallapplystretch0 of 5 done

Something unclear?

Ask a question about this lesson. Questions are anonymous and go straight to the author to make the lesson better.

shortcuts expand
search
K
prev piece
k
next piece
j
cycle tier
t
this menu
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.