Skip to content

Latest commit

Β 

History

136 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CVElk - Vulnerability Intelligence Platform

Python 3.11+ License: MIT Elasticsearch 9.5

A modern vulnerability intelligence platform that aggregates CVE data from multiple authoritative sources into Elasticsearch with a Kibana dashboard. Auto-updates every 15 minutes to keep your data fresh.

CVElk Dashboard

✨ Features

  • 387,000+ CVEs available from the CVE List V5 repository
  • Auto-Updating - Watch mode syncs every 15 minutes automatically
  • 16-Panel Kibana Dashboard with real-time vulnerability intelligence
  • 4 Data Sources - CVE List V5, NVD, EPSS, and CISA KEV
  • Simple Setup - 4 commands to get running
  • Modern Python CLI - Beautiful interface with rich output

πŸš€ Quick Start

# 1. Configure and start secure Elasticsearch and Kibana
cp docker/.env.example docker/.env
# Edit docker/.env and set strong passwords and a 32+ character encryption key.
cd docker && docker compose up -d && cd ..

# 2. Sync CVE data (the full sync can take several hours without an NVD API key)
python -m cvelk sync

# 3. Setup the dashboard
python -m cvelk setup

# 4. Open the dashboard
open http://localhost:5601/app/dashboards#/view/cvelk-main-dashboard

πŸ”„ Auto-Update Mode

Keep your CVE data fresh with automatic updates:

# Start watching for updates (every 15 minutes)
cvelk watch

# Custom interval (every 5 minutes)
cvelk watch --interval 5

# Include NVD enrichment (slower but more complete)
cvelk watch --no-skip-nvd

The watch mode runs continuously. With NVD enrichment skipped, it uses incremental CVE List V5 synchronization after the first successful run. A full NVD crawl is rate-limited unless NVD_API_KEY is configured.

πŸ“Š Data Sources

CVElk aggregates vulnerability data from four authoritative sources:

Source Description Records Update Frequency
CVE List V5 Official CVE Project repository - primary source for CVE records ~387,000 CVEs Every 7 minutes
NVD NIST National Vulnerability Database - CVSS scores, CWEs, references ~320,000 CVEs Real-time API
EPSS Exploit Prediction Scoring System - probability of exploitation ~369,000 scores Daily
CISA KEV Known Exploited Vulnerabilities - actively exploited CVEs ~1,700 CVEs As needed

Note: The CVE List V5 is the authoritative source maintained by the CVE Project and updates every 7 minutes. CVElk's watch command syncs every 15 minutes by default to capture all updates.

Data Enrichment

Each CVE record is enriched with:

  • CVSS Scores - Base scores from CVSS v2.0, v3.0, v3.1, and v4.0
  • Severity Levels - Critical, High, Medium, Low based on CVSS
  • CWE Mappings - Common Weakness Enumeration classifications
  • EPSS Score - Probability of exploitation in the next 30 days
  • KEV Status - Whether the CVE is in CISA's Known Exploited Vulnerabilities catalog
  • KEV Details - Date added, ransomware usage, required action deadline
  • Attack Vectors - Network, Adjacent, Local, Physical
  • Vulnerability Status - Published, Modified, Analyzed, Rejected

πŸ“ˆ Dashboard Panels

The CVElk dashboard provides comprehensive vulnerability intelligence:

Panel Description
Total CVEs Total count of indexed vulnerabilities
Critical CVEs with CVSS score β‰₯ 9.0
High CVEs with CVSS score 7.0-8.9
Medium CVEs with CVSS score 4.0-6.9
In CISA KEV Known exploited vulnerabilities
High EPSS (>75) CVEs with >75% exploitation probability
CVEs Over Time Stacked bar chart by severity over time
Severity Distribution Donut chart breakdown
Top Weakness Types (CWE) Most common vulnerability categories
Top CNA Publishers Most active CVE Numbering Authorities
CVSS Version Distribution Breakdown of v2.0/v3.0/v3.1/v4.0
Attack Vector Network vs Local vs Adjacent vs Physical
EPSS Score Distribution Histogram of exploitation probabilities
KEV Cumulative Growth Area chart of KEV additions over time
CVSS Score Distribution Histogram of base scores
Vulnerability Status Published, Modified, Analyzed breakdown

πŸ“– CLI Commands

# Full sync from all sources (recommended for initial setup)
cvelk sync

# Watch mode - auto-update every 15 minutes
cvelk watch

# Watch with custom interval
cvelk watch --interval 5      # Every 5 minutes
cvelk watch --interval 30     # Every 30 minutes

# Sync specific years only
cvelk sync --years 2024 --years 2023

# Process only CVE files changed since the last successful V5 sync
cvelk sync-v5 --incremental

# Skip NVD enrichment (much faster)
cvelk sync --skip-nvd

# Skip EPSS or KEV enrichment
cvelk sync --skip-epss --skip-kev

# Set up Kibana dashboard
cvelk setup

# Show statistics
cvelk stats

# Search for CVEs
cvelk search "log4j"
cvelk search CVE-2021-44228

# Show configuration
cvelk config

βš™οΈ Configuration

Configure via environment variables or .env file. For the secure Docker deployment, copy docker/.env.example to docker/.env and set the required passwords and ENCRYPTION_KEY. The development Compose file does not require credentials and is intended for local testing only.

Variable Description Default
ELASTICSEARCH_HOST Elasticsearch URL http://localhost:9200
KIBANA_HOST Kibana URL http://localhost:5601
NVD_API_KEY NVD API key (higher NVD rate limit) -
LOG_LEVEL Logging level INFO

NVD API Key (Recommended)

Get a free API key for substantially faster NVD fetching:

  1. Visit NVD API Key Request
  2. Set NVD_API_KEY=your-key in your environment

Without key: 5 requests/30 seconds | With key: 50 requests/30 seconds

EPSS values stored in Elasticsearch use percentages from 0 to 100. For example, 75 means a 75% exploitation probability.

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Data Sources                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  CVE List V5    β”‚    NVD API      β”‚    EPSS       β”‚  CISA KEV   β”‚
β”‚   (Primary)     β”‚  (Enrichment)   β”‚   (Scores)    β”‚  (Exploited)β”‚
β”‚  ~387K CVEs     β”‚  ~387K CVEs     β”‚  ~369K scores β”‚  ~1.7K CVEs β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
         β”‚                 β”‚                β”‚              β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   β”‚
                            β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
                            β”‚   CVElk     β”‚
                            β”‚  (Python)   β”‚
                            β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                                   β”‚
                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                      β”‚     Elasticsearch       β”‚
                      β”‚        9.5.3           β”‚
                      β”‚    CVE documents    β”‚
                      β”‚       varies by sync          β”‚
                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   β”‚
                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                      β”‚        Kibana           β”‚
                      β”‚        9.5.3           β”‚
                      β”‚    16-Panel Dashboard   β”‚
                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ§ͺ Development

# Clone and install
git clone https://github.com/jgamblin/CVElk.git
cd CVElk
pip install -e ".[dev]"

# Development commands
make lint        # Run linter
make test        # Run tests
make format      # Format code
make type-check  # Type checking

πŸ“œ License

MIT License - see LICENSE for details.

πŸ‘€ Author

Jerry Gamblin - @jgamblin

πŸ™ Acknowledgments

About

Autoconfigured ELK Stack That Contains All EPSS and NVD CVE Data

Topics

Resources

Contributing

Stars

65 stars

Watchers

4 watching

Forks

Used by

Contributors

Languages