Anatomy of the GitHub Advisory Database

The GitHub Advisory Database is a catalog of known security vulnerabilities and malware affecting open source packages. It organizes its content into three categories:

  • GitHub-reviewed advisories: Manually reviewed vulnerabilities mapped to packages in supported ecosystems.
  • Unreviewed advisories: Automatically ingested from the National Vulnerability Database (NVD). Despite the name, many are reviewed by GitHub analysts, but they don’t qualify as reviewed advisories because they either aren’t in a supported package ecosystem or don’t describe a valid vulnerability.
  • Malware advisories: Threats identified by the npm security team, currently exclusive to the npm ecosystem. GitHub doesn’t edit or accept community contributions for this category.

The database has grown from fewer than 400 reviewed advisories five years ago to more than 20,000 as of October 2024. That growth stems from more incoming reports, expanded ecosystem support, and campaigns to review advisories published before the database existed.

The bar graph shows the number of reviewed advisories added each year. The graph starts with 385 advisories added in 2019, shows an increase over time, and ends with 5256 advisories added in 2024.
The line graph shows the total reviewed advisories steadily increasing from 0 in 2019 to 20607 at the end of 2024.
The line graph shows the total number of advisories overtime. The graph shows a sudden jump in April 2022, when GitHub started publishing all vulnerabilities from the National Vulnerability Database feed. It then shows a gradual increase over time.
The line graph shows the total malware advisories over time, from May 2022 to December 2024. The line shows a general upward trend in malware advisories over the period, ending at 13405 advisories.

Ecosystem Distribution

Reviewed advisories are restricted to vulnerabilities in packages that come from supported registries, which are generally named after the associated programming language’s package registry.

