Skip to content

An open-source tool for scoring and auditing CVE Numbering Authorities (CNAs) based on the quality, timeliness, and completeness of their vulnerability disclosures.

Notifications You must be signed in to change notification settings

RogoLabs/CNAScoreCard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,265 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CNA Scorecard Logo

CNA Scorecard

Measuring CVE Data Quality Across the Vulnerability Ecosystem

🌐 Live Site β€’ πŸ† Leaderboard β€’ πŸ“– Methodology β€’ πŸ… Get Your Badge

Pipeline Status MIT License Python 3.8+ Data Freshness


🎯 What is CNA Scorecard?

CNA Scorecard is an automated system that measures how completely CVE Numbering Authorities (CNAs) populate vulnerability records. By analyzing the most recent 6 months of CVE data, we provide transparent, data-driven insights that help:

  • Security Teams β†’ Understand which CNAs provide the most actionable vulnerability data
  • CNAs β†’ Identify areas for improvement in their disclosure practices
  • Researchers β†’ Track ecosystem-wide trends in vulnerability data quality
  • Organizations β†’ Make informed decisions about vulnerability prioritization

πŸ’‘ Why 6 months? We focus on recent data to reflect current CNA practices, not historical baggage. This gives CNAs credit for improvements and provides users with relevant, actionable insights.


✨ Key Features

Feature Description
πŸ† CNA Rankings Live leaderboard of 300+ CNAs ranked by data completeness
πŸ“Š 5-Category Scoring Comprehensive scoring across foundational, root cause, severity, software ID, and patch info
πŸ“ˆ Trend Analysis Track how CNA performance evolves over time with rolling 7-day charts
πŸ” Individual Profiles Deep-dive into any CNA's recent CVEs with per-record scoring
πŸ“± Mobile-First Design Fully responsive interface optimized for all devices
πŸ… Embeddable Badges SVG badges CNAs can display on their sites (auto-updated every 6h)
πŸ“€ Data Export Download rankings and CVE data in CSV or JSON format
β™Ώ Accessible WCAG-compliant with skip links, ARIA labels, and keyboard navigation
⚑ Always Fresh Automated pipeline updates data every 6 hours via GitHub Actions

πŸ“Š Scoring Methodology

Each CVE record is scored on a 100-point scale across five categories:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  FOUNDATIONAL COMPLETENESS (50 pts)                             β”‚
β”‚  β”œβ”€β”€ Description quality and detail                             β”‚
β”‚  β”œβ”€β”€ Affected products clearly identified                       β”‚
β”‚  └── Reference URLs provided                                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  ROOT CAUSE ANALYSIS (15 pts)                                   β”‚
β”‚  └── CWE (Common Weakness Enumeration) identifier               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  SEVERITY & IMPACT (15 pts)                                     β”‚
β”‚  └── CVSS score with vector string                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  SOFTWARE IDENTIFICATION (10 pts)                               β”‚
β”‚  └── CPE identifiers (supports CVE 5.1 cpeApplicability)        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  PATCH INFORMATION (10 pts)                                     β”‚
β”‚  └── References tagged as patches/fixes                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Grade Thresholds:

  • πŸ₯‡ A+ (97-100%) - Exceptional data quality
  • πŸ₯ˆ A (90-96%) - Excellent completeness
  • πŸ₯‰ B (80-89%) - Good, room for improvement
  • C (70-79%) - Adequate but missing key fields
  • D (60-69%) - Below expectations
  • F (<60%) - Significant data gaps

πŸ“– Full methodology details: cnascorecard.org/scoring.html


πŸš€ Quick Start

View the Live Scorecard

Visit cnascorecard.org to explore CNA rankings, trends, and individual profiles.

Run Locally

# Clone the repository
git clone https://github.com/RogoLabs/CNAScoreCard.git
cd CNAScoreCard

# Install Python dependencies
pip install -r requirements.txt

# Run the data pipeline (analyzes last 6 months of CVE data)
python cnascorecard_pipeline/pipeline.py

# Serve the web interface
cd web && python -m http.server 8000
# Open http://localhost:8000 in your browser

Run with Custom Date Range

