47%
of pentest findings are still open 6 months after the engagement (PlexTrac State of Pentesting 2024)
3 objections
cover 90% of remediation resistance: 'not exploitable here,' 'too expensive to fix,' 'we'll fix it later'
30 days
is the window where remediation momentum is highest -- after that, findings compete with new feature work

A pentest report delivered as a PDF is a document, not a remediation plan. Forty-seven percent of pentest findings are still open six months after the engagement because the translation from 'finding' to 'ticket with an owner, a deadline, and clear fix instructions' never happens. This guide covers how to break a report into actionable tickets on day one, how to reclassify severity for your environment, the exact ticket format engineers will act on, how to handle the three most common objections, and how to track progress without destroying your relationship with engineering.

Day 1: Break the Report Into Tickets Before the Kickoff Call

The moment you receive the pentest report, do not wait for a formal debrief to start creating tickets. Create a ticket for every finding above Low severity before the debrief meeting.

Why before the meeting: The kickoff call often generates pressure to deprioritize. If tickets already exist, they have gravity. If tickets don't exist, the conversation is easier to defer.

Ticket creation template:

Title: [PENTEST] [SEVERITY] [SHORT FINDING NAME]
Example: [PENTEST] CRITICAL: SQL injection in /api/user/search endpoint

Labels: security, pentest-2026-Q2, severity-critical
Assignee: [Engineering lead to triage and reassign]
Due date: [per SLA -- Critical = 7 days from report date]

Body:
## Finding
[Copy the finding summary from the pentest report verbatim]

## What an attacker can do
[Plain English description of impact -- write this yourself,
not from the report. Make it concrete.]
Example: "An unauthenticated attacker can send a crafted request
to our user search endpoint and read any data from our users
table, including hashed passwords and PII for all 14,000 customers."

## Reproduction steps
[Copy from report or ask pentester to provide]

## Recommended fix
[Copy from report; add implementation detail specific to your stack if you can]

## Verification
[How to confirm the fix is effective -- ideally: run the original
poc command and confirm it fails]

## References
[CVE or CWE number if applicable; link to OWASP guidance]

