Security

Dependency Analysis

Modern software is mostly other people's code — a typical application pulls in dozens or hundreds of third-party libraries, and each one is a potential vector for a known vulnerability the application team never wrote and might not even know is there. Dependency analysis (often called Software Composition Analysis, SCA) is the practice of systematically finding out exactly what's in a codebase and checking each piece against known-vulnerability databases.

Quick reference
What it is
Identifying every third-party component — direct and transitive — in a codebase and cross-referencing each one against known CVEs.
Mental model
An ingredient list for software — you can't know if something contains a recalled ingredient until you know exactly what's in it, including ingredients your ingredients brought along.
Key numbers
A typical application has far more transitive (indirect) dependencies than direct ones — one direct dependency can pull in dozens more nobody on the team ever explicitly chose.
Reach for it when
Before shipping anything with third-party dependencies — virtually all software — and continuously afterward as new CVEs get published against components already in production.

Why it matters: a known, unpatched CVE

The 2017 Equifax breach is the standard example cited across the security industry precisely because it wasn't a zero-day at all — it exploited a vulnerability in Apache Struts that already had a public CVE and an available patch for months before the breach happened. The failure wasn't a lack of security research; it was that nobody's dependency-tracking process caught that a known-vulnerable version was still running in production.

Direct vs. transitive dependencies

An application depends directly on three libraries, and each of those pulls in its own further dependencies that the application team never explicitly chose Your application Direct dep A Direct dep B Direct dep C ...and every dependency's own dependencies (transitive) often dozens more per direct dependency, chosen by no one on your team
A vulnerability three layers deep in a transitive dependency is exactly as real a risk to the running application as one in a dependency the team picked directly.

SBOM: the Software Bill of Materials

An SBOM is a formal, machine-readable inventory of every component (and typically every specific version) that makes up a piece of software — increasingly a regulatory and contractual requirement, not just an internal nicety. Two formats dominate: SPDX and CycloneDX, both designed to be generated automatically from a build rather than maintained by hand.

How scanning actually works

A build manifest is resolved into a full dependency tree, turned into a component list with exact versions, cross-referenced against a vulnerability database, and reported Build manifest package.json, requirements.txt, ... Resolver builds the full tree, transitive included Component list exact versions, the SBOM Vulnerability DB NVD, OSV, advisories Report flagged CVEs This pipeline runs on every build in a mature setup, not as a one-time audit.
The component list produced here is exactly the SBOM — the vulnerability report is what you get once you cross-reference it against what's currently known.

Real tools

ToolEcosystemWhat it does
npm audit / yarn auditJavaScript/NodeBuilt into the package manager itself — flags known vulnerabilities in the resolved dependency tree.
pip-audit, safetyPythonScan installed or declared packages against known Python-ecosystem vulnerabilities.
OWASP Dependency-CheckJava and othersA long-standing, general-purpose open-source SCA tool covering multiple language ecosystems.
Snyk, GitHub DependabotMulti-ecosystemCommercial/hosted scanning, often with automated pull requests bumping a vulnerable dependency to a fixed version.
Syft + GrypeMulti-ecosystem, containersGenerate an SBOM from a filesystem/container image (Syft) and scan it for known vulnerabilities (Grype).
Yocto's cve-check classEmbedded LinuxCross-references every build recipe's declared version against the NVD feed at build time — see below.

Why this is harder in embedded

Dependency analysis in embedded systems runs into real constraints web and application development mostly don't have:

Real-world applications

Gotchas

Field notes