EcosystemTotal advisoriesVulnerable packagesFirst added
pip (registry: https://pypi.org/)337810442019-04-19
Maven (registry: https://repo.maven.apache.org/maven2)51719552019-04-22
Composer (registry: https://packagist.org/)42388122019-04-26
npm (registry: https://www.npmjs.com/)365326522019-04-26
RubyGems (registry: https://rubygems.org/)8403712019-04-26
NuGet (registry: https://www.nuget.org/)6514892019-04-26
Go (registry: https://pkg.go.dev/)20118652021-04-01
Rust (registry: https://crates.io/)8575532021-05-25
Erlang (registry: https://hex.pm/)31262022-01-27
GitHub Actions (https://github.com/marketplace?type=actions/)21212022-07-29
Pub (registry: https://pub.dev/packages/registry)1092022-08-04
Swift (registry: N/A)33212023-05-10
The pie chart shows the proportion of advisories across different software ecosystems. Maven, Composer, npm, Pip, and Go are the largest ecosystems.

Maven and Composer packages account for nearly half of all advisories. npm, pip, and Go contribute much of the remainder, while the remaining ecosystems hold a much smaller share. That distribution has shifted considerably since launch—npm originally dominated the database, but broader ecosystem coverage has rebalanced the mix.

The stacked area line graph shows the percentage distribution of various ecosystems from 2019 to 2024. The graph starts with half the advisories being for NPM but over time, other ecosystems like Maven and Composer become more prominent.

Where Advisories Come From

Advisories enter the database through four main channels:

SourceAdvisoriesReviewed advisoriesSole sourceCoverage
NVD2674291829574506.84%
GitHub Repository Advisories12247531156443.37%
Community Contributions451241601092.20%
PyPA Advisories304027391490.10%
Go Vulncheck15811528796.65%
NPM Advisories1411140862999.79%
FriendsOfPHP1406139640099.29%
RustSec94384917190.03%
RubySec873861498.63%
  • NVD: The largest single source, covering all software types. GitHub publishes every NVD advisory but only reviews ones relevant to supported ecosystems.
  • GitHub Repository Advisories: The second-largest source, originating through GitHub’s repository security advisory feature. These focus exclusively on open source software, so coverage is better even though they aren’t restricted to supported ecosystems.
  • Community Contributions: Reports from users, nearly all requesting updates to existing advisories.
  • Other Specialized Sources: Ecosystem-specific feeds such as PyPA Advisories for Python and Go Vulncheck for Go. Because these only cover packages within supported ecosystems, most qualify for review.
The pie graph shows the proportion of advisories by the number of sources they have. This shows that 46% of the advisories have only one source and 85% have three or fewer.

Summing the reviewed advisories from each source yields a total larger than the actual reviewed count. That’s because multiple sources often flag the same vulnerability—over half of advisories have more than one source. Of those with just one source, the overwhelming majority come from NVD/CVE, the noisiest source, which still justifies its inclusion.

The pie graph shows the proportion of advisories that have a single source by the source they came from. The graph shows that 80% of all single sourced advisories come from the National Vulnerability Database.

Imports from all sources rose 39% in 2024, driven mainly by an increase in published CVE records.

The line graph shows the number of advisories imported over time. The graph shows an increase in imports over time.

CVE Numbering Authority Role

Beyond the Advisory Database, GitHub operates as a CVE Numbering Authority (CNA) for any repository hosted on the platform. This lets GitHub issue CVE IDs for vulnerabilities reported by maintainers and publish the records to the broader CVE database once a repository advisory goes live.

GitHub published more than 2,000 CVE records in 2024, making it the fifth-largest CNA in the CVE Program. This CNA service is open to all repositories, not just those in supported ecosystems.

The bar graph shows the number of CVE records published by the Advisory Database CNA over time. Every year shows an increase in the number published.
The pie graph shows the proportion of CVEs assigned by the Advisory Database that in a supported ecosystem. 58% are in a supported ecosystem and 42% are not.

Prioritizing with CVSS, CWE, and EPSS

The volume of reported vulnerabilities makes prioritization essential. GitHub supplements each advisory with three data points to help triage:

  • Severity Rating/CVSS: A rating from low to critical, with a corresponding CVSS score and vector.
  • CWE: Identifiers that programmatically classify the type of vulnerability.
  • EPSS: The Exploit Prediction Scoring System, devised by FIRST, which scores the likelihood a vulnerability gets exploited within 30 days.

Every advisory gets a severity rating drawn from the four levels defined in the Common Vulnerability Scoring System: Low, Medium/Moderate, High, and Critical. According to these ratings, half of all vulnerabilities—15% Critical and 35% High—warrant immediate or near-term remediation attention.

The stacked area line graph shows the severity rating ration by year of advisory publication. The graph shows that critical vulnerabilities were more common (20 - 25 percent) early on and moderates becoming more common over the years.

CVSS base scores reflect intrinsic characteristics constant over time and assume a reasonable worst-case impact across varied environments. Your own worst case might differ, though—a crash in a word processor isn’t as severe as one in a server. To filter alerts by vulnerability type, GitHub supports CWE identifiers. That allows filtering out recurring issues like regular expression denial of service (CWE-1333) or always surfacing SQL injection (CWE-89).

RankCWE IDCWE nameNumber of advisories in 2024Change in rank from 2023
1CWE-79Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’)936+0
2CWE-200Exposure of Sensitive Information to an Unauthorized Actor320+0
3CWE-22Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)259+2
4CWE-20Improper Input Validation202+0
5CWE-94Improper Control of Generation of Code (‘Code Injection’)188+2
6CWE-89Improper Neutralization of Special Elements used in an SQL Command (‘SQL Injection’)181+3
7CWE-352Cross-Site Request Forgery (CSRF)161-4
8CWE-284Improper Access Control153+4
9CWE-400Uncontrolled Resource Consumption149-3
10CWE-287Improper Authentication124+11

When that’s insufficient, EPSS can help narrow the field further. It synthesizes data from multiple sources into a probability that a given vulnerability faces exploitation attempts in the next 30 days. Focusing on vulnerabilities with an EPSS score of 10% or higher—about 7% of all entries in the Advisory DB—covers nearly all vulnerabilities likely to see active exploit traffic.

The bar graph shows the number of advisories by EPSS probability. Most of the advisories are in the Low or Very Low probability.
EPSS probabilityVulnerabilities in rangePercentage of overall vulnerabilitiesExpected vulnerabilities in range attacked within the next 30 daysPercentage of total attacked vulnerabilities
High ( >= 10%)14407.17%74185.96%
Moderate ( >= 1%, < 10%)268713.37%849.74%
Low ( >= 0.1%, < 1%)1026451.09%354.06%
Very Low ( < 0.1%)570128.37%20.23%

EPSS comes with caveats worth remembering:

  • Low-probability events still occur.
  • EPSS measures likelihood, not confirmed exploitation.
  • Scores update daily and shift as new information emerges; today’s low-probability vulnerability could become high-probability tomorrow.

How Dependabot Uses the Data

The Advisory Database powers more than just a reading list. Services like Dependabot leverage it to automate dependency security:

  • Identify vulnerabilities: Flag projects using affected package versions.
  • Suggest fixes: Recommend updated versions that resolve the vulnerability.
  • Reduce noise: Alert only when the installed version is actually impacted.
The bar graph shows the number of advisories published with a patch each year next to the number of advisories without a patch. For every year, nearly all of the advisories have a patch.

For maintainers, publishing a repository security advisory is the direct path to tap both the Advisory Database and GitHub’s CNA services, ensuring vulnerabilities reach the broader CVE community.