After the pentest
After the pentest: remediation, retest and close-out
What to do after a penetration test: triage findings, assign fixes, verify them, request a retest and close out with evidence. Includes a tracker template.
Short answer
After a pentest, triage each finding, assign an owner and a due date, fix it, check the fix yourself with the reproduction steps, then ask the tester to retest. Close a finding only with evidence that the fix works. Keep the report, retest result and tickets together for customers and auditors.
A pentest only lowers risk when the fixes ship and someone checks them. The steps are: triage, assign, fix, verify, retest, close out.
Teams often stop after the first fixes. Cobalt's 2025 State of Pentesting Report, built on its platform data, reports that less than half (48%) of all findings ever get resolved, and 69% of the riskiest. It gives a median time to resolve of 67 days. These are one vendor's figures, but they show that findings stay open.
How do you triage the findings?#
Read the report first; our guide to how to read a penetration testing report explains each section. Then triage in one short meeting, with an engineer who knows the code and a person who can decide on risk.
For each finding, answer four questions:
- Do we agree it is real? Reproduce it. If you cannot, ask the tester.
- What is our priority? Severity is the tester's rating. Priority adds your context.
- Who owns the fix?
- When is it due?
Look for patterns. Three findings that share one root cause, such as a missing ownership check in a shared helper, may need one fix. Look at the "controls that held" list too, so your fix does not break working protections.
What should the first week look like?#
Contain the worst issues first. For a Critical or High finding that is easy to use, take a short-term step while the full fix is built: disable the feature, add a rule at the gateway, or limit access. Record the step. It does not close the finding.
Also check for signs of past abuse. Search your logs for the request pattern in the reproduction steps. If you find real use before the test, treat it as an incident under your own process.
How do you plan the fixes?#
Create one ticket per finding, or per root cause. Put these fields in each ticket:
| Field | Content |
|---|---|
| Finding ID | From the report, for example F-02 |
| Severity | The tester's rating, unchanged |
| Priority | Your rating, with the reason |
| Owner | One named person |
| Due date | Based on your written target |
| Fix approach | Short note, agreed with the tester's guidance |
| Verification | How you will prove the fix works |
| Status | Open, fixed, verified, retested, closed, accepted |
Set due dates by severity and write the targets in your policy. PCI DSS 11.4.4 expects exploitable findings to be corrected in accordance with your risk assessment, and it does not name days. Choose targets your team can meet. When a date is missed, someone should decide what happens next.
How do you fix well?#
Fix the root cause. If the flaw was a missing ownership check on one endpoint, look for the same pattern on every endpoint that loads a record by ID. Add the check in one shared place if you can.
Add a test that fails before the fix and passes after. Use the reproduction steps from the report. These tests stop the flaw from coming back. Keep the controls that held as tests, too.
A fix that hides the symptom leaves the flaw open. Blocking one payload in a filter or hiding a button in the UI are examples, and the tester will usually find the bypass at retest.
How do you verify a fix before the retest?#
Run the report's reproduction steps against the fixed build, with test accounts. The result should differ from the original. Save the output with a date.
Check three things:
- The original request no longer works.
- A small variation does not work either: a different ID, another role, another content type.
- Normal use still works. The control tests should still pass.
Run reproduction scripts only with authorization and with test-owned identifiers. Prefer staging.
When and how should you request a retest?#
Ask for a retest when a group of fixes is verified in your environment and deployed to the tested environment. Do not send each fix alone, unless a finding is urgent. Batches save time for both sides.
Send the tester:
- The list of finding IDs you want retested.
- The build or version that holds the fixes.
- Any change to accounts, hosts or scope since the test.
- Your notes on how each fix works.
A retest checks each fix and looks for nearby bypasses. The result should state, per finding, one of: fixed, partly fixed, not fixed, or not retested. A good result has new evidence, such as the original request and its new response. See retesting for what Excession Labs's retest result looks like. We can retest fixed findings. Ask about terms when you scope.
A tracker template#
Copy this table into your tracker. The rows are examples from a fictional app, Harbor Notes.
Demonstration only
This is a demonstration. No real customer system was tested. The findings are fictional.
| ID | Severity | Priority | Owner | Due | Status | Evidence of fix |
|---|---|---|---|---|---|---|
| F-01 | High | 1 | Dev lead | Set by policy | Retested: fixed | Retest output saved, dated |
| F-02 | High | 1 | Backend | Set by policy | Fixed, awaiting retest | Own check passed on build 412 |
| F-03 | Medium | 2 | Platform | Set by policy | Accepted | Risk acceptance note, review date set |
| F-04 | Low | 3 | Frontend | Next planned release | Open | None yet |
A finding marked "fixed" with no evidence is not closed, so keep a status column and an evidence column.
How do you close out?#
Close a finding when you have evidence that it is fixed, or a signed risk acceptance. Keep three things together: the original report, the retest result and the tickets with dates.
Then do a short review:
- What caused the flaws? Missing checks, no design review, no tests?
- Which fix should become a standard, such as a shared authorization helper?
- Which trigger should start the next test? See how often should you pentest.
If a customer or auditor asks for proof, share what fits the request. A summary or an attestation letter is often enough for a customer. See customer security reviews for what buyers ask. Ask the auditor what they need. A report alone may not meet a standard.
How do you stay fixed?#
Releases add new risk, so tie the next test to your release pace. A recurring plan tests the changed areas after meaningful releases, and checks that old fixes still hold.
Need a pentest you can act on?
Tell us what you need tested and why. We reply to agree scope, and testing starts only after written authorization.
Questions
How fast should we fix findings?
Set a target for each severity level and write it down. PCI DSS expects exploitable findings to be corrected under the entity's risk assessment. Many teams set shorter targets for Critical and High. Pick targets you can keep.
Do we need a retest for every finding?
Retest at least the Critical, High and Medium findings, and any fix that changed authentication or access control. Low findings can often be checked by your own team with the reproduction steps. Ask your provider and auditor.
What if we cannot fix a finding?
Record a risk acceptance with the owner's name, the reason, the date and a review date. Add a compensating control if you have one. Do not leave the finding open without a decision.
Can we tell customers about open findings?
Share the current status carefully. Many teams give a summary letter with the scope, date and result counts. They avoid sharing details of open weaknesses. Check your contract and legal advice.
Sources
- Cobalt State of Pentesting Report 2025 (with Cyentia Institute), p.4: time to resolve and resolution rates (checked 9 November 2026)
- PCI DSS v3.2.1 to v4.0 Summary of Changes (r1): 11.4.4 corrections in accordance with risk assessment (checked 9 November 2026)
- NIST SP 800-115: Technical Guide to Information Security Testing and Assessment (checked 9 November 2026)