Annual review of CVE (Common Vulnerabilities and Exposures) data for 2025. This project downloads, processes, and visualizes CVE data from multiple authoritative sources to produce a publication-ready blog post with professional graphs.
- NVD JSON - National Vulnerability Database export from https://nvd.handsonhacking.org/nvd.json
- CVE List V5 - Official CVE records from https://github.com/CVEProject/cvelistV5
- Python 3.11+
- Dependencies listed in
requirements.txt - (Optional)
GEMINI_API_KEYorGOOGLE_API_KEYfor AI blog enrichment
# Install dependencies
pip install -r requirements.txt
# Run the full pipeline (download, process, graph, blog, enrich)
./run_all.sh
# Or run individual steps:
python 01_download_data.py # Download data (~1GB+ NVD JSON)
python 02_process_data.py # Parse into analysis-ready DataFrames
python 03_generate_graphs.py # Generate visualizations (standalone)
python 04_generate_blog.py # Generate blog.md with all graphs
python 05_enrich_blog.py # AI-enhanced blog (requires API key)
python 06_vulnogram_analysis.py # Vulnogram adoption analysis
python 07_windows_historical_analysis.py # Windows CVE historical trends2025CVEBlog/
├── 01_download_data.py # Downloads NVD JSON and clones CVE List V5
├── 02_process_data.py # Parses data into DataFrames
├── 03_generate_graphs.py # Generates visualizations (standalone)
├── 04_generate_blog.py # Generates blog.md with all graphs
├── 05_enrich_blog.py # AI-enhanced blog enrichment
├── 06_vulnogram_analysis.py # Vulnogram adoption analysis
├── 07_windows_historical_analysis.py # Windows CVE trends
├── style_config.py # Unified visualization style configuration
├── run_all.sh # Full pipeline runner
├── requirements.txt # Python dependencies
├── tests/ # Test suite
├── blog.md # Generated blog post (output)
├── data/ # Downloaded raw data (gitignored)
├── processed/ # Processed DataFrames (gitignored)
├── graphs/ # Generated visualizations
└── OldBlogs/ # Previous year blog PDFs
- CVEs by Year - Historical count of CVEs published each year
- Year-over-Year Growth - Annual growth rate percentage
- Cumulative Growth - Running total of all CVEs
- 2025 Monthly Distribution - CVEs published each month in 2025
- CVSS Score Distribution - Histogram of severity scores
- Severity Breakdown - Pie/bar chart of Critical/High/Medium/Low
- Top CWEs - Most common weakness types
- Top CNAs - Most active CVE Numbering Authorities
- Data Quality - Coverage of CVSS, CWE, CPE over time
- Top Vendors - Vendors with most CVEs
- CVSS by Year - Score comparison across years
pytest tests/ -vRunning 04_generate_blog.py (or ./run_all.sh) produces:
blog.md- A complete, publishable Markdown blog postblog_enriched.md- AI-enhanced version (if API key is set)graphs/*.png- All visualizations embedded in the blog