A critical CVE lands the day before release
Ship it and you carry the risk. Hold it and you carry the delay. The information that would settle which is correct exists, and gathering it takes longer than the decision window allows.
What actually happens
The severity score on a CVE describes the vulnerability. It says nothing about whether your code can actually reach it, and that is the only question that matters at this moment.
A CVE is published against a library that is a transitive dependency of the release candidate. The score is high. The release is tomorrow.
The security team position is that a critical vulnerability in the candidate is a blocker. The delivery team position is that the release has been through three weeks of testing and a hold has its own costs. Both are correct in general and only one of them is correct here.
What settles it is reachability: whether the vulnerable function is actually called by any path in your application, and whether any of those paths are reachable from untrusted input. That is answerable, and answering it by hand means tracing call paths through a dependency tree under time pressure.
So the decision usually gets made on the score. A high score means hold, which is the safe default and is frequently wrong, because a large share of published vulnerabilities are in code paths a given application never executes.
The cost of always holding on score is not zero. It trains delivery teams to see security gates as arbitrary, and it consumes the credibility the security team needs for the vulnerabilities that genuinely are reachable.
A CVSS score tells you how bad the vulnerability is for someone. Reachability tells you whether it is bad for you, and only one of those is in the report.
The same evening, two ways
The window here is fixed by the release schedule. The comparison is what evidence the gate decision is made on inside it.
Illustrative, not measured. The times below model a scenario built from the patterns we see in production estates. They are not timings recorded at a named customer. The point is the shape of the clock, not the totals: check it against your own last ten incidents.
Today, decided on the score
- 17:40CVE published against a transitive dependency in the release candidate. High score.
- 17:40 ↓ 19:15WaitingSecurity and delivery convene. Positions stated. No reachability evidence available.
- 19:15WaitingManual attempt to trace whether the vulnerable function is called. Dependency tree is deep.
- 21:30Analysis incomplete. Decision made on the score. Release held.
- Next dayWaitingRelease rescheduled. Downstream commitments moved.
- Week laterWaitingAnalysis completed. The vulnerable path was never reachable from this application.
Release held · on a vulnerability that could not be reached
With reachability computed
- 17:40CVE published. Sentinel matches it against the release candidate dependency tree immediately.
- 17:43Vulnerable function identified. Call paths from application code traced through the dependency graph.
- 17:48Reachability determined: whether any path calls it, and whether any such path is reachable from untrusted input.
- 17:50Result presented with the evidence: the call paths found, or the demonstration that none exist.
- 17:52Where reachable, mitigations enumerated: patched version availability, configuration mitigation, or scope restriction.
- 18:05Release manager and security owner make the gate decision jointly, on evidence, with the reasoning recorded.
~25 minutes to an evidence-based gate decision
The saving is not the twenty-five minutes. It is the releases you do not hold unnecessarily, and the credibility that preserves for the times you do hold one.
That credibility is a real operational asset and it is spent every time a gate blocks a release on a vulnerability that turns out to be unreachable. Delivery teams remember those, and the next genuine block is argued rather than accepted.
The mechanism is call path analysis rather than dependency version matching. Knowing that you include a vulnerable version is the easy half and it is what most tooling reports. Knowing whether your code can reach the vulnerable function, and whether untrusted input can reach that path, is the half that decides the question.
The honest limitation, and it is important: reachability analysis proves that no static call path exists. It does not account for reflection, dynamic dispatch or configuration-driven invocation, so the output is evidence for a human decision rather than a verdict. Anything claiming otherwise is overselling.
Why the number is what it is
The saving is not the twenty-five minutes. It is the releases you do not hold unnecessarily, and the credibility that preserves for the times you do hold one.
That credibility is a real operational asset and it is spent every time a gate blocks a release on a vulnerability that turns out to be unreachable. Delivery teams remember those, and the next genuine block is argued rather than accepted.
The mechanism is call path analysis rather than dependency version matching. Knowing that you include a vulnerable version is the easy half and it is what most tooling reports. Knowing whether your code can reach the vulnerable function, and whether untrusted input can reach that path, is the half that decides the question.
The honest limitation, and it is important: reachability analysis proves that no static call path exists. It does not account for reflection, dynamic dispatch or configuration-driven invocation, so the output is evidence for a human decision rather than a verdict. Anything claiming otherwise is overselling.
The mechanism is call path analysis rather than dependency version matching.
Who decides to press go
Nothing on this page ships or blocks a release. The release gate is a human decision and it stays one.
Dependency matching, call path tracing, reachability analysis and mitigation enumeration all run under policy. None of them change the release.
The evidence is presented to the release manager and the security owner together. They make the gate decision jointly and the reasoning is recorded against the release.
Recording the reasoning is the part that compounds. A gate decision with its evidence attached is defensible later, which is precisely what a gate decision made on a score at 21:30 is not.
CVE published against a transitive dependency present in the release candidate. Score high. Release scheduled for the following day.
Vulnerable function identified. Call paths from application code traced through the dependency graph. Reachability from untrusted input assessed.
Evidence and mitigation options presented to the release manager and security owner. Gate decision made jointly and recorded with its reasoning.
Reachability results retained per dependency so a future CVE on the same library is assessed in minutes. Unreachable dependencies flagged as removal candidates.
This is a platform capability, not a published customer deployment for this exact scenario. The mechanism, which is cross-system correlation followed by governed MOP execution with pre-check, post-check, rollback and approval gating, is running in production today across managed estates; see governed day-2 operations across 2,000+ nodes and closed-loop network automation. The timings shown are modelled, not measured at a named customer.
If the action carries no service impact
Dependency matching, call path tracing, reachability analysis and mitigation enumeration all run under policy. None of them change the release.
If it blocks or releases
The evidence is presented to the release manager and the security owner together. They make the gate decision jointly and the reasoning is recorded against the release.
What Sentinel did, step by step
- ObserveCVE published against a transitive dependency present in the release candidate. Score high. Release scheduled for the following day.
- InvestigateVulnerable function identified. Call paths from application code traced through the dependency graph. Reachability from untrusted input assessed.
- ActEvidence and mitigation options presented to the release manager and security owner. Gate decision made jointly and recorded with its reasoning.
- OptimizeReachability results retained per dependency so a future CVE on the same library is assessed in minutes. Unreachable dependencies flagged as removal candidates.
Bring us a release you held on a CVE
We will check whether the vulnerable path was reachable from your code.