Nearly 32% of advisories have inaccurate info
Open Source Security · Seal Security Research ·

1 in 3 critical Java advisoriesgot the facts wrong.

We took 94 recent critical-severity Java vulnerabilities and re-checked every GitHub advisory against the actual published Maven artifacts. 30 of them - almost one in three - carried wrong information: the wrong affected versions, the wrong fixed version, or the wrong package named entirely. And the volume of advisories you're meant to trust is climbing faster than ever.

The experiment

94 critical Java vulnerabilities. We re-checked every advisory.

We pulled 94 recent critical-severity Java vulnerabilities and compared each GitHub advisory against the actual published artifacts and sources. When the data is wrong, so is the scanner - this noise might seem negligible, but besides forcing you to upgrade dependencies for no reason, it widens your exposure to supply-chain attacks.

!

Wrong affected range

The advisory's vulnerable-version range didn't match reality. Scanners then flag builds that are actually safe, or stay silent on builds that are actually exposed.

📦

Wrong package

The advisory named the wrong Maven artifact entirely - making users update the wrong thing and remaining vulnerable.

Wrong fixed version

The version listed as "fixed" didn't actually contain the patch - or pointed at the wrong release. "Just upgrade to the fixed version" leaves you exposed.

In the wild

The common cases.

Overzealous version range CVE-2025-66614 · GHSA-fpj8-gq4v-p354 ↗
Maven · org.apache.tomcat:tomcat-embed-core

The range had no lower bound, so it also matches versions outside the 9.x line. Older versions fell through the cracks despite having the information in the description of the advisory.

Advisory: < 9.0.113 · no lower bound
Actually affected: 8.5.0 – 9.0.112
Fixed: 9.0.113+
7.x · 8.0.x 8.5.0 9.0.113
From the advisory's own description
GHSA-fpj8-gq4v-p354 · advisory description ↗
"… The following versions were EOL at the time the CVE was created but are known to be affected: 8.5.0 through 8.5.100."
Maven · org.jenkins-ci.plugins:git

Due to the confusion of Jenkins plugins and Java dependencies, the advisory named the parent of the actual plugin as the vulnerable package.

org.jenkins-ci.plugins
:git ✗ the unrelated Git plugin — what the advisory named
com.coravy.hudson.plugins.github
:github
jenkinsci/github-plugin · pom.xml @ v1.46.0.1 ↗
    <parent>
        <groupId>org.jenkins-ci.plugins</groupId>     # the PARENT pom - not the artifact
        <artifactId>plugin</artifactId>
        <version>5.28</version>
    </parent>

    # the package's real coordinates
    <groupId>com.coravy.hudson.plugins.github</groupId>
    <artifactId>github</artifactId>
    <version>1.46.0.1</version>
Maven · org.pac4j:pac4j-core

The advisory marks this deserialization RCE fixed in 4.0.0 - but that version only added an opt-in allow-list while still deserializing attacker-controlled values by default. The vulnerable handler wasn't removed until 4.1.0.

What pac4j actually did about the deserialization
2016
Deserializing handler added ↗.
4.0.0 advisory's “fix”
Opt-in allow-list, off by default ↗.
4.0.3
Still vulnerable.
4.1.0 real fix
Deserializing call is still executed in version 4.0.3, was removed in 4.1.0 ↗
pac4j-core · BasicUserProfile.java · getAttribute()
  public Object getAttribute(final String name) {
-     return ProfileHelper.getInternalAttributeHandler().restore(this.attributes.get(name));   # performs deserialization
+     return this.attributes.get(name);
  }
The trend

There are more advisories than ever.

The accuracy problem is getting bigger because the pile is getting bigger. In the first half of 2026 alone, GitHub filed roughly 6,900 reviewed advisories - already nearly double all of 2025.

GitHub-reviewed security advisories per quarter

Advisories filed each quarter.

Quarterly advisory count 2026 - current surge

Source: GitHub Advisory Database.

The solution

Seal verifies the advisory before you act on it.

We don't take advisory metadata at face value. Seal re-checks the affected package, the vulnerable-version range, and the fixed version against the real artifacts - then ships a verified, tested patch. As we showed in our previous research, the standard disclosure process is already too slow for the age of agentic exploitation - and now the data itself can't be trusted as-is.

Seal is a CVE Numbering Authority (CNA). When we publish a vulnerability, we set the affected and fixed version ranges ourselves - verified against the real artifacts - so the advisory is accurate at the source, not corrected after the fact.

FAQ

Common questions

Get protected

Patch from data you can actually trust.

Seal re-verifies vulnerability advisories against the real artifacts and ships tested patches - so you're not chasing false positives or shipping versions that were never really fixed. Scan your dependencies and see what's covered.

With Seal Security
Every advisory re-checked against the real artifact. Wrong version ranges, fixed versions, and misattributed packages corrected. Verified, tested patches - no code changes required.
Seal my dependencies Read more research