For each ticket, immediately answer:

  1. Which team owns this code/system? (that's the assignee)
  2. Is this internet-exposed? (affects SLA)
  3. Does our environment reduce severity? (document if so)

Severity Reclassification Framework

Pentest firms use CVSS or their own severity scale based on generic worst-case scenarios. Your environment has compensating controls, architecture differences, and data context the pentester doesn't fully know. Reclassify before ticketing.

Reclassification decision tree:

Start with the pentest firm's severity.

Adjust DOWN one level if:
  • The vulnerable system has no internet path (fully internal)
  • The vulnerability requires authenticated access with a role
    that is limited to 2-3 employees with strong vetting
  • A compensating WAF/IDS rule is verified to block the attack
  • The data accessible via the vulnerability is not classified
    as sensitive by your data classification policy

Adjust UP one level if:
  • The vulnerability is on a system you classified as higher
    criticality than the pentester assumed
  • The pentester rated it Medium but it chains to a Critical
    finding (e.g., SSRF that leads to credential exfiltration)
  • The system has had a prior incident via a similar technique

Never adjust below the pentester's rating by more than one level
without CISO or security lead sign-off.

Document reclassification in every ticket:

## Severity reclassification
Original severity: Critical (CVSS 9.3)
Reclassified to: High
Reason: The affected endpoint requires authentication with the
'admin' role. Our admin role is limited to 3 operations engineers
who have completed background checks. Attack chain still requires
valid admin credential -- not a zero-click exploit.
Approved by: [NAME, TITLE, DATE]
Review date: [90 days -- if compensating control changes, re-evaluate]
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.

Handling the Three Most Common Engineering Objections

Objection 1: 'That's not exploitable in our environment'

This is sometimes correct and sometimes motivated reasoning. Handle it as a process, not a debate:

1. Ask the engineer to document their reasoning in the ticket:
   'What specific compensating control makes this unexploitable
   in our environment?'

2. Evaluate the control against three questions:
   a. Is the control verified to be in place? (not assumed)
   b. Would the control remain effective if the environment changed?
   c. Is this 'zero risk' or 'difficult but not impossible'?

3. Outcome:
   - If the control is verified and durable: reclassify to
     'Accepted risk with compensating control,' document,
     set a 90-day review date
   - If the control is assumed or fragile: maintain severity
     and require remediation

Objection 2: 'This is too expensive to fix'

Translate to business terms:

Cost to fix: $X (engineering hours)
Cost of a breach via this vector: $Y (use Ponemon
benchmarks or your insurer's breach cost estimate)
Risk-adjusted annual cost of not fixing:
  $Y x probability of exploit in 12 months

If cost to fix < risk-adjusted cost of breach: fix it
If cost to fix > risk-adjusted cost of breach:
  document formal risk acceptance with executive sign-off

Objection 3: 'We'll fix it in the next sprint'

Require specificity before accepting:

Unacceptable: 'We'll fix it next sprint'
Acceptable: 'This is in Sprint 47 (starts May 27),
assigned to [ENGINEER], estimated 4 story points'

If it slips from Sprint 47: 'This has now slipped twice.
I'm escalating to [ENGINEERING MANAGER] to discuss
reprioritization. The risk of keeping this open is [SPECIFIC].'

The Remediation Tracking Register

One spreadsheet, updated weekly. Every open finding is a row. Share it with engineering leadership -- not just security.

Finding ID | Title | Original Sev | Reclassified Sev | Assignee | SLA Date | Status | Sprint | Blocked By
PT-001 | SQLi in /api/user/search | Critical | Critical | @alice | 2026-06-01 | In Progress | Sprint 47 | -
PT-002 | IDOR on /api/orders | High | High | @bob | 2026-06-15 | Open | Not scheduled | -
PT-003 | Missing HSTS header | Medium | Low | @carol | 2026-08-01 | Open | Backlog | -
PT-004 | Reflected XSS on search | High | High | @dave | 2026-06-15 | Accepted Risk | N/A | Compensating: WAF rule PT-WAF-001
PT-005 | Outdated jQuery 1.x | Medium | Medium | @alice | 2026-08-01 | Closed | Sprint 46 | -

Weekly 15-minute register review with engineering lead:

Agenda:
1. Any findings closed this week? (celebrate + close ticket)
2. Any findings at risk of missing SLA? (what's the blocker?)
3. Any new accepted-risk decisions needed? (brief discussion + document)
4. What's the overall closure rate? (% closed of total)

Closure rate formula:

Closure rate = (Findings closed or accepted) / Total findings x 100

Target at 30 days: >40% of Critical/High findings closed
Target at 60 days: >70% of Critical/High findings closed
Target at 90 days: >90% of Critical/High findings closed or formally accepted

Retest: Verify the Fix Actually Works

Every remediated finding should be retested before closing the ticket. Developers fix what they understood; the fix may not address the actual vulnerability.

Lightweight retest process (for internal teams without a retainer):

For web application findings:

# If the pentest firm provided a curl PoC, re-run it after the fix
# Example: original SQLi test
curl -s 'https://app.example.com/api/user/search?q=test%27%20OR%20%271%27%3D%271' \
  -H 'Authorization: Bearer YOUR_TOKEN'

# After fix: confirm the input is sanitized
# Expected: no SQL results returned, or a 400/422 error
# Unacceptable: same data returned, or a generic error that suggests
# the query still ran

For infrastructure findings:

# Missing encryption at rest -- verify after fix
aws s3api get-bucket-encryption --bucket BUCKET_NAME
# Should return a ServerSideEncryptionConfiguration

# Open security group -- verify after fix
aws ec2 describe-security-groups --group-ids sg-XXXXXXXX \
  --query 'SecurityGroups[].IpPermissions'
# Should not include 0.0.0.0/0 on port 22

For Critical findings: always request a spot retest from the original pentest firm (most include one in the engagement scope). A self-verified Critical closure is a risk.

Closing a ticket:

Status: Closed - Verified
Closed by: [NAME]
Verification method: [PoC re-run / pentest firm retest / automated scan]
Verification date: [DATE]
Verification evidence: [screenshot / log / command output attached]

Building the Engineering Relationship That Makes This Work

Remediation velocity depends entirely on the relationship between security and engineering. These behaviors build the relationship; their opposites destroy it.

Do:

  • Join engineering sprint planning as an observer before adding security tickets to the backlog
  • Ask engineers 'what would make this easier to fix?' rather than 'why haven't you fixed this?'
  • Provide the fix, not just the finding -- include code snippets where you can
  • Acknowledge when an engineer's compensating control argument is correct
  • Share external examples of the same vulnerability being exploited (creates urgency without blame)
  • Publicly recognize engineering leads when they close findings ahead of SLA

Don't:

  • Escalate to the CTO before talking to the engineering lead first
  • Assign severity labels that engineers perceive as disproportionate (undermines credibility for the next report)
  • Let findings sit unticketted for more than 48 hours after report delivery
  • Frame remediation as 'security team work' -- it is engineering work, security is the coach
  • Create a separate security backlog that engineers don't own -- findings must live in the same backlog as everything else

The bottom line

The pentest report is the beginning of the remediation process, not the end. Break it into tickets the day it arrives, reclassify severity with your environment's context, handle objections with documented process rather than debate, and track progress weekly in a shared register. The goal is not to close findings -- it is to reduce risk. Sometimes that means a fix; sometimes it means a verified, documented, executive-approved risk acceptance. Both are valid outcomes; undocumented open findings are not.

Frequently asked questions

Why do pentest findings sit unresolved for months?

Three reasons: (1) Findings are delivered as a PDF that no one is assigned to action -- there's no owner, no deadline, no ticket. (2) The severity doesn't match engineers' intuition about real exploitability, so they mentally deprioritize. (3) Security and engineering have no agreed process for handling security debt, so findings compete with feature work and security loses. The fix is operational: break the report into individual tickets the day it's delivered, assign owners, and start with the three that matter most.

How do I handle an engineer who says a Critical finding is 'not exploitable in our environment'?

Ask for the argument in writing in the ticket, then evaluate it against three criteria: (1) Is the compensating control actually in place and verified (not just assumed)? (2) Would the control remain effective if the environment changed? (3) Is the argument 'we don't have that vulnerability' or 'we have it but it's hard to reach'? If the answer to (3) is the latter, the vulnerability exists -- the question is only about exploitability difficulty, not zero risk. Document the decision either as 'accepted risk with compensating controls' or 'remediation required.'

Should pentest findings map to CVSS scores?

CVSS scores from a pentest reflect theoretical worst-case severity, not your-environment severity. A Critical CVSS 9.8 finding on a system that is firewalled from the internet with no path to sensitive data is not a Critical in your environment. Reclassify using your own context: attack surface (internet-exposed vs. internal), asset criticality, and actual exploitability in your architecture. Document the reclassification rationale in every ticket where you change the severity.

How do I track pentest remediation progress without nagging engineers?

Set up a 15-minute weekly sync with the engineering lead, not individual engineers. Review the tracking register together: what closed, what's at risk of missing SLA, what's blocked. Make the SLA miss visible in the register -- not as blame, but as a data point that feeds your next security update to leadership. Engineers respond better to a shared register with clear deadlines than to recurring email reminders.

What is a reasonable remediation SLA for pentest findings?

A common framework: Critical findings (direct path to data breach or system compromise) -- 7 days for internet-exposed, 30 days for internal. High findings -- 30 days for internet-exposed, 60 days for internal. Medium -- 90 days. Low -- next major release cycle or quarterly. These SLAs should be agreed with engineering leadership before the pentest engagement, not imposed after the report arrives. SLAs agreed in advance have better compliance than SLAs announced with a report.

What should I do when an engineer says 'we'll fix it in the next sprint' repeatedly?

'Next sprint' without a specific date is not a commitment. In the ticket, require: the specific sprint name/number, the story point estimate, and the name of the engineer assigned. Then track whether it appeared in that sprint's backlog. If it slips twice, escalate to the engineering manager -- not as a conflict, but as: 'This finding has been pushed twice; I need your help getting it into the sprint. Here's the risk if it stays open.' Escalation with a risk framing is more effective than escalation as a complaint.

Sources & references

  1. PlexTrac State of Pentesting 2024
  2. CVSS Specification (FIRST)
  3. Ponemon Institute / IBM Cost of Data Breach Report
  4. NIST Cybersecurity Framework
  5. CIS Controls

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.