Running a Security Audit Engineers Actually Fix Findings From
Most security audits produce a long PDF that engineering skims once and never opens again. The findings sit in a spreadsheet, the auditor moves on, and six months later the same gaps show up in the next audit. The fix isn't a better report format, it's treating the audit as the start of a remediation workflow, not the end of one.
This runbook walks through scoping an audit so it produces findings your team can act on, triaging those findings by what actually matters, and building the habit that keeps the same issues from reappearing next cycle.
Vendors Covered in this Article
Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.
How do you scope a security audit around what an attacker can reach?
Before you schedule anything, write down the systems that touch customer data, hold credentials, or sit on the public internet. That's your scope. An audit that tries to cover every internal tool and staging environment on day one produces so many low-value findings that the real ones get lost in the noise.
Start with production, then your CI/CD pipeline (it has write access to production even if it doesn't look like it), then anything holding secrets or customer PII. Internal admin tools and staging environments can wait for a second pass once the first audit's findings are actually closed.
How do you triage audit findings by exploitability, not severity label?
Auditors label findings Critical, High, Medium and Low, but that scale doesn't tell you what to fix first. A "High" finding on an internal tool behind SSO and a VPN is less urgent than a "Medium" finding on a public-facing API with no rate limiting. Re-sort the list yourself using three questions: is it reachable from the internet, does it require authentication first, and what does an attacker get if they succeed.
Federal vulnerability-management policy gives you a useful anchor here even if you're not a federal contractor: internet-accessible systems get the shortest remediation windows, and vulnerabilities with a known exploit in the wild get pulled to the front of the queue regardless of their label1. Borrowing that logic, an internet-facing finding with a public proof-of-concept should jump your entire backlog.
Assign every finding an owner and a due date, not a ticket
A finding that lands in a backlog with no owner becomes a finding that's still open at the next audit. When the report comes in, walk through it with the engineering leads who own each affected system, not just the security or compliance owner. Each finding needs a named person, not a team, and a due date tied to its exploitability tier from the previous step.
- Internet-facing, actively exploited: same day, page whoever's on call
- Internet-facing, no known exploit: within the week
- Internal, authenticated access required: next sprint
- Informational or best-practice gaps: backlog, revisit at the next audit
Build the evidence trail as you go, not after
If you're pursuing SOC 2 or a similar framework, every fix needs a paper trail: the finding, the pull request that closed it, and the date it shipped. Tools like Vanta and Drata pull this evidence automatically from connected systems (a merged PR, a resolved alert, a policy acknowledgment) instead of asking someone to screenshot a settings page every quarter.
Building that evidence trail during remediation, rather than reconstructing it before the next audit, is the difference between a renewal that takes an afternoon and one that takes two weeks of archaeology through old Slack threads.
Close the loop with a re-test before you file the report away
An audit finding isn't closed because someone merged a PR that looks right. Have whoever found the issue, or a peer engineer who wasn't involved in the fix, verify it's actually resolved: rerun the scan, retry the exploit, or check the config directly. This catches the fixes that address the symptom (patching one endpoint) but miss the root cause (the framework default that created the same hole in three other endpoints).
Once everything in scope is verified closed, set a recurring date for the next audit before you archive this one. Teams that treat the audit as a one-off event tend to let six or nine months slip by; teams that schedule the next one immediately keep the gap short enough that findings don't have time to compound.
What Good Looks Like
A finding closes within its committed window, has an owner's name attached from the day it's reported, and a re-test confirms the fix before the audit is filed away.
Building The Capability (5-Stage Skill Ladder)
How to Get Started
Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.
Vanta fits once you're pulling audit evidence from more than a handful of connected systems and want it collected automatically instead of by hand each quarter.
Drata is worth evaluating alongside Vanta when you need the same continuous evidence collection but with workflows built around a specific framework you're pursuing, like SOC 2 or ISO 27001.
Frequently Asked Questions
Should we hire an external firm or run the audit internally?
External testers bring a fresh perspective, and a SOC 2 report itself has to be issued by an independent CPA firm, but an internal team that already knows your architecture will often find more real issues per hour. Many teams do both: an internal review each quarter and an external audit annually.
How do we stop the same finding from reappearing next cycle?
Fix the pattern, not just the instance. If a missing input check shows up on one endpoint, check whether the same framework default is missing everywhere else it's used, and add a lint rule or template fix so new code doesn't reintroduce it.
What if engineering doesn't have time to fix everything before the next audit?
Close the exploitable, internet-facing findings first and document a remediation plan with dates for the rest. Auditors and most compliance frameworks accept a documented plan with real owners far better than a report that shows the same open items with no explanation.
Sources
Where we quote a benchmark, we show its source. Other figures in this guide are estimates or general guidance, so check them against your own numbers.
- Security patch remediation SLAs (CISA federal mandates, used as industry norm). CISA Binding Operational Directives 19-02 and 22-01 (CISA briefing hosted at NIST CSRC), 2022.
Related Guides
Tamper-Proof Audit Logs: What to Build In-House vs. What to Buy
A CTO's decision framework for tamper-proof audit logging: what's cheap to build yourself and what a compliance platform genuinely earns its cost on.
Why SOC 2 Prep Breaks Down After the Kickoff Meeting
The point where most SOC 2 readiness efforts stall, and how continuous evidence collection changes what the six months before an audit actually look like.
Terraform vs. Pulumi for IaC Governance: What Actually Differs in Practice
A practical comparison of Terraform and Pulumi for infrastructure-as-code governance, focused on policy enforcement, drift detection, and team fit.
Where Production Deployment Budgets Actually Leak
The five places a production deployment pipeline quietly burns engineering time and cloud spend, and how to find each one in your own setup.
How to Run a Platform Security Audit Without Stalling Delivery
A step-by-step way to scope, run and close out a platform engineering security audit that finds real gaps instead of producing a report nobody reads.
Catching a Breaking API Change Before Your Customer Does
How automated contract testing catches breaking changes between services before they reach production, and where teams usually skip it.