Finding the dependency risk that a vulnerability count kept hiding
A 4,100-package dependency tree produced 900 CVE alerts. Reachability analysis showed 23 were exploitable, and one was in a build tool nobody had inventoried.
- Customer
- Industrial equipment manufacturer
- Industry
- Manufacturing
- Published
- January 22, 2026
At a glance
Customer profile
- Industry
- Industrial equipment manufacturing
- Company size
- 6,500 employees
- Environment
- On-prem CI, Java and Go services
- Engagement
- Continuous, pipeline-integrated
Challenge
What was not working
The software supply chain programme was measured by how many known vulnerabilities the dependency scanner reported, which meant it was measured by a number nobody could move and nobody trusted.
900 open CVEs with no way to prioritise
Most were in transitive dependencies on code paths the application never executed. Upgrading them all would have taken a quarter and changed nothing about the actual exposure.
The build system was outside the inventory
Scanning covered application dependencies. The plugins, runners and build tooling that could inject code into every artefact were not scanned by anything.
Vendor firmware entered without review
Third-party components shipped with firmware that reached the same network as the build system, with no process to assess it before it arrived on the floor.
The metric rewarded the wrong work
Reducing the CVE count was easiest to do by upgrading trivial dependencies. The genuinely exploitable issues were harder and did not move the number faster.
Solution
What AIPTx did about it
The programme was re-pointed from counting known vulnerabilities to proving which ones were reachable, and from scanning applications to scanning everything that touches the artefact.
- 1
Reachability analysis over the dependency graph
900 → 23For each CVE, static analysis determined whether the vulnerable function is reachable from an application entry point. Unreachable findings are recorded and suppressed with a reason rather than being silently dropped.
- 2
Build pipeline brought into scope
Critical foundCI runners, plugins and build containers were inventoried and tested as production systems. A plugin with a remote code execution flaw and write access to every artefact had been in place for nineteen months.
- 3
SAST across Java and Go services
Per commitNinety-plus rules ran against first-party code alongside the dependency work, on the argument that the code the team writes deserves at least the scrutiny given to the code it imports.
- 4
Artefact provenance and signing
Every buildBuild outputs are signed and their provenance recorded, so a substituted artefact fails verification at deploy rather than being detected by inspection afterwards.
- 5
Vendor component intake assessment
Per intakeNew third-party components get a standard assessment before they reach the floor network: exposed services, default credentials, update mechanism and network requirements.
Results
What changed
First two quarters of the re-pointed programme, compared against the prior dependency-scanning baseline.
- 900 → 23
- Exploitable dependency findingsReachability analysis, with suppressions recorded
- 1
- Critical in the build systemRCE in a CI plugin with write access to every artefact
- 19 months
- How long it had been thereNever scanned, because build tooling was out of scope
- 97%
- Less remediation workMeasured in packages requiring upgrade
- 100%
- Release artefacts signed and verifiedProvenance enforced at deploy, from the day the gate went live
- 8 days
- Median fix time on reachable CVEsDown from an unbounded backlog
Programme metric
BeforeOpen CVE count
AfterReachable, exploitable findings
Build system
BeforeOut of scope
AfterScanned as a production system
Upgrade workload
Before~900 packages
After23 packages, prioritised
Artefact integrity
BeforeUnverified
AfterSigned, provenance recorded, verified at deploy
Key takeaways
The part that transfers
Every environment differs. These are the conclusions that hold outside this one.
A CVE count is a measure of your dependency tree, not your risk
Ninety-seven percent of the backlog described code that never executed. The metric was moving effort away from the twenty-three findings that could actually be exploited.
The build system is production
Anything with write access to every artefact you ship is a higher-value target than most of what you ship. It sat outside the scanning scope for nineteen months for no better reason than convention.
Record suppressions, do not hide them
Unreachable findings are suppressed with a stated reason and re-evaluated when the code changes. A silent drop is indistinguishable from a missed finding at audit time.
Provenance turns a detection problem into a verification one
Signing artefacts and checking them at deploy replaced a question that required investigation with one answered by a boolean.
Related
Other programmes, other starting points
How a financial services platform went from two pentests a year to one on every release
Six-to-eight week manual assessments at $50,000 each were gating releases. Continuous AI pentesting cut testing time 85% and moved security left of the deploy.
ReadHealthcareHIPAA-ready security testing for a patient platform that cannot go offline
A 24/7 clinical platform needed continuous testing without touching patient data or availability. Non-destructive assessments found 200+ issues with zero scan-induced downtime.
ReadRetail & E-CommerceCutting 2,800 weekly alerts to 80 on a platform doing millions of transactions a day
Scanner noise had trained the team to ignore alerts. Reporting only what had been exploited cut 2,800 findings a week to roughly 80, and caught a checkout race condition worth an estimated $2M in prevented loss.
ReadSee Your Attack Surface in Real-Time
Run a comprehensive VAPT assessment powered by advanced security tools. Get actionable findings in hours, not weeks. No credit card required.