| name | vulnerability-csv-reporting |
| description | Generate structured CSV security audit reports from vulnerability data with proper filtering and formatting. This skill covers CSV schema design for security reports, using Python csv.DictWriter, severity-based filtering, and field mapping from JSON to tabular format. |
Vulnerability CSV Report Generation
This skill provides guidance on generating structured CSV reports from vulnerability scan data.
CSV Schema Design
| Field | Type | Description |
|---|
| Package | String | Vulnerable package name |
| Version | String | Installed version |
| CVE_ID | String | Vulnerability identifier |
| Severity | Enum | Risk level |
| CVSS_Score | Float/String | Numeric severity score |
| Fixed_Version | String | Patched version |
| Title | String | Brief description |
| Url | String | Reference link |
Python CSV Generation
import csv
import json
def generate_report(json_input, csv_output, severity_filter=['HIGH', 'CRITICAL']):
with open(json_input, 'r') as f:
data = json.load(f)
headers = ["Package", "Version", "CVE_ID", "Severity", "CVSS_Score", "Fixed_Version", "Title", "Url"]
vulnerabilities = []
if 'Results' in data:
for result in data['Results']:
for vuln in result.get('Vulnerabilities', []):
severity = vuln.get('Severity', 'UNKNOWN')
if severity in severity_filter:
vulnerabilities.append({
"Package": vuln.get('PkgName'),
"Version": vuln.get('InstalledVersion'),
"CVE_ID": vuln.get('VulnerabilityID'),
"Severity": severity,
"CVSS_Score": get_cvss_score(vuln),
"Fixed_Version": vuln.get('FixedVersion', 'N/A'),
"Title": vuln.get('Title', 'No description'),
"Url": vuln.get('PrimaryURL', '')
})
with open(csv_output, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
writer.writerows(vulnerabilities)