VulnDB

What is this?

VulnDB surfaces open-source components that are currently the most active in terms of known security vulnerabilities, across three major package ecosystems: Maven (Java), PyPI (Python), and npm (JavaScript). The goal is to help engineering teams make informed adoption decisions β€” not to discourage use of open source, but to highlight components that warrant closer scrutiny or an upgrade before use.

Data is refreshed automatically every Monday at 06:00 UTC and deployed to this site within minutes of the pipeline completing.

Ecosystems

DashboardEcosystemPackage formatExample
β˜• MavenJava / JVMgroupId:artifactIdorg.apache.logging.log4j:log4j-core
🐍 PyPIPythonpackage namerequests, django
πŸ“¦ npmJavaScript / Node.jspackage namelodash, express

Data Source

All vulnerability data is sourced from the Open Source Vulnerabilities (OSV) database, maintained by Google. OSV aggregates vulnerability data from multiple authoritative sources including:

The pipeline downloads a complete bulk export per ecosystem β€” a single ZIP file containing all known CVEs for that ecosystem. No API key is required.

EcosystemOSV bulk URL
Mavenosv-vulnerabilities.storage.googleapis.com/Maven/all.zip
PyPIosv-vulnerabilities.storage.googleapis.com/PyPI/all.zip
npmosv-vulnerabilities.storage.googleapis.com/npm/all.zip

How the Pipeline Works

The same six-stage process runs for each ecosystem in sequence:

  1. Download β€” The OSV bulk ZIP for the ecosystem is downloaded into memory.
  2. Parse β€” Each JSON record is parsed to extract the CVE ID, CVSS score, severity, published date, affected versions, and fixed version.
  3. Score β€” CVSS scores are extracted from three sources in priority order: database_specific.cvss_score, the CVSS vector string (parsed using the cvss library), or the severity label as a fallback.
  4. Aggregate β€” Records are grouped by package identity. For Maven this is groupId:artifactId; for PyPI and npm it is the flat package name.
  5. Generate β€” Two CSVs and a metadata JSON are written to /tmp/{ecosystem}/.
  6. Upload β€” All outputs are uploaded to S3 under an ecosystem-specific prefix (maven/, pypi/, npm/). A single CloudFront cache invalidation is issued after all ecosystems complete.

The pipeline runs as an AWS Lambda function (container image, 3 GB RAM, 15-minute timeout) triggered by an EventBridge schedule. The Lambda image is built and deployed automatically via GitHub Actions whenever the pipeline code changes.

Risk Score

Raw CVE count is a poor adoption signal because it heavily favours old, widely-used components that have simply accumulated history. A component with 300 CVEs published over 15 years is very different from one with 20 CVEs published in the last 12 months.

The Risk Score is designed to capture current risk:

Risk Score = (Critical Γ— 4) + (High Γ— 2) + (Medium Γ— 1)
…counting only CVEs published in the last 24 months
SeverityCVSS RangeWeightRationale
CRITICAL9.0 – 10.04Remote code execution, authentication bypass β€” immediate action required
HIGH 7.0 – 8.92Significant impact, exploitable with moderate effort
MEDIUM 4.0 – 6.91Limited impact or requires specific conditions to exploit
LOW 0.1 – 3.90Minimal practical impact

A component scoring 0 has had no medium-or-above CVEs in the last two years β€” regardless of its historical total. A high score indicates active, severe vulnerability activity worth investigating before adoption.

Trend

The Trend column compares the CVE count in the most recent 12 months against the prior 12 months:

Min Safe Version & Unfixed CVEs

OSV records include a fixed version for each CVE where one has been published by the maintainer. The Min Safe Version shown in the summary is the highest fixed version referenced across all CVEs for that package β€” upgrading to this version or above addresses the maximum number of known vulnerabilities.

Unfixed CVEs counts CVEs for which OSV records no fixed version. This could mean:

Important limitation: Fixed version data in OSV is only as complete as what maintainers and reporters have submitted. A blank "Fixed In" field does not definitively mean no fix exists β€” always check the upstream project and NVD directly for the latest status.

Affected Versions

The Affected Versions count in the summary is the number of distinct version strings that appear in at least one CVE's affected list for that package. It is deduplicated across all CVEs β€” so a version affected by five different CVEs is counted once.

Limitations

Infrastructure

ComponentTechnologyPurpose
PipelinePython 3.12 Β· pandas Β· boto3Download, parse, score, and generate outputs for each ecosystem
ComputeAWS Lambda (container, 3 GB)Runs the pipeline on demand and on schedule
Container RegistryAmazon ECRStores the pipeline Docker image
ScheduleAmazon EventBridge SchedulerTriggers Lambda every Monday 06:00 UTC
StorageAmazon S3Hosts CSV outputs, metadata, and this website (under maven/, pypi/, npm/ prefixes)
CDNAmazon CloudFrontHTTPS delivery and edge caching
CI/CDGitHub ActionsBuilds and deploys Lambda image on code push; deploys HTML on content change