Home
VAPT Web Application PentestAPI PentestMobile App PentestInfrastructure PentestAI & LLM PentestOT / ICS PentestIoT PentestPenetration TestingAll VAPT services
Red Team Red Team EngagementAdversary SimulationAssumed BreachPurple TeamingSocial Engineering
CompanyResourcesBlogFree Consultation

What a penetration test report has to contain

The report is the only part of a penetration test you keep. Here is what each section is for, and what to send back before you sign the draft off.

Joel Aviad OssiJoel Aviad OssiRed Team Lead, RedTeam Security
7 min read
A thick bound document lying open on a dark desk, its pages held flat by a steel rule, coloured index tabs along the outer edge and a magnifying glass resting at the corner of the lower page.

Key takeaways

  • The report is the deliverable. Everything else in the engagement is method, and the document is the only artefact that outlives the access.
  • A finding is complete when someone who was not on the test can reproduce it, understand what it costs you, and fix it without asking a question.
  • A CVSS base score describes the flaw. It does not describe your exposure until someone applies the environmental metrics to your deployment.
  • Ask for the draft and read it as an assessor would. An unreproducible finding, an unargued severity, or a remediation line reading 'apply vendor patch' are all things to send back.

The report is the thing you keep

A test ends. The access is revoked, the test accounts are closed, the testers move on to the next engagement. What is left is a document, and every decision you make afterwards comes out of it: which fix goes first, what the board is told, what gets handed to an assessor eighteen months later. That makes the report the product rather than a record of one.

NIST SP 800-115 treats it that way. Its assessment process runs planning, discovery, attack and reporting, and reporting is a phase with its own work rather than a summary typed on the last afternoon (NIST SP 800-115). When you buy a penetration testing engagement, you are buying that phase as much as the days on the keyboard, so it belongs in the statement of work with the same specificity as the target list.

One practical consequence: ask to see a redacted sample report before you sign, from work resembling yours. A firm that cannot produce one is asking you to buy the single part of the engagement you have no other way to inspect in advance.

The parts, and the question each one answers

Reports differ in shape and layout, and that matters less than it looks. What matters is that every question below has an owner somewhere in the document, because a question with no section is a question nobody answered. Scope itself is settled long before delivery, and how to scope a penetration test covers that half; the report's job is to restate the agreed scope accurately enough that a reader a year from now can tell what was never looked at.

The failure to watch for is a section that exists but says nothing. A methodology page listing tool names. An executive summary that restates the finding counts as sentences. A remediation column that says 'apply vendor patch' for a design flaw. Each of those passes a table of contents check and answers nothing, which is why the middle column below is the one to read the document against.

Read the table as a checklist for the draft rather than a template you impose on the tester. A firm with a house format that answers all six is fine. A firm whose format has no place for an attack narrative is telling you the findings will arrive as a list of unrelated items.

What each part of a penetration test report is for, and how the thin version of it reads.
PartThe question it answersThe thin version
Scope and datesWhat was in reach, in what state, on which daysA product name with no environment, version or date
MethodologyHow the testing was done, and against which published standardA list of tool names
Executive summaryWhat a non-technical decision maker should do this quarterThe finding counts, restated in prose
FindingsWhat is wrong, what it costs, how to reproduce it, how to fix itA severity label and a paragraph
Attack narrativeHow separate issues chained into something worse than eitherAbsent
Retest termsWhat happens after you fix it, and by when it is includedAbsent, or a fresh quote

One finding, written out

The unit of a report is the finding, so judge a report by one of them rather than by its page count. Below is a constructed example. It is illustrative and generic, not taken from any engagement, and it shows the fields a finding has to carry before it is usable.

Every row there is doing a distinct job. Prerequisites separate a flaw an anonymous visitor reaches from one that needs a valid account, which is often the whole of the severity argument. Reproduction lets your engineers confirm a fix rather than take it on trust. Impact is written in your terms, in your data, not in the tester's vocabulary. Remove any one row and someone has to send an email to act on the finding.

Traceability is the other half. The OWASP Web Security Testing Guide gives every test a stable identifier, in the form WSTG-ATHZ-02, so a finding can name the test that produced it and you can see which tests ran and returned nothing (OWASP WSTG). Coverage you can point at is what turns a list of problems into evidence, and it is a reasonable thing to require of an application-focused test.

An illustrative finding showing the fields each one should carry. The content is constructed for this article, not drawn from an engagement.
FieldWhat it says
TitleHorizontal authorisation bypass on the invoice detail endpoint
AffectedInvoice detail route, production API, tested 14 to 16 May
PrerequisitesAny authenticated tenant account. No administrative role needed.
What happensThe identifier in the path is trusted. Substituting another tenant's identifier returns that tenant's invoice, including bank details.
ReproductionFour numbered steps, the exact request, both identifiers used, the response excerpt
ImpactAny customer can read every other customer's billing records. No privilege escalation required.
RatingCVSS v4.0 vector, plus one line on why the environmental metrics move it here
FixAuthorise on the object, not the route. Confirm the session's tenant owns the record before returning it.

Severity is an argument, not a number

CVSS v4.0 separates its metrics into Base, Threat, Environmental and Supplemental groups for a reason. The base group describes the flaw as it exists in the abstract; the environmental group is where your deployment, your data and your compensating controls enter the calculation (CVSS v4.0 specification). A report that ships base scores alone has rated the software, not your exposure to it.

