Relatório de pentest: um exemplo comentado
Todos os dados desta página são sintéticos. Nenhum cliente, ambiente ou achado real é reproduzido aqui.
Quem nunca recebeu um relatório de pentest não tem como avaliar uma proposta pelo entregável, porque o entregável só existe no final. Esta página resolve isso mostrando a estrutura completa com achados sintéticos, construídos para ilustrar o formato.
Aviso importante e literal: a empresa Exemplo Comércio Digital, o domínio exemplo.test e todos os achados abaixo são fictícios. Nenhum dado de cliente real, nenhum ambiente real e nenhum achado real da GUARDIASEC aparece aqui. As requisições foram construídas para demonstrar formato, e nenhuma delas é reproduzível contra um alvo real.
Use este material de três formas: para saber o que exigir de um fornecedor, para estruturar um relatório interno da sua própria equipe, ou para entender como um achado vira decisão de correção.
1. Sumário executivo
Esta é a seção que a diretoria lê. Ela responde três perguntas em menos de uma página: qual o risco atual, o que acontece se nada mudar e o que precisa de decisão. Nenhum jargão técnico sem explicação, nenhuma sigla sem expansão na primeira ocorrência.
Cliente: Exemplo Comércio Digital (fictício)
Período: 12 a 23 de agosto de 2026
Escopo: aplicação web de loja e API de pedidos, ambiente de homologação
Modalidade: caixa cinza, com credenciais de cliente e de operador
Resultado: 9 achados, sendo 1 crítico, 2 altos, 4 médios e 2 baixos.
O achado crítico permite que um cliente autenticado consulte pedidos
de outros clientes trocando o identificador na requisição, expondo
nome, endereço de entrega e itens comprados. Foi comunicado no
segundo dia de teste, fora do ciclo do relatório.
Decisão necessária: priorizar a correção da autorização na API de
pedidos antes da próxima campanha de vendas, quando o volume de
requisições e a exposição da base de clientes aumentam.Repare no que o exemplo não faz. Não usa a palavra hacker, não estima prejuízo financeiro sem base e não afirma que o ambiente ficará seguro depois da correção. Relatório que exagera perde credibilidade na primeira leitura técnica.
2. Escopo e o que ficou de fora
A seção de escopo protege as duas partes. Ela registra o que foi testado, o que não foi, e por quê. Sem isso, um incidente futuro em um componente nunca avaliado vira discussão sobre responsabilidade.
| Item | Situação | Observação |
|---|---|---|
| loja.exemplo.test | Testado | Aplicação web, 3 perfis de acesso |
| api.exemplo.test | Testado | API REST, 41 endpoints autenticados |
| admin.exemplo.test | Testado | Painel administrativo, perfil operador |
| Gateway de pagamento de terceiro | Fora do escopo | Ambiente de terceiro, sem autorização do fornecedor |
| Infraestrutura de rede interna | Fora do escopo | Previsto para avaliação separada |
| Negação de serviço | Não executado | Excluído por acordo, técnica potencialmente disruptiva |
A seção também registra as limitações encontradas durante a execução: indisponibilidade do ambiente em determinada janela, funcionalidade bloqueada por proteção de borda que impediu teste completo, ou perfil de acesso que não foi entregue a tempo. Omitir limitação é o mesmo que declarar cobertura que não houve.
3. Critério de severidade
O relatório declara como classifica antes de classificar. Isso permite que a equipe interna discorde de um enquadramento específico sem precisar discordar do método inteiro.
| Severidade | Faixa CVSS base | Ajuste pelo contexto |
|---|---|---|
| Crítica | 9.0 a 10.0 | Ou nota menor com exposição pública e dado pessoal em volume |
| Alta | 7.0 a 8.9 | Reduzida quando o ativo é acessível só por rede restrita |
| Média | 4.0 a 6.9 | Elevada quando encadeia com outro achado do mesmo relatório |
| Baixa | 0.1 a 3.9 | Mantida, com registro do racional |
| Informativa | Sem nota | Boa prática não adotada, sem impacto demonstrado |
4. Achado crítico de exemplo: autorização quebrada na API de pedidos
Este é o formato completo de um achado. Cada campo existe porque alguém precisa dele: o desenvolvedor precisa dos passos, o gestor precisa do impacto, o auditor precisa da referência e o reteste precisa do critério de verificação.
Identificador: ACH-001
Título: Quebra de autorização a nível de objeto na consulta de pedidos
Severidade: Crítica
Vetor CVSS 3.1: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N (nota base 6.5)
Severidade final: Crítica (elevada pelo volume de dados pessoais expostos
e pela exposição pública do endpoint)
Referência: OWASP API Security Top 10, API1:2023 Broken Object Level
Authorization; OWASP WSTG-ATHZ-04
Componente: GET /v1/pedidos/{id} em api.exemplo.test
Perfil usado: cliente comum (conta de teste [email protected])Descrição
O endpoint de consulta de pedido valida se o solicitante está autenticado, mas não verifica se o pedido consultado pertence à conta autenticada. Um cliente autenticado consegue recuperar o pedido de qualquer outro cliente informando o identificador correspondente. Os identificadores são numéricos e sequenciais, o que dispensa qualquer descoberta: basta decrementar o número do próprio pedido.
Passos de reprodução
- Autenticar na loja com a conta de teste [email protected] e obter o token de sessão
- Criar um pedido e anotar o identificador retornado, por exemplo 48213
- Repetir a consulta trocando o identificador por um valor menor, por exemplo 48212
- Observar que a resposta retorna 200 com o conteúdo do pedido de outra conta
GET /v1/pedidos/48212 HTTP/1.1
Host: api.exemplo.test
Authorization: Bearer <token da conta teste-a>
HTTP/1.1 200 OK
Content-Type: application/json
{
"pedido": 48212,
"cliente": "M**** S****",
"email": "m****@exemplo.test",
"endereco": "Rua ****, 1**, São Paulo SP",
"itens": [{ "sku": "SKU-8842", "qtd": 1 }],
"total": 249.90
}Impacto
Comprovado: um cliente autenticado acessa dados de pedido de outros clientes, incluindo nome, e-mail, endereço de entrega e itens comprados. Consequência plausível não testada: como os identificadores são sequenciais, a enumeração completa da base de pedidos é viável, o que caracterizaria tratamento indevido de dados pessoais em escala sob a LGPD. A enumeração em massa não foi executada, por decisão de limitar o impacto do teste.
Recomendação
- Validar no lado servidor, em cada endpoint que recebe identificador de objeto, se o recurso pertence à identidade autenticada
- Centralizar a verificação em uma camada comum, para que a regra não dependa de cada desenvolvedor lembrar de aplicá-la
- Substituir identificadores sequenciais por identificadores não previsíveis, como medida complementar e nunca como correção principal
- Registrar tentativa de acesso negado, para que a exploração futura seja detectável
- Verificar os demais endpoints que recebem identificador: a mesma ausência de validação costuma aparecer em vários
A terceira recomendação carrega uma armadilha frequente. Trocar identificador sequencial por identificador aleatório deixa a exploração mais difícil, não impossível, e várias equipes param aí. Sem validação de propriedade no servidor, a falha continua existindo para quem descobrir um identificador válido de qualquer outra forma.
Critério de reteste
O achado será considerado corrigido quando a requisição dos passos de reprodução retornar 403 ou 404 para pedido que não pertence à conta autenticada, e quando a mesma verificação passar em pelo menos três outros endpoints que recebem identificador de objeto.
5. Achado médio de exemplo: sessão sem expiração no painel
Nem todo achado precisa de tanto detalhe. Achados de severidade menor cabem em um formato mais curto, desde que mantenham evidência e critério de reteste.
Identificador: ACH-004
Título: Sessão do painel administrativo sem expiração por inatividade
Severidade: Média
Vetor CVSS 3.1: AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N (nota base 5.0)
Referência: OWASP WSTG-SESS-07
Componente: admin.exemplo.test, cookie de sessão
Descrição: o cookie de sessão do painel permanece válido por 30 dias
e não expira por inatividade. Uma estação desbloqueada ou um cookie
obtido de um dispositivo compartilhado dá acesso administrativo
prolongado sem nova autenticação.
Evidência: cookie emitido em 12/08 continuou aceito em 21/08 sem
nenhuma requisição intermediária da mesma sessão.
Recomendação: expirar por inatividade em 15 a 30 minutos no perfil
administrativo, invalidar a sessão no lado servidor no logout e
exigir reautenticação para operações sensíveis.
Reteste: sessão administrativa inativa por mais de 30 minutos deve
ser rejeitada e redirecionar para autenticação.6. Consolidação e ordem de correção
Depois dos achados individuais, o relatório consolida. A tabela de consolidação é o documento que a equipe leva para o planejamento de sprint, e por isso ela precisa carregar prazo e responsável, não apenas severidade.
| ID | Achado | Severidade | Prazo sugerido |
|---|---|---|---|
| ACH-001 | Autorização quebrada na API de pedidos | Crítica | Imediato |
| ACH-002 | Enumeração de usuário na recuperação de senha | Alta | 15 dias |
| ACH-003 | Upload aceita tipo de arquivo não previsto | Alta | 15 dias |
| ACH-004 | Sessão administrativa sem expiração | Média | 30 dias |
| ACH-005 | Cabeçalhos de segurança ausentes na loja | Média | 30 dias |
| ACH-006 | Mensagem de erro revela versão do componente | Média | 60 dias |
| ACH-007 | Cookie sem atributo SameSite | Média | 60 dias |
| ACH-008 | Política de senha permite senha comum | Baixa | Próximo ciclo |
| ACH-009 | Diretório de listagem habilitado em host estático | Baixa | Próximo ciclo |
Uma observação que quase nunca aparece em modelo de relatório: achados de severidade média que se encadeiam merecem nota conjunta. No exemplo, a enumeração de usuário mais a política de senha fraca formam um caminho de ataque mais relevante do que qualquer um dos dois isoladamente.
7. Reteste e encerramento
O reteste produz um documento curto que atualiza o estado de cada achado. Ele não repete a descrição, apenas registra o resultado da verificação e o que sustenta essa conclusão.
| ID | Estado | Verificação |
|---|---|---|
| ACH-001 | Corrigido | Requisição a pedido de outra conta retorna 403; verificado em 4 endpoints |
| ACH-002 | Corrigido | Resposta uniforme para conta existente e inexistente |
| ACH-003 | Parcialmente corrigido | Validação de tipo aplicada no envio, ausente no reprocessamento |
| ACH-004 | Corrigido | Sessão inativa rejeitada após 20 minutos |
| ACH-005 | Não corrigido | Cabeçalhos permanecem ausentes na loja |
A linha do ACH-003 mostra por que reteste importa. A correção foi aplicada no caminho principal e esqueceu um caminho secundário que usa a mesma função. Sem reteste, o achado seria marcado como resolvido e voltaria no próximo teste.
O encerramento registra a destruição ou devolução dos dados de teste, das credenciais recebidas e das evidências que contêm informação do ambiente do cliente, conforme o que foi acordado no início do trabalho.
Checklist prático
- Sumário executivo em uma página, legível por quem não é técnico
- Escopo com o que foi testado, o que ficou fora e o motivo
- Limitações encontradas durante a execução registradas explicitamente
- Critério de severidade declarado antes dos achados
- Cada achado com identificador estável, reutilizado no reteste
- Vetor CVSS completo, não apenas a nota
- Referência pública por achado (WSTG, API Top 10, CWE)
- Passos de reprodução que a equipe interna consegue seguir
- Evidência com dado sensível mascarado
- Separação entre impacto comprovado e consequência plausível
- Recomendação acionável, com a correção principal destacada da complementar
- Critério objetivo de reteste por achado
- Tabela de consolidação com prazo sugerido
- Registro de destruição ou devolução de dados ao encerrar
Boas práticas
- Peça um relatório de exemplo antes de contratar: o formato revela o método
- Exija identificador estável por achado, para acompanhar a correção ao longo do tempo
- Prefira relatório que separa o comprovado do plausível a relatório que impressiona
- Trate o relatório como documento controlado, com acesso restrito e prazo de retenção
- Leve a tabela de consolidação para o planejamento, não o documento inteiro
- Registre no próprio relatório os achados aceitos como risco, com quem aceitou e até quando
Erros comuns
Relatório que entrega a saída do scanner sem validação
A equipe gasta tempo investigando falso positivo e passa a desconfiar de todo o documento, inclusive dos achados reais.
Achado sem passos de reprodução
O desenvolvedor não consegue confirmar o problema, a correção vira suposição e o reteste falha sem que se saiba o motivo.
Severidade atribuída sem justificar o contexto
A priorização perde credibilidade e a fila de correção passa a ser definida por quem grita mais alto, não por risco.
Evidência com dado pessoal real sem mascaramento
O próprio relatório passa a ser um repositório de dado sensível, e circula por e-mail sem controle de acesso.
Relatório sem seção de limitações
Cobertura parcial é lida como cobertura completa, e a área não testada passa a ser considerada segura sem nunca ter sido avaliada.
Quando procurar apoio especializado
Se você recebeu um relatório de pentest e não consegue transformar os achados em tarefas com prazo e responsável, o problema costuma estar na priorização, não na equipe. Uma leitura conjunta do relatório com quem entende do ambiente resolve a maior parte dos casos, e serve também para identificar os achados que merecem correção estrutural em vez de remendo pontual.
Fontes e referências
As afirmações técnicas deste guia se apoiam nas publicações abaixo. Quando houver divergência entre este texto e a fonte oficial, vale a fonte oficial.
- API Security Top 10: API1:2023 Broken Object Level AuthorizationOWASPClasse de falha do achado crítico usado no exemplo.
- Web Security Testing Guide: Authorization TestingOWASPIdentificadores de caso de teste citados nos achados.
- CWE-639: Authorization Bypass Through User-Controlled KeyMITREClassificação da fraqueza correspondente ao achado ACH-001.
- CVSS v3.1 Specification DocumentFIRSTDefinição dos componentes do vetor usado nos achados de exemplo.
Perguntas frequentes
Os dados deste relatório de exemplo são reais?
Não. A empresa Exemplo Comércio Digital, o domínio exemplo.test, os identificadores de pedido e todos os nove achados são sintéticos, construídos para demonstrar o formato. Nenhum dado de cliente, nenhum ambiente e nenhum achado real da GUARDIASEC é reproduzido nesta página, e nenhuma requisição mostrada aqui funciona contra um alvo real.
Posso usar esta estrutura no relatório da minha equipe?
Sim. A estrutura segue o que as referências públicas do setor recomendam e pode ser adotada por qualquer equipe interna que conduza avaliações próprias. Os campos que mais fazem diferença na prática são o critério de severidade declarado antes dos achados e o critério objetivo de reteste por achado.
O que um relatório de pentest precisa ter para ser auditável?
Escopo com data e alvos, critério de severidade explícito, identificador estável por achado, evidência com passos de reprodução, referência pública por classe de falha e registro do reteste. Com isso, um terceiro consegue verificar como cada conclusão foi obtida sem depender da memória de quem executou.
Por que o relatório separa impacto comprovado de consequência plausível?
Porque a diferença entre os dois muda a decisão. Comprovar acesso a um registro e afirmar acesso à base inteira são coisas diferentes, e um relatório que confunde as duas perde credibilidade na primeira revisão técnica. A separação também deixa claro o que não foi executado por decisão de limitar o impacto do teste.
A GUARDIASEC entrega o relatório neste formato?
Sim, com a mesma estrutura: sumário executivo separado do detalhe técnico, escopo com exclusões e limitações, critério de severidade declarado, achados com evidência e passos de reprodução, consolidação com ordem de correção e reteste das falhas reportadas.
Guias relacionados
Autoria e revisão
Cesar Gargiulo
CEO e fundador da GUARDIASEC. Responsável técnico e editorial pelo conteúdo publicado nesta biblioteca.
Publicado em . Última revisão em . Encontrou um erro técnico? Escreva para [email protected] e corrigimos com registro da alteração.
Próximo passo
Vamos avaliar os riscos do seu ambiente?
Conte seu cenário e definimos juntos o escopo certo. O objetivo é reduzir caminhos prováveis de ataque e elevar a maturidade de segurança, sem promessas absolutas.