security-audit-csv-reporting · git:20260424.d50cf5a · 2026-04-24 · sha256 209ade5fac54ae87
security-audit-csv-reporting git:20260424.d50cf5aA
Immutable. This exact content never changes and is served at /api/v1/blob/209ade5fac54ae87.
---
name: security-audit-csv-reporting
description: Generate structured CSV security audit reports from vulnerability data with proper filtering, formatting, and field mapping.
---
# 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
```python
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
```python
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
```python
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
```python
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 data
- `cvss-score-extraction`: Enriching data with CVSS scores