58%
of pentest findings remain unremediated 6 months after report delivery (PlexTrac 2025)
34%
of organizations do not track remediation progress after receiving a pentest report (PlexTrac 2025)
41%
of recurring critical findings in follow-up pentests were in the original report and marked 'remediated' (Vonahi 2025)

The pentest report arrived. It is 80 pages long. There are 3 critical findings, 7 high, 14 medium, and 22 low. The CISO wants a summary by end of week. Engineering is asking which ones they own. The auditor will ask for evidence of remediation in three months.

Most security teams handle this moment with a flurry of Slack messages, a spreadsheet that dies after week two, and a lingering feeling that the medium findings will never get fixed. A 2025 PlexTrac study found that 58% of pentest findings are still unremediated six months after report delivery.

This guide gives you the actual workflow: how to triage findings, how to write tickets that engineers will close, how to present results to leadership without being alarmist, how to track progress against SLAs, and how to prepare for the retest.

Step 1: Triage Before You Ticket (Days 1 to 3)

Do not create Jira tickets for every finding the moment you get the report. Triage first.

What triage means:

Pentest findings are scored by the pentester based on the standalone vulnerability, not on your specific environment. A finding rated Critical by the pentest firm may be Low risk in your environment because the affected system is isolated, not internet-accessible, or protected by compensating controls. Conversely, a Medium finding may be Critical in your environment because it sits on a Tier 1 system with no compensating controls.

The triage questions for every Critical and High finding:

  1. Is the affected system internet-accessible, or only accessible from a trusted internal network?
  2. Does exploiting this finding require credentials, physical access, or a prerequisite that an attacker is unlikely to have?
  3. Does any compensating control partially or fully mitigate this risk? (WAF, network segmentation, monitoring, MFA)
  4. What data or systems can an attacker reach if they successfully exploit this?
  5. Is there a known public exploit or active exploitation of this vulnerability in the wild?

Adjusted severity matrix:

Pentest ratingCompensating controlsAdjusted priority
CriticalNoneP1: Fix within 14 days
CriticalPartial (WAF, monitoring)P2: Fix within 30 days
CriticalStrong (isolated network)P3: Fix within 90 days
HighNone, internet-facingP1: Fix within 14 days
HighPartialP2: Fix within 30 days
MediumNoneP3: Fix within 90 days
MediumAnyP4: Fix within 180 days or accept
LowAnyP4/P5: Accept or backlog

Document your triage decisions. You will need to explain to the auditor, the pentest firm on retest, and your CISO why you treated a Critical as a P3. The reasoning matters as much as the outcome.

Read the executive summary and attack narrative

Understand which findings were chained together to compromise systems -- these chains often represent higher real-world risk than individual findings scored in isolation

Identify the proof-of-concept paths

Findings with working exploits the pentester actually ran represent confirmed risk; findings the pentester noted as theoretical represent potential risk

Map findings to asset owners

Determine which engineering team owns each affected system before writing any tickets

Apply compensating controls

Adjust severity downward only when a compensating control genuinely reduces exploitability, not just because fixing something is inconvenient

Identify immediate risk reduction

Two or three actions that reduce risk within 24 hours -- disabling a service, adding a firewall rule, rotating a credential -- before the full remediation cycle begins

Step 2: Write Tickets Engineers Will Actually Fix

The most common reason pentest findings stay open indefinitely: the ticket says 'remediate SQL injection in user search endpoint' with a link to the 80-page report and nothing else. An engineer picks it up, has no context, opens the report, reads 80 pages, closes it, and moves the ticket back to the backlog.

What a good pentest remediation ticket contains:

Title: [P1] SQL Injection in /api/users/search — exploitable without auth

Severity: Critical (P1 — fix within 14 days)
Affected component: /api/users/search endpoint, UserSearchController.java:147
Pentester finding ID: FIND-003 (page 34 of the report)

