Security audit csv reporting
[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.
npx -y skills add cxcscmu/SkillLearnBench --skill security-audit-csv-reportingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Generate structured CSV security audit reports from vulnerability data with proper filtering, formatting, and field mapping.
SKILL.md
3.8 KB, as published. Nobody here has run it
Security Audit CSV Reporting
Overview
Converting vulnerability data into CSV format for audit trails, compliance reporting, and stakeholder communication.
CSV Schema
Standard security audit CSV columns:
Package,Version,CVE_ID,Severity,CVSS_Score,Fixed_Version,Title,Url
Field Definitions
| Column | Type | Description | Example |
|---|---|---|---|
| Package | String | Package/library name | lodash |
| Version | String | Installed version | 4.17.20 |
| CVE_ID | String | CVE identifier | CVE-2021-23337 |
| Severity | String | HIGH or CRITICAL | HIGH |
| CVSS_Score | Float/String | CVSS v3 score (0-10) | 7.5 or N/A |
| Fixed_Version | String | Version with fix or N/A | 4.17.21 |
| Title | String | Vulnerability title/description | Prototype Pollution |
| Url | String | Reference URL | https://nvd.nist.gov/vuln/detail/CVE-2021-23337 |
Implementation Pattern
import csv
import json
from typing import List, Dict
def generate_security_audit_csv(vulnerabilities: List[Dict], output_file: str):
"""
Generate security audit CSV from vulnerability data.
vulnerabilities: List of vulnerability dictionaries
output_file: Path to output CSV file
"""
fieldnames = ['Package', 'Version', 'CVE_ID', 'Severity',
'CVSS_Score', 'Fixed_Version', 'Title', 'Url']
with open(output_file, 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for vuln in vulnerabilities:
row = {
'Package': vuln.get('package', 'N/A'),
'Version': vuln.get('version', 'N/A'),
'CVE_ID': vuln.get('cve_id', 'N/A'),
'Severity': vuln.get('severity', 'N/A'),
'CVSS_Score': vuln.get('cvss_score', 'N/A'),
'Fixed_Version': vuln.get('fixed_version', 'N/A'),
'Title': vuln.get('title', 'N/A'),
'Url': vuln.get('url', 'N/A')
}
writer.writerow(row)
Filtering and Sorting
Filter by Severity
def filter_by_severity(vulnerabilities, severity_levels=['HIGH', 'CRITICAL']):
"""Filter vulnerabilities to only specified severity levels"""
return [v for v in vulnerabilities if v.get('severity') in severity_levels]
Sort by Severity and CVSS
def sort_vulnerabilities(vulnerabilities):
"""Sort by severity (CRITICAL first) then by CVSS score (descending)"""
severity_order = {'CRITICAL': 0, 'HIGH': 1}
def sort_key(vuln):
severity = severity_order.get(vuln.get('severity'), 2)
# Handle N/A CVSS scores
cvss = float(vuln.get('cvss_score', 0)) if vuln.get('cvss_score') != 'N/A' else 0
return (severity, -cvss)
return sorted(vulnerabilities, key=sort_key)
Data Cleaning
Sanitize CSV Fields
def sanitize_field(value):
"""Sanitize field for CSV output"""
if value is None:
return 'N/A'
if isinstance(value, list):
return '; '.join(str(v) for v in value)
return str(value).strip()
def prepare_row(vuln_data):
"""Prepare vulnerability record for CSV output"""
return {k: sanitize_field(v) for k, v in vuln_data.items()}
Usage
Use this skill when:
- Converting vulnerability scan results to audit format
- Creating compliance reports
- Sharing findings with stakeholders
- Building automated security audit pipelines
- Archiving vulnerability data for historical tracking
Related Skills
trivy-vulnerability-scanning: Source of vulnerability datacvss-score-extraction: Enriching data with CVSS scores