Safeguard
Supply Chain•

A shared library has a CVE. How do I find every affected service?

Find every service using a vulnerable shared library: query SBOMs and lockfiles, check transitive paths, confirm deployed versions, and rank by exposure.

Safeguard Security Team
3 min read

Search the dependency data for every service, not the source code. Query lockfiles or SBOMs for the package name, record the resolved version and whether it is direct or transitive, then confirm which of those versions are actually deployed. The result is an affected list you can rank by exposure and send to owners.

Why grep is not enough

A text search for the library name finds direct dependencies in manifests. It misses transitive ones, where another package pulls the library in, and it misses services whose lockfile pins a different version than the manifest range suggests. It also finds repos that never ship.

Step by step

  1. Define the question precisely: package name, ecosystem, and the affected version range from the advisory.
  2. Query per service dependency data, such as lockfiles or SBOMs, for that package.
  3. Record, for each hit, the resolved version, the path that brought it in, and the manifest or file.
  4. Compare the resolved version against the affected range. Drop the services already on a fixed version.
  5. Check the deployed artifact. A repo on a fixed version means nothing if production still runs last month's image.
  6. Rank what is left by exposure, lifecycle and data sensitivity.
  7. Send each owner a short list: service, version, path, fixed version.

A worked table shape

ServiceResolved versionPathDeployed?Exposure
checkout-web2.3.1directyesinternet
report-worker2.3.1via formatter-libyesinternal
old-admin2.1.0directno, retirednone

Names here are invented to show the shape. The point is that each row says how the library arrived, so the fix path is clear. A direct dependency needs a bump. A transitive one needs the parent bumped, or an override if your package manager supports it.

Reachability changes the order, not the list

Every affected service stays on the list. Reachability analysis helps decide which one to fix first, by showing whether your code actually calls the vulnerable function. A service that imports the package but never reaches the affected code is lower urgency, not zero.

Keep the receipt

Save the query and its date. When someone asks "were we exposed on the 12th", you want an answer from data, not memory. If you generate SBOMs on every build, you get this history for free.

Try it yourself

Click through it at your own pace, or open it full screen. Watch how a component links back to every project that includes it.

Quick check

Is the lockfile or the manifest the better source?

The lockfile, because it holds resolved versions. A manifest holds ranges.

What if a service has no lockfile?

Treat it as a gap to fix. Until then, scan the built image or artifact instead.

Safeguard's SBOM and dependency scanning and reachability analysis are built for this question, and you can run a free scan on one repository.

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.