What to Do After You Get a Pentest Report: Remediation Workflow, Jira Templates, and Tracking
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:
- Is the affected system internet-accessible, or only accessible from a trusted internal network?
- Does exploiting this finding require credentials, physical access, or a prerequisite that an attacker is unlikely to have?
- Does any compensating control partially or fully mitigate this risk? (WAF, network segmentation, monitoring, MFA)
- What data or systems can an attacker reach if they successfully exploit this?
- Is there a known public exploit or active exploitation of this vulnerability in the wild?
Adjusted severity matrix:
| Pentest rating | Compensating controls | Adjusted priority |
|---|---|---|
| Critical | None | P1: Fix within 14 days |
| Critical | Partial (WAF, monitoring) | P2: Fix within 30 days |
| Critical | Strong (isolated network) | P3: Fix within 90 days |
| High | None, internet-facing | P1: Fix within 14 days |
| High | Partial | P2: Fix within 30 days |
| Medium | None | P3: Fix within 90 days |
| Medium | Any | P4: Fix within 180 days or accept |
| Low | Any | P4/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
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:
| Severity | Count | Already mitigated | Being fixed | Accepted |
|---|---|---|---|---|
| Critical | 3 | 1 | 2 | 0 |
| High | 7 | 2 | 4 | 1 |
| Medium | 14 | 0 | 6 | 8 |
| Low | 22 | 0 | 0 | 22 |
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:
- Has a single owner per finding
- Shows current status at a glance
- Has visible SLA deadlines with automatic aging
- Can be filtered by team, status, and priority
Minimum columns for a pentest remediation register:
| Column | What it contains |
|---|---|
| Finding ID | Pentest firm's ID (e.g., FIND-003) |
| Title | Short description |
| Pentest severity | Critical/High/Medium/Low |
| Adjusted priority | P1/P2/P3/P4/P5 after your triage |
| Affected system | Specific component, not just 'the app' |
| Owner | Named engineer or team, not 'security team' |
| Ticket link | Jira/Linear/GitHub issue link |
| Status | Open / In Progress / Remediated / Accepted / Deferred |
| SLA deadline | Date calculated from triage priority |
| Days open | Auto-calculated: today minus report date |
| Retest status | Not retested / Retested pass / Retested fail |
| Evidence | Link to PR, config change, or documentation |
| Notes | Any 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:
- Was the original fix incomplete? (Fixed the specific instance but not the same pattern in adjacent code)
- 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:
| Finding | Specific fix | Root cause | Systemic fix |
|---|---|---|---|
| SQL injection in /search | Parameterized query | No coding standards for query construction | Add parameterized query requirement to code review checklist and SAST rules |
| S3 bucket publicly accessible | Bucket ACL corrected | No S3 public access block enforced org-wide | Enable S3 Account-Level Block Public Access via AWS Organizations SCP |
| Admin interface exposed on 8080 | Firewall rule added | No standard for non-standard port exposure | Add 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
Free resources
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.
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.
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.

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.
The Mythos Brief is free.
AI that finds 27-year-old zero-days. What it means for your security program.
