Skip to content

RogoLabs/CNAScoreCard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,369 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