Most of a modern application is third-party code. How to know what is in it, and what to do when a component vulnerability appears.
A development team writes a fraction of a modern application's code; the rest comes from external libraries. Those libraries pull in further libraries, and after a few levels nobody knows what actually runs.
The problem becomes visible when a serious vulnerability is found in a widely used component and the question is whether your system is affected.
Transitive dependencies. Behind the ten directly referenced libraries sit hundreds more. The vulnerability is typically in a deeper layer.
Version drift. The developer machine, test environment and production do not necessarily run the same version.
Containers. Beyond the application, the base image contains packages with their own vulnerabilities.
Legacy systems. What has run for years untouched typically has no inventory at all.
A Software Bill of Materials is an inventory of a software's components: which component, at which version, under which licence. In machine-readable format (CycloneDX or SPDX), so it can be matched automatically against vulnerability databases.
An SBOM protects against nothing by itself. Its value is that when a new vulnerability appears you can answer in minutes whether you are affected, rather than searching for days.
1. Generate during build. Most package managers and build tools have SBOM generators. The key is making it part of the build rather than a separately run task, otherwise it goes stale.
2. Store tied to versions. Every released version should have an SBOM. If a question arises three months later about the February release, you must be able to look.
3. Automated matching. The SBOM must be compared against vulnerability databases regularly. Once at build time is not enough, because new vulnerabilities appear later.
4. Request supplier SBOMs. If you use purchased software, ask for its SBOM. This is an increasingly common contractual expectation.
Dependency scanning on a medium application returns hundreds of findings. The same logic applies as in general vulnerability management:
We covered this in detail in our vulnerability management article.
Dependencies carry not only vulnerabilities but attack surface:
Typosquatting packages. The attacker publishes a package with a name similar to a popular one, hoping someone mistypes.
Taken-over packages. An abandoned but widely used package is taken over and malicious code added.
Build chain compromise. Not the package but the build process is subverted.
Pinning package versions (lockfiles), an internal package mirror and isolating the build environment defend against these.
Our IT security services include reviewing the security of the development process.
The most important OWASP Top 10 items explained: broken access control, injection, authentication. What a…
Why the CVSS score alone misleads, what EPSS and the KEV catalogue add, and how to build a working patch…
You do not need a full DevSecOps programme. Which five steps deliver the most protection in development,…
Our specialists are happy to discuss what this means in your organisation's environment.