What the pentester found:
The search parameter accepts unsanitized user input that is concatenated 
directly into a SQL query. Using a standard sqlmap payload, the pentester 
exfiltrated the full users table including hashed passwords.

Proof of concept (from the report):
  GET /api/users/search?q=test'+UNION+SELECT+username,password+FROM+users--
  Response: {"users": [{"username": "admin", "password": "$2b$10$..."}]}

Why this matters:
This endpoint is unauthenticated and internet-accessible. An attacker can 
exfiltrate all usernames and password hashes without any credentials. 
If any users share passwords with other services, this enables account takeover.

How to fix it:
1. Use parameterized queries / prepared statements for all database queries
   (do NOT use string concatenation or format strings with user input)
2. In Java with JDBC: use PreparedStatement with ? placeholders
3. Apply input validation to reject inputs containing SQL metacharacters 
   as a defense-in-depth layer
4. Review all other query construction in UserSearchController and adjacent 
   controllers for the same pattern

Verification:
The pentester will retest this specific finding. To pass retest:
- The payload above must no longer return database contents
- A parameterized query implementation must be visible in code review

Owner: [Backend Engineering Team]
Deadline: [Date 14 days from report delivery]
Retest date: [Date 30 days from report delivery]

Ticket fields that prevent escalation confusion:

  • Pentest finding ID and page number: Engineers should never have to read the full 80-page report to understand one ticket
  • Proof of concept reproduced in the ticket: The exact payload or request the pentester used, copy-pasted from the report
  • Why it matters in business terms: Not 'SQL injection is bad' but 'an attacker can steal all user credentials without logging in'
  • Specific fix with code-level guidance: Not 'fix the SQL injection' but 'use parameterized queries; here is how'
  • Verification criteria: What the engineer needs to demonstrate to pass the retest
Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

Step 3: Present Results to Leadership (Without Causing a Fire Drill)

Your CISO and engineering leadership need to know what was found without you triggering an all-hands meeting every time the word 'Critical' appears.

The 5-slide leadership deck structure:

Slide 1: What we tested (scope) One sentence each: what systems were in scope, what type of assessment (external network, web application, social engineering), and what the test period was. Do not bury the audience in methodology.

Slide 2: What we found (risk summary) A simple table:

SeverityCountAlready mitigatedBeing fixedAccepted
Critical3120
High7241
Medium14068
Low220022

Note: do not show raw critical counts without context. A '3 Critical findings' headline with no context causes panic. The table above shows that 1 is already mitigated and 2 are actively being fixed.

Slide 3: The two things that matter most Pick the two findings that represent the most real-world risk. One paragraph each. Frame in business terms: not 'unauthenticated SQL injection in the user search endpoint' but 'an attacker without an account could extract all customer credentials from our database using a standard technique.' Include the adjusted priority and the fix deadline.

Slide 4: Remediation timeline A simple Gantt-style view or milestone list: which findings are being fixed by when, who owns each stream, and when the retest is scheduled.

Slide 5: What we are changing permanently The systemic fixes: the process changes that prevent the same class of findings in the next pentest. Not just 'we fixed the SQL injection' but 'we are adding parameterized query enforcement to our code review checklist and SAST rules.' This is the slide that demonstrates the pentest created lasting security improvement, not just a one-time fix cycle.

Step 4: Track Remediation With a Shared Register

A Google Sheet or Notion page that dies after week two is not a tracking system. You need a register that:

  1. Has a single owner per finding
  2. Shows current status at a glance
  3. Has visible SLA deadlines with automatic aging
  4. Can be filtered by team, status, and priority

Minimum columns for a pentest remediation register:

ColumnWhat it contains
Finding IDPentest firm's ID (e.g., FIND-003)
TitleShort description
Pentest severityCritical/High/Medium/Low
Adjusted priorityP1/P2/P3/P4/P5 after your triage
Affected systemSpecific component, not just 'the app'
OwnerNamed engineer or team, not 'security team'
Ticket linkJira/Linear/GitHub issue link
StatusOpen / In Progress / Remediated / Accepted / Deferred
SLA deadlineDate calculated from triage priority
Days openAuto-calculated: today minus report date
Retest statusNot retested / Retested pass / Retested fail
EvidenceLink to PR, config change, or documentation
NotesAny context on why status is what it is

Weekly status update cadence:

Send a brief weekly email to the engineering leads and your CISO:

Subject: Pentest Remediation Status — Week [N] of [Total]

P1 findings: 2/3 remediated (1 in review, ETA Thursday)
P2 findings: 4/7 remediated (3 in sprint, on track)
Overall: 6/47 findings closed this week, 31 remaining

Retest scheduled: [Date]

At risk: FIND-019 (P2, SQL injection in payment module)
Owner: [Team] — ticket has been open 18 days with no update.
Needed: owner escalation by EOW.

This email serves three purposes: accountability for owners, visibility for leadership, and a paper trail for the auditor.

Step 5: Prepare for the Retest

A retest is not the same as re-running the original pentest. It is a targeted verification: the pentester runs the same proof-of-concept from the original report against each finding and confirms it no longer succeeds.

Before the retest:

  • Every P1 and P2 finding should be remediated and the evidence documented (PR links, config screenshots, deployment logs)
  • For each finding, the person who fixed it should be able to explain to you in 2 minutes what they changed and why it fixes the issue -- not just 'we updated the library'
  • Run the proof-of-concept payloads yourself before the retest. If the pentest firm's P1 SQL injection payload still works in staging, it is better to find that before the retest than during it
  • Brief the engineering owners: tell them the retester will be re-running specific payloads and may ask technical questions about what changed

For accepted and deferred findings:

Any finding you accepted or deferred without fixing needs documented rationale:

  • Why was it accepted? (Compensating controls, risk tolerance, cost of fix exceeds risk)
  • Who approved the risk acceptance? (Named person with authority to accept the risk)
  • When does the acceptance expire? (Risk acceptance should not be permanent for high-severity findings)
  • What compensating controls reduce the risk in the interim?

The pentest firm will note accepted findings in the retest report. An accepted Critical finding with no documented rationale is an audit finding. An accepted Critical finding with documented compensating controls and a 90-day review commitment is a defensible risk decision.

Post-retest:

Once the retest report comes back, close all verified-remediated findings in your tracking register and mark them with the retest date. Update your pentest history log with the dates and outcome. This log becomes the evidence for your SOC 2 pentest controls and for the next pentest's scoping discussion ('these were findings last year -- confirm they remain fixed').

What to Do With Recurring Findings

A 2025 Vonahi study found that 41% of critical findings in follow-up pentests were findings from the prior pentest that were marked 'remediated.' This happens because the fix addressed the symptom (one specific endpoint) but not the root cause (the pattern that created the vulnerability everywhere).

When a finding recurs, ask two questions:

  1. Was the original fix incomplete? (Fixed the specific instance but not the same pattern in adjacent code)
  2. Did the underlying cause get addressed? (Fixed the SQL injection in the search endpoint but never audited the other 30 query construction patterns in the codebase)

Root cause-driven remediation:

For every P1 and P2 finding, after the specific instance is fixed, identify and document the root cause:

FindingSpecific fixRoot causeSystemic fix
SQL injection in /searchParameterized queryNo coding standards for query constructionAdd parameterized query requirement to code review checklist and SAST rules
S3 bucket publicly accessibleBucket ACL correctedNo S3 public access block enforced org-wideEnable S3 Account-Level Block Public Access via AWS Organizations SCP
Admin interface exposed on 8080Firewall rule addedNo standard for non-standard port exposureAdd port exposure check to deployment checklist

The systemic fix column is what prevents the finding from recurring. It is also the most valuable output of the pentest -- you are getting paid to discover root causes, not just to fix individual instances.

