Safeguard
Supply Chain•

Which services use which messaging client library? Build the inventory

When a broker client library has an advisory, you need to know which services ship it. A short method for inventory, ownership and fast triage.

Safeguard Security Team
3 min read

When a Kafka, RabbitMQ or cloud queue client library gets an advisory, the first question is which services ship it, at which version. Answer it from a dependency inventory built from lockfiles and SBOMs, not from memory. Then rank by whether the vulnerable code path is reachable in each service.

Why messaging clients are easy to lose track of

Broker clients get pulled in indirectly. A framework starter adds one, a shared internal library bundles another, and one service pins an old version because of a compatibility issue. Ten services can end up on four versions.

Step 1: collect from builds

Generate a dependency list per service at build time from the lockfile or the built image. Store it with the service name and commit. Avoid collecting from source trees alone, since the built artifact is what runs.

Step 2: record transitive dependencies

The vulnerable library is often two levels down. Include the full tree, and keep the path that explains why it is there. That path tells you what to upgrade.

Step 3: add ownership

Each service needs a named team. An advisory with no owner waits.

Step 4: query by name and range

Keep the inventory searchable by package name and version range. A good test: how long would it take to list every service using a given client below a given version? If the answer is a day, that is the number to improve.

Try it yourself

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

Click through the inventory view and note how a single package shows up across several projects with different versions.

Step 5: triage by reachability

A finding in a client library matters most where your code calls the affected function. Many advisories concern an optional feature, such as a particular authentication mode or a protocol you do not enable. Check how each service configures the client before treating every hit as urgent. The demo on reachability analysis shows the idea: open it.

Step 6: fix once, roll everywhere

If several services share the vulnerable version through an internal library, upgrade the library and release the services together. Otherwise the same finding returns next week.

What to put in the runbook

  1. Where the inventory lives and how fresh it is.
  2. The query to list affected services.
  3. Who approves an emergency rollout.
  4. How to confirm the new version is running, not just committed.

For the architectural side of this, see SBOM for microservices architecture.

Safeguard can help here in a small way. Its SBOM and dependency scanning covers the broker client libraries and service frameworks your code pulls in, and reachability analysis shows which advisories your services actually call. You can try a free scan at gold.safeguard.sh/scan.

Quick check

Is the lockfile enough?

It is a good start, but check the built image too, since that is what actually runs.

Do all advisories in a client library need an urgent fix?

No. Check whether the affected feature is enabled and reachable in each service, then prioritize.

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.