2024 Dependency Management Report | Endor Labs
Endor Labs' 2024 report on open-source dependency management and vulnerability prioritization. It reports that under 9.5% of vulnerabilities are reachable at function level, and that combining reachability with EPSS cuts noise by about 98%. It also finds Python phantom dependencies (up to 60% of dependencies and 85% of vulnerabilities for some tenants), 18% of npm OSV entries lacking CVE aliases, 69% of advisories published after the fix release (median 25 days), and 47% of advisories with no code-level info. For Java, 24% of fixes need a major version bump and 95% of upgrades carry breaking changes. Written by a vendor, so the prioritization conclusions favor its product.
What it is
Endor Labs' 2024 dependency management report, built from its customer telemetry plus OSV/NCSU datasets (snapshot June 2024). Beyond the headline stats in the summary, it contains reproducible methodology and concrete gaps in public advisory data that affect how you configure SCA tooling.
How it works
Phantom dependency detection (Python). Instead of pip freeze (which inflates results on shared environments and monorepos, and loses direct/transitive distinction) or manifest-only parsing (which misses installed packages), Endor analyzes first- and third-party code in the library search path and recursively follows import statements. Dynamic installs (e.g. neural-compressor installing sigopt at runtime) are only caught if that code has already executed. Causes cited: runtime installs, manual/scripted installs, bloated container images, monorepos.
Rebundling blind spots. Binaries such as libgcc and liblzma (from XZ Utils) sit in hundreds of Python artifacts with no package metadata. In Java, uber JARs repackage vulnerable classes; one cited study found 254 vulnerable classes from 38 components repackaged into thousands of other components, sometimes with metadata stripped or namespaces changed.
Upgrade-risk method. For the 15 Java components with the most customer vulnerabilities, they took 1,265 vulnerable versions released 2017 or later, and computed the nearest non-vulnerable version (1,250 had one; the 15 without were org.bouncycastle:bcprov-jdk15on). They then diffed for removed functions/types and visibility reductions. Function removal was the dominant breaking change.
Preconditions / Affected
- npm users relying on NVD alone: 18% of npm OSV entries lack CVE aliases (Maven 1%). Overall, 828 of 13,963 OSV entries across six ecosystems have no CVE alias.
- Teams consuming only NVD feeds: for 5,978 vulns with both a GHSA and a CVE, most appear first in NVD, and in 25% of cases the GHSA lags by 10+ days. During that lag only imprecise CPE mapping is available.
- Maven BOM/parent POM advisories (e.g.
vaadin-bom,keycloak-parentfor CVE-2017-12159) may never map to the artifact that actually carries the code (keycloak-services). - Tomcat: CVE-2020-13935 is listed by OSV only for
org.apache.tomcat:tomcat, but Endor says five artifacts contain the vulnerable classes, includingtomcat-embed-coreandtomcat-embed-websocket, with PoCs showing exploitability. Spring Boot embedded users could be missed. Older coordinates (tomcat:catalina,org.apache.tomcat:catalina) are also unflagged for CVE-2023-41080. - Endor vs OSV agree on affected packages in only 72% of cases overall, and 55% for Maven.
What to do
- Confirm your SCA tool ingests OSV/GHSA, not just NVD, especially for npm.
- Check whether it resolves Python deps beyond manifests; if it uses
pip freezeon shared environments, expect inflated findings. - For ML/AI stacks, cross-reference multiple advisory sources. The tensorflow GHSA count was roughly 40 (~10%) below the OSV aggregate, e.g. GHSA-24x6-8c7m-hv3f lists only
tensorflow, while the PYSEC aliases also listtensorflow-gpu/-cpu. Endor says GitHub corrected these after being notified. - Remediation planning: upgrade by bumping the version on the nearest non-vulnerable release. For transitive Java deps, override the property in
dependencyManagementif the parent exposes one (Spring Boot does), otherwise declare a direct dependency at the fixed version. - Budget for major bumps: 84% of post-2016 vulnerable
spring-webversions need one (e.g. 4.3.x EOL requires 5.3.x or 6.x), whereaslogback-coreis mostly patch-level (1.2.9 to 1.2.13). - Concentrate effort: updating the top 15 components removes about 74% of Python findings (Java 60%, npm 45%). Note the page gives 75%/44% in one TL;DR, so treat these as approximate.
Caveats
- All figures come from Endor's own customer base and tooling; a vendor's enrichment database is the proposed fix. The "98% noise reduction" and "<9.5% reachable" are averages over its customers, not independent benchmarks.
- Function-level reachability was not available for JavaScript at publication, so the ~4% JS prioritization figure excludes it.
- Phantom dependency shares (0-60%) come from a subset of tenants. The page elsewhere says 27% of customers have a significant footprint, with over 56% of their vulnerabilities in phantom dependencies.
- Breaking-change counts measure only removals and visibility reductions, so they flag potential breakage and do not show that a given application breaks. Endor suggests call graph and type hierarchy analysis for that.
- Dynamic installs are only detected if the code ran beforehand.
- The page lists seven languages for reachability but names eight or more.
Organisations named here
- GHSA-24x6-8c7m-hv3f
- GHSA-r95h-9x8f-r3f7
- phantom dependency
- xz-utils
CVEs named here
- CVE-2023-41080
- CVE-2017-12159
- CVE-2023-36566
- CVE-2024-35220
- CVE-2021-33605
- CVE-2020-13091
- CVE-2023-36807
- CVE-2021-23337
- CVE-2020-13935
Technologies named here
- Endor Labs
- PyPI neural-compressor
- NVD, backlog increased in early 2024
- Java Uber JARs / repackaged components
- GitHub Advisory Database
- npm
- PyPI/pillow
- EPSS, estimates likelihood of exploitation in the wild
- CVSS
- PyPI/tensorflow, tensorflow-gpu, tensorflow-cpu
- pip freeze
- npm/angular
- OSS-Fuzz
- RubyGems/nokogiri
- Maven com.vaadin:vaadin-bom
- SCA tools
- Apache Tomcat
- Keycloak
- Microsoft Common Data Model SDK
- npm/fastify-session and npm/@fastify/session
- spring-web 4.3.30
- logback-core 1.2.9 and logback-classic
- org.bouncycastle:bcprov-jdk15on
- Jenkins
- pandas
- OSV
- NVD
- EPSS
- Python
- Maven
Techniques named here
- Dynamic installation of Python packages at runtime
- Combining reachability and EPSS
Threat actors named here
- XZ Utils supply chain attack
Related in Supply Chain


