Vulnerability Management Template
A repeatable template for tracking vulnerabilities, assigning remediation owners, defining patching timelines, and reporting security risks to stakeholders.
Overview
Unpatched vulnerabilities are one of the most common root causes of security breaches. A structured vulnerability management process ensures that every CVE is tracked, prioritized, assigned, and resolved within a defined timeline. This template provides a repeatable workflow for security teams, DevOps engineers, and engineering managers to manage vulnerabilities across applications and infrastructure. For findings discovered during a penetration test, pair this template with the Penetration Test Plan Template to maintain traceability from assessment to resolution.
When to Use
- For alternatives, see CI/CD Security: Harden Your Pipelines and Prevent Supply.
Use this resource when:
- A new CVE is disclosed that affects your technology stack
- Running automated vulnerability scans (container, dependency, infrastructure)
- Preparing for a security audit or compliance review
- Reporting security posture to leadership or customers
- Defining SLAs for patching based on severity
Solution
# Vulnerability Management Tracker
## 1. Vulnerability Inventory
| CVE ID | Component | Version | Severity | CVSS | Discovered | Source |
|--------|-----------|---------|----------|------|------------|--------|
| CVE-2024-XXXX | log4j-core | 2.14.1 | Critical | 9.8 | 2024-01-15 | Dependabot |
| CVE-2024-YYYY | openssl | 1.1.1n | High | 7.5 | 2024-02-03 | Trivy scan |
| CVE-2024-ZZZZ | nginx | 1.18.0 | Medium | 5.3 | 2024-02-10 | Nessus |
## 2. Risk Assessment
| CVE ID | Exploitability | Affected Systems | Data at Risk | Business Impact | Risk Score |
|--------|----------------|------------------|--------------|-----------------|------------|
| CVE-2024-XXXX | Public exploit available | API cluster, workers | PII, auth tokens | Service downtime, data breach | Critical |
| CVE-2024-YYYY | Proof of concept | Edge proxies | Config secrets | Lateral movement | High |
## 3. Remediation Plan
| CVE ID | Owner | Fix Strategy | Target Date | Status | Verification |
|--------|-------|--------------|-------------|--------|--------------|
| CVE-2024-XXXX | @security-team | Upgrade to 2.17.1 | 2024-01-17 | Complete | Rescan clean |
| CVE-2024-YYYY | @devops-team | Patch and redeploy | 2024-02-10 | In Progress | Awaiting deploy window |
### Fix Strategies
- **Upgrade:** Update to patched version (preferred)
- **Patch:** Apply vendor hotfix
- **WAF rule:** Block exploitation vector at edge
- **Config change:** Disable vulnerable feature
- **Compensating control:** Monitoring + alerting if patch not feasible
## 4. Patching SLA
| Severity | CVSS Range | SLA (days) | Escalation Path |
|----------|------------|------------|-----------------|
| Critical | 9.0 - 10.0 | 24 - 48 hours | CISO + Engineering VP |
| High | 7.0 - 8.9 | 7 days | Security Lead + Team Manager |
| Medium | 4.0 - 6.9 | 30 days | Engineering Manager |
| Low | 0.1 - 3.9 | 90 days | Tech Lead |
## 5. Exception Process
When a patch cannot be applied within SLA:
| CVE ID | Exception Reason | Compensating Control | Approved By | Review Date |
|--------|------------------|----------------------|-------------|-------------|
| CVE-2024-ZZZZ | Legacy dependency, breaking change | WAF rule + anomaly monitoring | CISO | 2024-04-01 |
## 6. Weekly Security Report
### Executive Summary
- **New vulnerabilities this week:** 3
- **Resolved this week:** 2
- **Past SLA:** 1 (CVE-2024-YYYY — awaiting deploy window)
- **Risk trend:** Improving
### Action Items
1. [ ] Complete OpenSSL upgrade on edge proxies by Feb 10
2. [ ] Review legacy dependency replacement plan with architecture team
3. [ ] Enable automated Trivy scanning on all CI pipelines
Explanation
The template separates inventory, risk assessment, remediation, and reporting into distinct sections. This prevents teams from jumping straight to patching without understanding which systems are affected and what data is at risk. The SLA table creates accountability by defining exactly how long each severity level can remain open before escalation.
The exception process is critical for legacy systems where patches are not immediately feasible. A documented exception with compensating controls is always preferable to an undocumented unpatched vulnerability.
Vulnerability Management Pipeline
=== CVE Lifecycle Flow ===
1. DISCOVERY
- Automated scanner detects CVE in dependency or container
- Manual scan or researcher report identifies vulnerability
- CVE imported into vulnerability tracker automatically
2. ASSESSMENT
- Security team validates the CVE (reproduce if possible)
- Severity assigned: Critical / High / Medium / Low
- Exploitability evaluated: is there a public exploit? a PoC?
- Business impact evaluated: what data? what services?
- Owner assigned: responsible team or engineer
3. PLANNING
- SLA assigned based on severity (see SLA table)
- Exception documented if no patch is available
- Compensating controls identified if patching is not immediate
- Priority adjusted based on business context
4. REMEDIATION
- Patch applied in a feature branch
- Tests run to verify the patch does not break functionality
- Patch deployed to staging for validation
- Patch deployed to production
5. VERIFICATION
- Rescan confirms the CVE is resolved
- Evidence captured: scanner output, deploy logs
- CVE closed only after successful verification
- If verification fails, CVE reopens with new SLA
Variants
| Context | Approach | Notes |
|---|---|---|
| Startup | Spreadsheet + manual scans | Focus on critical and high CVEs only |
| Mid-size | Jira + automated scanner integration | Track SLA compliance weekly |
| Enterprise | Vuln management platform (Rapid7, Tenable) | Full lifecycle with RBAC and audit trails |
What Works
- Scan early, scan often. Integrate dependency and container scanning into CI/CD so vulnerabilities are caught before deployment.
- Prioritize by exploitability, not just CVSS. A medium CVE with a public exploit is more urgent than a high CVSS that requires local access.
- Assign a single owner per CVE. Shared ownership becomes no ownership.
- Automate where possible. Use tools like Dependabot, Snyk, or Trivy to auto-create tickets and PRs for patchable issues.
- Report weekly to leadership. Visibility drives prioritization and resource allocation.
Common Mistakes
- Relying solely on CVSS for prioritization. A CVSS 7.5 in an internal admin tool is less urgent than a CVSS 6.5 in a public-facing API.
- Not tracking exceptions. “We will patch it later” without a date becomes “we forgot about it.”
- Patching without testing. Emergency patches deployed directly to production can cause outages worse than the vulnerability.
- Ignoring transitive dependencies. The vulnerable library might be three levels deep in your dependency tree.
- Failing to verify after patching. Always rescan to confirm the fix resolved the CVE.
Troubleshooting
- Authentication bypass in tests: ensure test users cannot reach production endpoints.
- False positives in scanning tools: tune rules against the risk profile. Distinguish between reachable vulnerabilities and theoretical issues.
- Secrets appear in logs: configure log filters to redact tokens, passwords, and keys. Audit log sinks for sensitive patterns.
- CSP breaks legitimate functionality: use report-only mode first, then enforce. Iterate on allowed sources based on real violations.
- Incident response stalls: run tabletop exercises.
Production Notes
- Deploy gradually using canary or blue-green to catch regressions early.
- Configure alerts for error rate, p99 latency, and failure rate before enabling in production.
- Document the rollback in the runbook; test the procedure in staging at least once per quarter.
- Review structured logs with correlation IDs to trace requests end-to-end during incidents.
Key Takeaways
- Apply vulnerability management template when you need a practical solution for your use case.
- Monitor performance after implementation; measure latency, errors, and resource usage before and after.
- Check the Troubleshooting section for common failures; most have documented root causes with fixes.
- Keep dependencies updated and run tests in CI to prevent production regressions.
Common Production Pitfalls
- Leaving required fields blank or using vague one-word answers.
- Filling the document once and never updating it after scope or decisions change.
- Storing the document where the team does not look during incidents or reviews.
- Not assigning an owner, due date, or review cadence.
- Copying boilerplate without removing sections that do not apply.
- Skipping version control, which makes rollback and accountability impossible.
- Failing to link the document to related decisions or follow-up actions.
- Avoiding quarterly reviews that would retire stale or unused sections.
Frequently Asked Questions
How do I handle a CVE with no available patch?
Document the exception, implement compensating controls (WAF rules, access restrictions, monitoring), and subscribe to vendor security advisories for the patch release date. Reassess risk weekly.
Should I patch low-severity vulnerabilities?
Yes, within the defined SLA. Attackers often chain low-severity vulnerabilities together to achieve a high-impact exploit. Low-severity items are also a signal of maintenance hygiene.
What tools integrate well with this template?
- Scanners: Trivy, Snyk, Nessus, Qualys, OWASP DC
- Ticketing: Jira, GitHub Issues, Linear
- Reporting: Grafana, Tableau, Google Sheets
- SOAR: Splunk SOAR, Palo Alto XSOAR for automated response
How do I communicate patching timelines to non-technical stakeholders?
Translate severity into business risk: "This critical vulnerability could allow unauthorized access to customer data within 48 hours if exploited. We are patching within 24 hours." Use the risk assessment table to justify timelines.
How do we handle vulnerabilities in transitive dependencies?
Transitive dependencies are libraries your code uses indirectly through other dependencies. To manage them: use tools that scan the full dependency tree (Snyk, Trivy, Dependabot). Scanning package.json or requirements.txt is not enough — scan the lockfile or resolved tree. If a transitive dependency is vulnerable: check if the direct dependency can be updated to a version that uses the patched version. If not, consider replacing the direct dependency. If that is not possible, use an override or patch to force the patched version. Document overrides — they are technical debt that must be resolved. Review transitive dependencies monthly.
How do we prioritize vulnerabilities in public vs internal services?
A vulnerability in a public service (internet-exposed API, web application) is more urgent than the same vulnerability in an internal service (admin tool, internal dashboard). Adjust priority: a CVSS 7.5 on a public API is Critical; the same CVSS 7.5 on an internal tool behind VPN may be Medium. Consider: is the service internet-accessible? does it require authentication? what data does it expose? are there compensating controls (WAF, rate limiting, IP allowlist)? Document the priority reasoning for audit purposes. Do not use CVSS alone — business context matters more than the technical score.
How do we integrate vulnerability scanning into CI/CD?
Integrate scanning at each pipeline stage: SAST at commit (source code analysis), dependency scanning at build (Snyk, Trivy, Dependabot), container scanning at image build (Trivy, Clair), DAST at staging (OWASP ZAP), and infrastructure scanning at deploy (tfsec, checkov). Configure the pipeline to fail on Critical/High and warn on Medium/Low. Use quality gates: block production deploy if Criticals are unresolved. Auto-create tickets for new vulnerabilities. Run scheduled scans on deployed images — new CVEs are published after deployment. Report pipeline metrics to leadership monthly.
How do we report vulnerability status to leadership?
Report monthly with these metrics: total open CVEs by severity, average age of CVEs by severity, percentage of SLAs met, number of overdue CVEs, month-over-month trends, and top 5 services with most vulnerabilities. Use a dashboard (Grafana, Tableau) with trend graphs. Translate to business impact: "10 critical CVEs in the payment service represent risk of credit card data exposure." Include an action plan: what is being patched this month, what needs more resources, what risks are being accepted. The report should be one page — leadership will not read 50 pages of CVE details.
How do we handle zero-day vulnerabilities?
For zero-day vulnerabilities: subscribe to security feeds (NVD, vendor advisories, CERT). When a relevant 0-day is published: immediately identify if your systems are affected. If there is active exploitation in the wild: treat as Critical regardless of CVSS. Apply immediate mitigations (WAF rules, network isolation, feature flags). If a patch is available: apply as emergency following the hotfix process. If no patch: document the exception with compensating controls. Communicate to leadership — 0-days are executive-level decisions. After the initial response, schedule permanent remediation and a post-incident review.
End of document. Review and update quarterly.
Related Resources
Security Audit Checklist Template
A thorough checklist for conducting security audits of applications and infrastructure.
DocPatch Management Template
A template for scheduling, testing, and deploying security patches across environments.
DocAPI Security Review Template
A checklist template for reviewing API authentication, rate limiting, and OWASP compliance.
DocSecurity Incident Response Template
A template for security incident response covering detection, classification, containment, eradication, recovery, communication, and post-incident review.
DocVulnerability Scan Report Template
A template for summarizing vulnerability scan findings, including asset coverage, severity distribution, and remediation tracking.
DocDisaster Recovery Test Plan
A template for planning and executing disaster recovery tests including failover validation, data integrity checks, and recovery time measurement.