Model Context Protocol & Agentic ArchitecturePlaybook3 min readUpdated September 2026

Making Dependency Vulnerability Alerts Worth Acting On

A software composition analysis scan on a real production codebase routinely returns hundreds of findings the first time it runs, and most teams respond by either patching everything at once, which breaks things and burns a sprint, or by muting the tool entirely after the first false alarm. Neither is triage, and both leave the vulnerabilities that actually matter sitting in the same pile as the ones that don't.

This works through the questions that come up the first time a team tries to take dependency scanning seriously: why the count is so high, how to tell what's urgent, and who should actually own the fix.

Vendors Covered in this Article

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Why Does Our Scanner Report Hundreds of Issues at Once?

Most of that count comes from transitive dependencies, packages your direct dependencies pull in that you never chose and rarely interact with directly, plus advisories for code paths your application never actually executes. A scanner working from a manifest file alone can't tell the difference between a vulnerable function you call in your authentication flow and the same vulnerable function sitting unused in a dependency you only use for one unrelated utility.

That's not a reason to ignore the count, but it is a reason not to treat every line item as equally urgent. The first useful step isn't patching, it's separating the list into what's actually reachable from your code versus what's present but never called.

Which of These Actually Need to Be Patched This Week?

Prioritize by three factors together, not any one alone: whether the vulnerable code path is reachable from your application, whether the vulnerability is a known exploited one actively being used in the wild rather than theoretical, and whether the affected service is internet-facing. A theoretical, unreachable vulnerability in an internal batch tool can wait for the next scheduled dependency update. A known exploited vulnerability in a package your internet-facing API actually calls needs to move this week1.

Resist patching in strict severity-score order without checking reachability first. A tool's severity score describes the vulnerability in isolation, not whether your specific usage of the dependency can trigger it, and treating the score as the only input wastes effort on issues that pose no real risk to your application.

Reachable vs. Unreachable: Why It Matters

A reachable vulnerability sits in a code path your application actually calls, directly or through a chain of function calls you can trace. An unreachable one exists in the dependency but in a function or configuration path your code never invokes, which doesn't mean it's safe to ignore forever, a future code change could make it reachable, but it does mean it's not an active risk today.

Some scanning tools can trace call graphs to determine reachability automatically; without that, a manual check of whether your code actually imports and calls the affected function is usually fast enough to do for anything flagged as high severity before deciding it's urgent.

Who Should Own Triage?

Security can set the policy, what counts as urgent, what the patch timeline should be, but the team that owns the affected service should own the actual patch and the testing that confirms it didn't break anything. A central security team patching code it doesn't otherwise touch tends to move slowly and without full context on what else depends on the current version.

The most durable setup splits the work: security owns triage criteria, alert routing, and tracking whether patches actually land within the agreed timeline; the owning engineering team owns applying the patch, running tests, and shipping it. Endpoint and exposure management tools like CrowdStrike or Tenable can help security see which findings are actually being exploited against similar systems, which sharpens the triage call without taking the fix itself away from the team that owns the code.

Stopping the Backlog From Growing Faster Than You Can Patch

A backlog that only grows means triage criteria are too loose or patch cadence is too slow. Fix the process, not just the current pile:

  • Set a fixed cadence for routine dependency updates, weekly or biweekly, so most vulnerabilities get patched as a side effect of normal maintenance rather than requiring a special triage decision at all.
  • Reserve the urgent, out-of-cycle patch path for the narrow case: reachable, known exploited, and internet-facing.
  • Track time-to-patch for the urgent category specifically, separate from the routine backlog, since mixing the two metrics hides whether the truly urgent cases are actually moving fast.
  • Review which dependencies generate the most repeated advisories over time; sometimes the real fix is replacing an unmaintained package rather than patching around it every month.

A team that patches on a steady cadence and reserves urgency for cases that are genuinely reachable and actively exploited ends up with a smaller, more trustworthy backlog than one that tries to triage every finding individually.

Executive Capability Standard

What Good Looks Like

Good dependency vulnerability handling means findings are triaged by reachability and active exploitation before anyone starts patching, not worked in raw severity-score order.

Building The Capability (5-Stage Skill Ladder)

1. Learn:Run your scanner once and manually check reachability on the ten highest-severity findings to see how many are actually callable from your code.
2. Do Manually:Set a fixed biweekly cadence for routine dependency updates so most findings get resolved as a side effect of normal maintenance.
3. Delegate:Split ownership explicitly: security owns triage criteria and tracking, the team that owns each service owns applying and testing the actual patch.
4. Automate:Add reachability analysis to your scanning pipeline if your tool supports it, so the backlog is pre-sorted by actual risk instead of raw severity score.
5. Buy:Bring in an exposure management platform like Tenable or an endpoint and threat intelligence platform like CrowdStrike if you need visibility into which of your findings are being actively exploited elsewhere, not just which ones exist.

How to Get Started

Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.

Frequently Asked Questions

Should we just patch every dependency to the latest version to be safe?

No, that trades a known, understood risk for an unknown one: a major version bump can introduce breaking changes you now have to test for under time pressure. Patch to the version that actually fixes the specific vulnerability first, and handle broader version upgrades on your normal maintenance cadence.

What does reachable mean if we don't have a tool that traces call graphs?

Check whether your code actually imports and calls the specific function the advisory names, directly or through a chain you can trace by hand. It's slower than automated reachability analysis, but it's usually fast enough for the smaller list of high-severity findings you're deciding whether to prioritize.

Who should be paged for a critical, actively exploited vulnerability?

The team that owns the affected service, not a central security team that would have to learn the codebase under pressure. Security's role is confirming the vulnerability is real, reachable, and actively exploited, then making sure the owning team treats it as the priority it is.

Sources

Where we quote a benchmark, we show its source. Other figures in this guide are estimates or general guidance, so check them against your own numbers.

  1. Security patch remediation SLAs (CISA federal mandates, used as industry norm). CISA Binding Operational Directives 19-02 and 22-01 (CISA briefing hosted at NIST CSRC), 2022.

Related Guides