Safeguard
Security Guides•

How does a scanner know a finding is the same as last week's?

Scanners track finding identity with fingerprints built from stable fields, then label results new, unchanged, updated or absent. See how that works.

Safeguard Security Team
3 min read

A scanner knows a finding is the same as last week's by computing a fingerprint from stable fields, such as component, advisory and location, then comparing it with the previous run. Matching fingerprints mean the same finding; a new one is labelled new, and a missing one is absent. Unstable fingerprints cause duplicate alerts.

Why identity matters

Without identity, every scan produces a fresh list. You could not say which findings are new, which you fixed, or how long one has been open. Trends, service targets and accepted risks all depend on recognising the same finding across runs.

What goes into the fingerprint

For a dependency finding, sensible ingredients are:

  • the package identifier (ecosystem and name)
  • the advisory ID, or a canonical form of it
  • the project or repository
  • the manifest or lockfile path

Notice what is left out: the version, the scan time, and any line number that shifts. If the version were in the fingerprint, upgrading from one vulnerable version to another would look like a fix plus a new finding, when really the issue is still open.

For code findings the choice is harder, because code moves. The SARIF standard addresses this directly. A result can carry partialFingerprints, each a string that contributes to the result's stable, unique identity. Property names are versioned, and the spec says that when two results are compared, the latest version available in both should be used. That lets a tool improve its fingerprint method without breaking history.

The four states relative to a baseline

SARIF defines a baselineState for each result, relative to a baseline run:

StateMeaning
newSeen now, not in the baseline
unchangedSeen in both, no significant change
updatedSeen in both, changed in a way the tool considers significant
absentSeen in the baseline, not seen now

Even if your tool does not use SARIF, these four states are a good model for a findings database. "Absent" is the closest thing to automatic closure, though it deserves verification, as covered in verifying a fix closed a finding.

What breaks identity

  1. Renames and moves. A file path changes, and the finding looks new.
  2. Aliases. The same issue arrives under a different ID from another database.
  3. Line numbers. Fingerprints that include them churn on every edit above the finding.
  4. Tool upgrades. A new matcher may identify components differently.

The symptom is a burst of "new" findings that look familiar. If that happens after a tool or process change, suspect identity first, not a sudden loss of security.

How to test it

Run the same scan twice on an unchanged project. Everything should be unchanged. Then rename a directory and scan again, and see what the tool does. Then upgrade a vulnerable package to another vulnerable version and confirm the finding stays one finding.

Where Safeguard fits

Safeguard's vulnerability management tracks findings over time alongside its dependency scanning and policies. Run the free scan twice and compare what is reported as new.

Quick check

Why not include the line number in a fingerprint?

Edits above the finding shift line numbers, so the same issue would look new after every change. Stable fields work better.

Does absent always mean fixed?

No. It can also mean the scan did not cover that path this time. Verify before closing.

Sources

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.