Independent comparison · no paid rankings
Home / Blog / Technical / Vulnerable dependencies: handle alerts by actual exposure

Vulnerable dependencies: handle alerts by actual exposure

A scanner reporting 200 CVEs does not tell you which ones touch your attack surface. Here is how to prioritise fixes by real exposure, not raw scores.

Hébergeurs.eu Editorial Team 4 min read

Your CI pipeline just turned red: Dependabot flags a "critical" CVE in a transitive library. The team panics, someone proposes a hotfix before close of business — then you discover the accused module is never loaded in production, lives in a build tool, and the actually installed version is not the one in the bulletin. Result: an all-nighter for theoretical risk, while an exposed XSS on the public API still waits its turn.

The problem is not missing alerts. It is missing triage: treating every CVE as urgent means prioritising none.

What an alert does not tell you

A dependency scanner compares package versions against a known-vulnerability database. It does not know your architecture, your firewalls, or whether the vulnerable code is reachable from the Internet.

Three filters separate noise from real risk:

SignalWhat it indicatesLimit
CVSS scoreTheoretical severityIgnores local exposure
Reachability (Snyk, Grype…)Call path in your codeDepends on static analysis
Network surfaceOpen port, auth, WAFYou must map this yourself

A "9.8" CVE in a devDependency does not have the same urgency as a "6.5" on your public authentication endpoint.

Map exposure before you patch

Before opening a pull request, answer four questions in this order.

1. Where does the component run? Production, staging, CI, dev laptop — each environment has its own SLA. A flaw in a test Docker image does not justify a Friday-night emergency deploy.

2. Is it reachable from outside? A server behind a VPN, with no public port and no exposed reverse proxy, sharply reduces opportunistic exploitation odds.

3. What privileges would an attacker gain? RCE as root on an isolated pod with no sensitive data access ≠ RCE on the main PostgreSQL instance.

4. Is there active exploitation (KEV, CERT bulletins)? Catalogued actively exploited vulnerabilities jump the queue, even with a middling CVSS score.

Operational prioritisation grid

A pragmatic grid for a web team on VPS or cloud hosting:

LevelCriteriaTarget timeline
P0Active exploitation + public surfaceFix or workaround < 24 h
P1RCE/LFI on exposed service, no known exploit< 7 days
P2Prod dependency, not directly exposedNext release cycle
P3Dev/test, internal toolingMonthly backlog

Compensating controls count: block an endpoint, restrict an IP range, enable a WAF rule, or temporarily remove a low-traffic feature while you ship a clean patch.

SBOM, lockfiles and continuity

Without a reliable inventory, you do not know what actually runs. Lockfiles (package-lock.json, composer.lock, poetry.lock) and pinned Docker images are your source of truth — not declarative package.json alone.

Generate an SBOM (Software Bill of Materials) on every build, store it with the deployed artefact, and rescan images already in production when new CVEs appear. That is the only honest way to answer "are we affected?" without a manual audit.

The climax: patch rate does not measure security

Here is what "100% of CVEs fixed in 48 h" dashboards hide.

Teams that triage by exposure close fewer tickets — and take less risk.

Decide and move forward without blind spots

  1. Set a P0–P3 grid and share it with product and hosting.
  2. Hook scanning into CI with blocking only on reachable prod alerts.
  3. Review workarounds weekly: a temporary WAF rule must not become permanent.
  4. Test recovery after a major dependency patch — especially on PHP, Node or Python where breaking changes are common.

To pick a host that supports your patch cycles (snapshots, mirror staging, rollback), browse our directory or compare tool.

Frequently asked questions

Should every Dependabot or Snyk alert be fixed immediately?

No. Fix what is network-exposed or runs with elevated privileges first. A critical CVE in a test dependency can wait for a planned cycle.

How do I know if a vulnerability is actually exploitable in my setup?

Cross-check the call path, exact installed version, network config and evidence of active exploitation. CVSS alone is not enough.

What if the update breaks compatibility?

Document a temporary workaround with an expiry date. An unpatched flaw without compensating controls is accepted debt.

SBOM and automated scanning — where to start?

Inventory production dependencies, hook a scanner into CI, then classify alerts by exposure before setting SLAs.


The next red alert does not ask "patch everything" — it asks where is the real exposure?

Compare European hosts

Filter by compliance, location and use case — then open the sheets to verify the real scope.

Browse the directory
Blog

Related reading

All articles →