Safeguard
Supply Chain•

How do you find every place a compromised package version is used?

Search lockfiles, built images, SBOMs, caches and registry proxy logs for the exact name and version. One source is never enough. Here is where to look.

Safeguard Security Team
3 min read

To find every place a compromised package version is used, search five places for the exact name and version: lockfiles in source control, SBOMs for released builds, container images in your registry, CI and package proxy caches, and developer machines. Lockfiles alone miss what was already built and shipped.

Know what you are searching for

Get the package name, the affected version list and the publish window from the registry advisory or maintainer notice. If the advisory gives a range, list the versions explicitly. A search for the name alone returns safe versions and creates noise.

Where to look

PlaceWhat it tells youHow to search
LockfilesWhat new builds would installSearch every repo and branch for the name and version
SBOMsWhat a released build containedQuery stored SBOMs by component and version
Container imagesWhat is running or deployableScan images, or search their SBOMs
Proxy and CI cachesWhat was fetched during the windowCheck proxy download logs and cache contents
Developer machinesWhat was installed locallyCheck global installs and local node_modules

Steps

  1. Write down the exact versions and the time the bad release was published and removed.
  2. Search all branches, not only the default branch. Old release branches often hold old lockfiles.
  3. Search transitive entries. A lockfile lists indirect dependencies, and that is where most hits hide.
  4. Query stored SBOMs for released artifacts, since a lockfile on main today may differ from what shipped last month.
  5. List images by digest and check each. A tag can point at different content over time, which is why digests matter. The Docker CLI can show the manifest and digests for an image without pulling it.
  6. Check the package proxy or mirror log for downloads of the bad version during the window. A hit means someone installed it even if no lockfile mentions it.
  7. Record each hit with owner, environment and whether it was deployed.

Common gaps

Monorepos hide extra lockfiles in sub folders. Projects with no committed lockfile resolve versions at install time, so a build during the window may have picked the bad release with no trace in source control. Build logs from that period are then your evidence.

For more on inventory based response, see finding affected products fast with SBOMs.

Try it yourself

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

Search the inventory for a package and see which projects carry it, direct and indirect.

Quick check

Is a lockfile search enough?

No. It shows what future builds install, not what past builds shipped. Add SBOMs, images and proxy logs.

What if we have no lockfile?

Use build logs and proxy download records for the window, and treat any build in that period as possibly affected until shown otherwise.

Safeguard's SBOM and dependency scanning can list which projects use a component and version. A free scan is available at gold.safeguard.sh/scan.

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.