The bottom line

The pentest report is not the deliverable -- the remediation is. A report sitting in a folder with three fixed findings and 44 untouched ones represents thousands of dollars of wasted budget and zero security improvement. The workflow is simple: triage every finding against your actual environment, write tickets engineers can act on without reading 80 pages, track progress against documented SLAs, and address the root causes so the same findings do not reappear next year.

Frequently asked questions

How long should Critical pentest findings take to remediate?

Industry SLAs for Critical findings (assuming no compensating controls) are 14-30 days. If you have compensating controls that partially mitigate the risk, up to 90 days may be defensible with documented rationale. The specific SLA matters less than consistency: define it, document it, and hold to it. An auditor looking at your vulnerability management program will check whether your stated SLA matches your actual remediation timeline across the trailing 12 months.

What if engineering refuses to prioritize pentest remediation?

Escalation is appropriate for P1 findings -- frame it in terms of business risk, not security rules. 'This finding means an attacker without credentials can export all customer data from our database' is more actionable for a product or engineering leader than 'this is a Critical SQL injection.' If written risk acceptance is appropriate (the fix is genuinely low priority relative to other work), get it signed by the engineering VP and document the compensating controls. Unsigned, undocumented deferral of Critical findings is not a posture you can defend to an auditor or board.

Should we retest all findings or just the Critical and High ones?

Retest all P1 and P2 findings (Critical and adjusted-High). For P3 and below, a spot-check of remediated findings is sufficient unless your auditor or customer requires full retest coverage. Most pentest firms will scope a retest engagement accordingly -- full retest of Critical and High only is typically 20-30% of the original engagement cost.

How do we handle a finding that is genuinely unfixable in our environment?

Document the risk acceptance explicitly: why it cannot be fixed, what compensating controls reduce the risk, who approved the acceptance, and when the acceptance is reviewed. Risk acceptance is a legitimate security decision when it is made consciously and documented -- it is not the same as ignoring the finding. Many Low and some Medium findings are appropriately accepted; Critical findings should only be accepted with strong compensating controls and explicit executive sign-off.

What should we share with the board after a pentest?

Share the executive summary, your adjusted risk table (severity counts with status), and the two most significant findings in business terms. Do not share the full technical report with the board -- the proof-of-concept exploit details are not board-appropriate and create handling complexity. What the board needs to know: what was found, what the real-world impact could be, what you are doing about it, and by when.

What is the difference between a pentest and a vulnerability scan?

A vulnerability scan is automated tool output: a list of known CVEs and misconfigurations found by running Nessus, Qualys, or similar against your environment. It requires no human expertise to generate and produces many false positives. A penetration test is a human-driven exercise where a skilled attacker attempts to chain findings into actual compromise paths. A pentest will find things a scanner misses (business logic flaws, chained low-severity vulnerabilities, manual exploitation of scanner-detected issues) and confirms which vulnerabilities are actually exploitable in your specific environment.

Sources & references

  1. PlexTrac State of Pentesting Report
  2. CVSS Scoring Specification (FIRST)
  3. MITRE ATT&CK Framework
  4. OWASP Threat Modeling
  5. IBM Cost of a Data Breach Report
  6. Atomic Red Team (Red Canary)

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Free newsletter

Get threat intel before your inbox does.

50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, weekly, no spam.

Unsubscribe anytime. We never sell your data.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals weekly.

Free Brief

The Mythos Brief is free.

AI that finds 27-year-old zero-days. What it means for your security program.

Joins Decryption Digest. Unsubscribe anytime.

Daily Briefing

Get briefings like this every morning

Actionable threat intelligence for working practitioners. Free. No spam. Trusted by 50,000+ SOC analysts, CISOs, and security engineers.

Unsubscribe anytime.

Mythos Brief

Anthropic's AI finds zero-days your scanners miss.