Safeguard
Security Guides•

Does a vulnerability exception survive a dependency upgrade?

An exception is tied to one version and finding, so an upgrade should end or re-open it. What to carry over, what to retire and how to avoid stale waivers.

Safeguard Security Team
4 min read

It should not survive automatically. An exception is bound to a specific finding on a specific version. When the version changes, the old exception either closes because the issue is fixed, or must be re-evaluated because the new version may carry different findings.

What the exception was really about

An exception says: "advisory X on package Y at version Z, in service S, is accepted until date D for reason R." Change Y or Z and the sentence is no longer true. Tools that match exceptions on package name alone quietly extend old decisions to new code.

Three upgrade outcomes

OutcomeWhat should happen to the exception
Upgrade fixes the advisoryClose it as fixed, with the date and the new version
Upgrade does not fix itKeep it, but update the version in the record and re-check the evidence
Upgrade introduces new findingsDo not inherit, each new finding needs its own decision

The second case deserves care. If the exception relied on "the vulnerable function is never called", a new version may change what is called. Re-run the reachability check rather than assuming.

Matching rules to insist on

  • Match on advisory ID plus package plus version range, not name alone
  • Keep the asset or service in the key
  • Let version bumps flag the exception for review, not pass it silently
  • Never let a range like "any version" be the default

Version ranges are a classic trap. An exception for "below 2.4.0" covers 2.3.9 but should not cover 2.4.1, and your tool should know the difference.

Automatic closure

When a scan shows the advisory no longer applies, the exception should close itself and record why. This avoids a pile of zombie records, a problem described in report unused suppression comments so old exceptions do not pile up.

It should also notify the owner. A closed exception is good news and a useful data point: it shows the process leads to fixes.

Transitive dependencies

When a direct dependency upgrade pulls a different transitive version, the finding may disappear or change. Treat the transitive package as its own subject. The post on transitive dependency you cannot upgrade covers options before accepting.

Downgrades and rollbacks

If a release is rolled back to the version that had the exception, the old exception does not come back to life if it already closed. Create a new request, because the time window and the approver's context have changed.

Checklist for upgrade pull requests

  1. List exceptions that reference the changed package
  2. Mark each as fixed, still applies or needs review
  3. Re-run scans on the new lockfile
  4. Update or close records in the same pull request
  5. Note the result in the PR description

Safeguard's dependency scanning and SBOM generation give you the before and after inventory, and its autonomous remediation can open fix PRs (off by default, every category on Manual).

Try it yourself

Click through it at your own pace, or open it full screen.

Look at how components and versions are listed, since exceptions should key to exactly these.

Quick check

Should an exception follow a package to a new repository?

No. Scope includes the asset, so a new place needs its own decision.

What if the new version has the same advisory?

Keep the exception only after re-checking the evidence, and update the version in the record.

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.