A finding rated High should therefore carry a sentence saying why it is High here. The same flaw, internet-facing and unauthenticated on the system holding card data, is a different number from the one it earns on an internal tool two people use. If the report will not make that argument, you will make it yourself, with less information than the person who ran the test had.

Rated output with no analysis behind it is the tell of a tool run sold as an engagement, which is the distinction drawn in penetration test or vulnerability scan. The presence of severity labels proves nothing on its own. A scanner emits those by default; what it cannot emit is the reason the label is right for you.

Evidence, and what happens after the fix

Evidence is quietly expensive to produce and quietly easy to leave out. A screenshot of a tool banner is not evidence. The request and the response, the identifiers used, the account it was performed under and the timestamp: that is what lets your team reproduce the issue on Monday without booking a call, and it is what makes a finding defensible if a supplier or an auditor questions it.

Ask for a weakness class alongside each instance. A CWE identifier (CWE) lets you sort findings by the mistake rather than by the host, and six findings sharing one identifier are one engineering decision rather than six tickets. On an infrastructure test that grouping is frequently the difference between patching thirty hosts and fixing the build image they all came from.

The retest belongs in the report as terms, not as a follow-up sale. Get it in writing: what a retest covers, how long after delivery it stays included, and whether you receive a reissued document marking each finding fixed, partially fixed or open. That reissued version is the one an assessor asks for, and it is the one that is awkward to obtain six months later if nobody agreed it up front.

Read the draft the way an assessor will

You should get a draft, and you should read it with three questions. Can an engineer who was not involved reproduce every finding from what is written here? Does every severity have a stated reason attached to it? Does anything in the document contradict the scope that was agreed? Send back what fails, in writing, while the report is still a draft, because a correction after delivery arrives as a second document that has to be filed next to the first.

Two further asks are worth making. First, whether the activity was noticed: a report that records no alert firing during the testing window is telling you something the finding list cannot, and it is the argument for a purple teaming exercise before another test. Second, ask for machine-readable output alongside the document, so the findings reach your tracker without a person retyping them and dropping the severity rationale on the way.

What the report has to survive in Dubai and Abu Dhabi

The report is the artefact a UAE regulator or a customer's procurement team actually sees, and it is read by people who were not in the room when the test ran. Banks and licensed financial institutions answer to the Central Bank of the UAE. Dubai government entities and the suppliers serving them work to the standard published by the Dubai Electronic Security Center. Abu Dhabi healthcare providers are held to ADHICS, and the Information Assurance Standards published federally by NESA apply more widely still. Four regimes that name security testing, four audiences for the same document.

In practice that means dates, scope and a named methodology, because the first question an assessor asks is what was tested and when. It means findings traceable to a fix, because the second question is what you did about them. And it means a retest record, because the third question is whether any of it is still true.

There is a difference between the two emirates worth planning for. A Dubai free zone company selling into a Dubai government customer will be asked for the report as part of supplier assurance, so the document leaves your organisation and what can be redacted matters at the point it is written. An Abu Dhabi healthcare provider is more often reading the same report against an internal control set, where traceability from finding to control reference is what saves the time. One test, two audiences, and the writing has to be clear enough that neither of them has to call you to understand it.

Frequently asked questions

How long should a penetration test report take to arrive?

Agree the delivery date in the statement of work rather than assuming one. A draft within one to two weeks of the final day of testing is a reasonable thing to negotiate for a short engagement, and critical findings should be reported on the day they are found rather than held for the document. A firm that will not commit to a date in writing has answered the question.

What should I do if a finding in the report cannot be reproduced?

Send it back before the report is finalised. A finding nobody can reproduce is either written badly or wrong, and either way it is the tester's to resolve. Ask for the exact request, the account used and the time it was performed. If it still does not reproduce, ask for it to be withdrawn or reclassified, because an unfixable finding sits open in your tracker indefinitely.

Is a CVSS score enough to prioritise remediation?

No. A CVSS base score describes the flaw in the abstract, and the environmental metric group is where your deployment, your data and your compensating controls change it. A report should show the vector and add one line explaining why the rating holds in your environment. Without that line you are prioritising someone else's risk in your own backlog.

Can I share a penetration test report with a customer or a regulator?

Often you will be asked to, so check what your contract says about disclosure before you do. The full report contains reproduction steps that work as instructions against your systems, so it is not a document to circulate freely. Ask the tester for a summary letter confirming the scope, the dates and the retest status instead; that answers a supplier assurance request without handing over anything exploitable.

The engagements this applies to

Joel Aviad Ossi, Red Team Lead at RedTeam Security
Joel Aviad OssiRed Team Lead, RedTeam Security

Joel Aviad Ossi is Red Team Lead at RedTeam Security, the Dubai-licensed trading brand of WebSec FZCO. He scopes and runs objective-based engagements across the UAE.

Let's talk about your security

Tell us the objective you want tested. We will come back with a scope, a timeline and a quote, under NDA from the first conversation.

Email [email protected]
IFZA Business Park, Building A2
Nadd Hessa, Dubai Silicon Oasis
Dubai, United Arab Emirates