python cnascorecard_pipeline/pipeline.py \
  --start-date 2024-01-01 \
  --end-date 2024-06-30 \
  --output-dir ./custom-output

πŸ… CNA Badges

Display your CNA Scorecard rating on your website, README, or security advisories:

Example Rank Badge Example Score Badge

Get Your Badge

  1. Visit the Badge Generator
  2. Search for your CNA
  3. Copy the Markdown or HTML code

Markdown Example:

[![CNA Scorecard](https://cnascorecard.org/badges/YourCNA-rank.svg)](https://cnascorecard.org/cna/cna-detail.html?shortName=YourCNA)

HTML Example:

<a href="https://cnascorecard.org/cna/cna-detail.html?shortName=YourCNA">
  <img src="https://cnascorecard.org/badges/YourCNA-combined.svg" alt="CNA Scorecard">
</a>

Badges are color-coded by score and auto-update every 6 hours.


πŸ—οΈ Architecture

CNAScoreCard/
β”œβ”€β”€ cnascorecard_pipeline/     # Python data pipeline
β”‚   β”œβ”€β”€ pipeline.py            # Main orchestrator
β”‚   β”œβ”€β”€ ingest.py              # CVE data loading & filtering
β”‚   β”œβ”€β”€ scoring.py             # 5-category scoring engine
β”‚   β”œβ”€β”€ aggregation.py         # CNA statistics & rankings
β”‚   β”œβ”€β”€ completeness.py        # Field utilization analysis
β”‚   β”œβ”€β”€ trends.py              # Historical trend calculations
β”‚   └── config.py              # Configuration & rules
β”‚
β”œβ”€β”€ web/                       # Static web frontend
β”‚   β”œβ”€β”€ index.html             # Homepage dashboard
β”‚   β”œβ”€β”€ cna/                   # CNA leaderboard & profiles
β”‚   β”œβ”€β”€ completeness/          # Field completeness analysis
β”‚   β”œβ”€β”€ trends.html            # Performance trend charts
β”‚   β”œβ”€β”€ scoring.html           # Methodology documentation
β”‚   β”œβ”€β”€ badges.html            # Badge generator
β”‚   └── data/                  # JSON data files (auto-generated)
β”‚
β”œβ”€β”€ cve_data/                  # CVE source data (gitignored)
└── .github/workflows/         # GitHub Actions automation

Data Flow

CVEProject/cvelistV5 β†’ Ingest β†’ Score β†’ Aggregate β†’ JSON β†’ Web Frontend
        ↑                                              ↓
        └──────── GitHub Actions (every 6 hours) β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Data Files

The pipeline generates structured JSON files in web/data/:

File Description
cna_combined.json Complete CNA data with scores and metadata
cna_summary.json Lightweight rankings for the leaderboard
cna_list.json Official CNA registry information
field_utilization.json CVE field usage statistics
performance_trends.json Daily scoring trends
top_improvers.json CNAs with biggest improvements
completeness_summary.json Analysis period metadata
cna/{shortName}.json Individual CNA detailed profiles

πŸ“– Full schema documentation: web/data/README.md


🀝 Contributing

We welcome contributions from the cybersecurity community!

Ways to Contribute

  • πŸ› Report bugs via GitHub Issues
  • πŸ’‘ Suggest features or improvements
  • πŸ“ Improve documentation
  • πŸ”§ Submit pull requests

Development Setup

# Fork and clone
git clone https://github.com/YOUR-USERNAME/CNAScoreCard.git
cd CNAScoreCard

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # or `venv\Scripts\activate` on Windows

# Install dependencies
pip install -r requirements.txt

# Run tests
cd cnascorecard_pipeline
pytest

# Run the pipeline
python pipeline.py

Code Style

  • Python: Follow PEP 8, use type hints
  • JavaScript: ES6+, no external frameworks
  • CSS: Use CSS custom properties from theme.css

πŸ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments


Made with ❀️ for the cybersecurity community

Visit CNA Scorecard β€’ Report an Issue β€’ Discussions

About

An open-source tool for scoring and auditing CVE Numbering Authorities (CNAs) based on the quality, timeliness, and completeness of their vulnerability disclosures.

Topics

Resources

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •