
Vulnerability Exception Tracking System
FreeStreamline your vulnerability exception management process.
Free · Opens the source repo
What Vulnerability Exception Tracking System does
The Vulnerability Exception Tracking System skill is designed to help organizations manage vulnerabilities that cannot be addressed within standard remediation timelines. It provides a structured workflow for requesting exceptions, documenting compensating controls, and obtaining necessary approvals for risk acceptance. This skill is particularly useful for organizations that need to maintain compliance with frameworks such as PCI DSS, SOC 2, or NIST CSF, ensuring that accepted risks are documented and monitored effectively.
This system allows users to categorize exceptions based on the nature of the vulnerability, such as remediation delays, lack of fixes, or business-critical situations. Each category has defined maximum durations and required approver levels, which helps streamline the approval process. The skill also includes an automated expiration feature for exceptions that miss their remediation timelines, maintaining oversight of risks that have been accepted.
To implement this skill, users will need a Python environment with specific libraries, a database such as PostgreSQL or SQLite, and integration with a vulnerability management platform. The skill includes an API for creating and managing exception requests, as well as a daily cron job for checking expiration statuses. This comprehensive approach ensures that organizations can efficiently track and manage vulnerabilities while adhering to their governance processes.
This skill is ideal for security teams and compliance officers looking to enhance their vulnerability management practices. By leveraging this system, teams can ensure that all exceptions are documented, reviewed, and monitored, reducing the risk of unaddressed vulnerabilities within their environments.
When to use it
Use this skill when establishing or improving a vulnerability exception management process in your organization, especially for compliance with security frameworks.
When not to use it
This skill may not be suitable for organizations that do not require formal exception tracking or those with a fully automated remediation process.
What you can build with it
Establishing Compliance Frameworks
Use this skill to set up a vulnerability exception tracking system that aligns with compliance requirements.
Managing Vulnerability Exceptions
Implement structured workflows for documenting and approving exceptions in your security processes.
Automating Risk Acceptance Tracking
Leverage the automated expiration and reporting features to maintain oversight of accepted risks.
How to install Vulnerability Exception Tracking System
View source1. Install with the skills CLI
npx skills add mukul975/anthropic-cybersecurity-skills/building-vulnerability-exception-tracking-system --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by mukul975Building Vulnerability Exception Tracking System
Overview
A vulnerability exception tracking system manages cases where vulnerabilities cannot be remediated within SLA timelines. It provides structured workflows for requesting exceptions, documenting compensating controls, obtaining risk acceptance approvals, and automatically expiring exceptions when their validity period ends. This ensures organizations maintain visibility into accepted risks while complying with frameworks like PCI DSS, SOC 2, and NIST CSF.
When to Use
- When deploying or configuring building vulnerability exception tracking system capabilities in your environment
- When establishing security controls aligned to compliance requirements
- When building or improving security architecture for this domain
- When conducting security assessments that require this implementation
Prerequisites
- Python 3.9+ with
flask,sqlalchemy,requests,jinja2 - PostgreSQL or SQLite database
- Email/Slack integration for approval notifications
- Vulnerability management platform API (DefectDojo, Qualys, Tenable)
Exception Request Workflow
Exception Categories
| Category | Description | Max Duration | Approver Level |
|---|---|---|---|
| Remediation Delay | Patch available but deployment blocked | 30 days | Team Lead + Security |
| No Fix Available | Vendor has not released a patch | 90 days | Security Director |
| Business Critical | System cannot be patched without outage | 60 days | VP Engineering + CISO |
| False Positive | Finding is not a real vulnerability | Permanent | Security Analyst |
| Compensating Control | Alternative mitigation in place | 180 days | Security Architect |
Required Fields for Exception Request
exception_schema = {
"cve_id": "CVE-2024-XXXX",
"finding_id": "unique-finding-reference",
"asset_hostname": "prod-db-01.corp.local",
"severity": "high",
"cvss_score": 8.1,
"category": "remediation_delay",
"justification": "Database upgrade required before patch can be applied",
"compensating_controls": [
"WAF rule blocking exploit pattern deployed",
"Network segmentation restricting access to trusted VLANs only",
"Enhanced monitoring via Splunk alert for exploitation indicators"
],
"requested_expiration": "2024-06-15",
"requestor_email": "dbadmin@company.com",
"approver_emails": ["security-lead@company.com", "ciso@company.com"],
"risk_rating": "medium",
}
Database Schema
CREATE TABLE vulnerability_exceptions (
id SERIAL PRIMARY KEY,
cve_id VARCHAR(20) NOT NULL,
finding_id VARCHAR(100) NOT NULL,
asset_hostname VARCHAR(255),
severity VARCHAR(20),
cvss_score DECIMAL(3,1),
category VARCHAR(50) NOT NULL,
justification TEXT NOT NULL,
compensating_controls TEXT,
status VARCHAR(20) DEFAULT 'pending',
requested_by VARCHAR(255) NOT NULL,
approved_by VARCHAR(255),
requested_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
approved_at TIMESTAMP,
expires_at TIMESTAMP NOT NULL,
expired BOOLEAN DEFAULT FALSE,
risk_rating VARCHAR(20),
review_notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE exception_audit_log (
id SERIAL PRIMARY KEY,
exception_id INTEGER REFERENCES vulnerability_exceptions(id),
action VARCHAR(50) NOT NULL,
actor VARCHAR(255) NOT NULL,
details TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_exception_status ON vulnerability_exceptions(status);
CREATE INDEX idx_exception_expires ON vulnerability_exceptions(expires_at);
CREATE INDEX idx_exception_cve ON vulnerability_exceptions(cve_id);
Implementation
Exception Request API
from flask import Flask, request, jsonify
from datetime import datetime, timezone
import json
app = Flask(__name__)
@app.route("/api/exceptions", methods=["POST"])
def create_exception():
data = request.json
required = ["cve_id", "finding_id", "category", "justification", "expires_at", "requestor_email"]
for field in required:
if field not in data:
return jsonify({"error": f"Missing required field: {field}"}), 400
# Validate expiration does not exceed category maximum
max_days = {"remediation_delay": 30, "no_fix": 90, "business_critical": 60,
"false_positive": 365, "compensating_control": 180}
# Insert into database and notify approvers
return jsonify({"status": "pending", "id": "exc-12345"})
@app.route("/api/exceptions/<exc_id>/approve", methods=["POST"])
def approve_exception(exc_id):
approver = request.json.get("approver_email")
notes = request.json.get("notes", "")
# Update status to approved, record approver and timestamp
return jsonify({"status": "approved"})
@app.route("/api/exceptions/<exc_id>/reject", methods=["POST"])
def reject_exception(exc_id):
reviewer = request.json.get("reviewer_email")
reason = request.json.get("reason")
# Update status to rejected, record reviewer and reason
return jsonify({"status": "rejected"})
Expiration Checker (Daily Cron)
# Check for expired exceptions daily
python3 scripts/process.py --check-expirations
# Generate monthly exception report
python3 scripts/process.py --report --output exception_report.json
Compensating Controls Documentation
For each exception, compensating controls must address:
- Detection: How will exploitation attempts be detected?
- Prevention: What barriers reduce exploitation likelihood?
- Response: What incident response procedures are in place?
- Monitoring: What continuous monitoring ensures controls remain effective?
References
Frequently asked questions about Vulnerability Exception Tracking System
Similar skills
Data Breach Blast Radius Analyzer
Assess potential breach impacts before they occur.
Verify Agent Action
Ensure safe execution of AI agent actions with thorough reviews.
Agent Supply Chain Integrity
Ensure the integrity of AI agent plugins and tools.
Agent OWASP ASI Compliance Check
Ensure your AI agents meet OWASP ASI security standards.
Securing S3 Buckets
Enhance your S3 bucket security with AWS best practices.
AWS Account Enumeration with ScoutSuite
Assess AWS security posture with comprehensive audits.
