The report is the only product left over once the pentest is done. The testing hours turn into that document, and it's the document that will circulate between the development team, the leadership, and often an auditor. Even so, a lot of what the market hands over under the name of a pentest report is the same thing: the raw output of a vulnerability scanner, reformatted into a PDF with the vendor's logo. A list of CVEs, each with its CVSS score, sorted by color. No proof that any of it was exploited, no reading of what it means in that environment, no instruction a developer can follow. Whoever buys it to meet a regulatory requirement usually finds this out late, when the document has to survive a real audit and doesn't.

The report is the product, not a side effect of the test
When someone hires a pentest, what they actually buy is the report. The test itself leaves nothing tangible behind: no one at the company watches the tester work, no one keeps the requests they sent. All that remains is the document, and the value of the whole engagement is locked inside its quality. An excellent test described in a bad report is worth, in practice, whatever the report manages to communicate, which is almost nothing. That's why evaluating a pentest vendor by its report isn't a detail: it's looking straight at the only deliverable you're going to receive.
The trouble is that a scanner report and a real pentest report look alike at first glance. Both have a cover, an executive summary, a list of findings with severities, and a recommendations section. The difference lives inside each finding, and it shows up in three specific places: how the finding is proven, how the severity is justified, and how the fix is described. A report that fails all three is a scan in new clothes. Each one is worth knowing, because they're exactly the three you can check on your own before signing a contract.
Element 1: reproducible evidence, not a generic screenshot
The first thing that separates a serious report from a decorated one is the evidence. A finding without proof is an opinion, and an opinion survives neither a pushback from the development team nor a skeptical auditor. A scanner delivers, at most, the signature that matched and a screenshot. A real pentest report delivers the path: the exact request that was sent, the exact response that came back, and the steps to reproduce it from scratch. If the reader can't repeat the finding with what's written down, it isn't evidence, it's a claim.
# Achado: acesso a pedido de outro cliente (BOLA)
# Endpoint: GET /api/v2/orders/{id}
# Passo 1 - autenticado como cliente A (id 8842), lendo o proprio pedido
GET /api/v2/orders/8842 HTTP/1.1
Host: app.cliente.com.br
Authorization: Bearer <token-do-cliente-A>
-> 200 OK {"order_id":8842,"customer_id":8842, ...}
# Passo 2 - MESMO token, pedido de outro cliente
GET /api/v2/orders/8843 HTTP/1.1
Host: app.cliente.com.br
Authorization: Bearer <token-do-cliente-A>
-> 200 OK {"order_id":8843,"customer_id":8843,"cpf":"***", ...}
# O token do cliente A leu o pedido do cliente B, com CPF.
# Reproduzido 4 vezes com ids sequenciais. Nenhuma versao
# desatualizada envolvida: e falha de logica de autorizacao.
Element 2: severity adjusted to your environment, not raw CVSS
The second element is severity, and it's where the scanner report deceives the most. The tool assigns the base CVSS score of the CVE and stops there. But the base score is calculated for a generic world, with no knowledge of where that asset sits, what data it holds, or whether it's exposed to the internet. The same finding can be irrelevant on an internal test service and critical on a public API that returns personal data. A report that's useful adjusts the severity to your environment and explains the adjustment; one that just copies the tool's number hands you the job of figuring out what actually matters.
# Como o scanner reporta (nota base, isolada do ambiente):
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N -> 6.5 "Medio"
# O mesmo achado, dois ambientes reais:
# Ambiente 1 - endpoint interno de homologacao, sem dado real,
# so acessivel na VPN. Risco pratico: baixo.
# Ambiente 2 - MESMA falha, mas na API publica de producao que
# retorna CPF e historico de compra do cliente. Dado sensivel
# sob LGPD, exposto na internet. Risco pratico: alto.
# A nota base 6.5 nao muda entre os dois. O risco real, sim.
# O relatorio serio classifica pelo ambiente 2 e explica por que.Adjusting severity isn't inflating a score to scare or squeezing it to reassure. It's making the reading the tool can't make, because it doesn't know your topology, your data, and your exposure. An honest report sometimes downgrades a finding the scanner marked as critical, because in your environment it reaches nothing, and explains why. That ability to move severity up and down with justification is one of the most reliable signs that people were thinking, not just a tool running.
Element 3: actionable remediation, written for the person who'll fix it
The third element is remediation, and it's the most wasted. Plenty of reports close a finding with a generic recommendation like "implement proper access control" or "apply security best practices." That isn't remediation, it's the title of the problem repeated. The person who's going to fix it is a developer, and they need to know where in the code, what exactly to change, and how to confirm the fix worked. Good remediation is written for the person at the keyboard, not just for the one presenting the summary to the board.
# Remediacao generica (colada do scanner) - nao acionavel:
"Implemente controle de acesso adequado (OWASP A01)."
# Remediacao acionavel - escrita pra quem corrige:
# No handler de GET /api/v2/orders/{id}, depois de autenticar o
# token, validar que orders.customer_id == token.sub ANTES de
# retornar o objeto. O mesmo controller expoe PATCH e DELETE em
# /orders/{id}: os tres herdam a falha, corrigir os tres.
#
# Teste de regressao: token do cliente A pedindo pedido do B
# deve retornar 404 (nao 403 - o 403 ja confirma que o objeto
# existe). Adicionar esse caso na suite pra nao regredir.
Why this fails a real audit
More and more companies hire a pentest because a regulation started requiring it. In the financial sector and in supplementary healthcare, among others, periodic security testing became a compliance item, and the report is the proof that it happened. The detail many people discover late is that having the PDF in hand isn't the same as having proof that holds up. A competent auditor doesn't count how many findings the document lists; they ask how each one was proven and what was done afterward. That's where the reformatted scanner report falls apart.
A document that just lists CVEs with CVSS scores doesn't show that a penetration test happened, it shows that a tool ran, which anyone can do on their own. Without reproducible evidence, the auditor has no way to confirm the flaw was real and not a scanner false positive. Without severity adjusted to the environment, there's no way to justify why one finding was treated as a priority and another wasn't. Without traceable remediation, there's no way to link a finding to the fix that came after. The three elements that make a report useful day to day are exactly the three an audit demands, and that's no coincidence: both want the same thing, evidence that the risk was understood and addressed, not a list showing it was merely listed.
How to evaluate the report before you sign the contract
The good news is you can check all of this before closing. Ask any vendor you're evaluating for a sample report (anonymized), a normal request that a serious vendor will honor, and read one full finding with these points in hand.
- Each serious finding carries the real request and response, or the exact steps to reproduce, not just a screenshot and the signature that matched. If you couldn't repeat the finding reading the report, it isn't evidence.
- Severities are justified by your environment (where the asset sits, what data it holds, whether it's exposed), not just the CVSS number copied from the tool. A report that moves the score up and down with an explanation had people thinking.
- Remediation says where and what to change, and how to test the fix, in language a developer applies. "Implement proper control" isn't remediation, it's the problem repeated.
- Business-logic findings show up (improper object access, flow bypass, escalation through a combination of permissions), not just outdated versions and misconfigurations. A report that's 100% version CVEs is a scan with a cover.
- The report distinguishes what was tested by hand from what was tool-assisted, and states scope and hours. A pure scan has no such distinction to make.
Hiring a pentest without looking at the report format is buying blind the only product you'll receive. Before you pick a vendor, ask for the deliverable template and press on the three elements: reproducible proof, severity in your context, and a fix the developer applies. If you're evaluating or verifying a vendor and want a report that survives an audit instead of just satisfying the requirement, talk to us at vorvex.com.br/orcamento: the conversation starts with what you'll receive at the end, not with the color of the cover.