Lesson 21 of 35SCASCA

What is SCA?Software Composition Analysis & Supply Chain Security explained

Inventories every open-source library an application depends on — including the dependencies of those dependencies — and flags known vulnerabilities, risky licenses, or tampered packages hiding in that supply chain.

By Reviewed

Verified Sources: cisa.gov, ibm.com, akamai.com

The lesson

What's really inside the software you ship

Most of a modern application is code your team didn't write — open-source packages pulled in by other packages. This lesson explains how that hidden supply chain gets inventoried, checked, and gated before it bites.

If it helps, think of it as… the ingredient label

A bakery buys flour, chocolate, and vanilla rather than milling and growing everything itself — and each supplier has suppliers of its own. When a recall hits one brand of flour, the bakery with a complete ingredient list knows within minutes which cakes are affected. The bakery without one has to tear apart every recipe by hand.

Dependency manifest

The packages your code asks for directly

Resolve the full tree

Including dependencies of dependencies

Check databases

Known flaws, licenses, malicious packages

Build ships with an SBOM

A machine-readable ingredient list

Build or PR gated

New vulnerable or risky package stopped

Declared dependencies are expanded into the full tree, checked against vulnerability and license databases, and gated in the build.

What it does

Software composition analysis (SCA) answers a question most teams can't answer from memory: what, exactly, is our application made of? Modern apps are mostly assembled from open-source packages — free, community-maintained building blocks — and each package pulls in packages of its own. Ask for one convenient library and you may silently inherit two hundred transitive dependencies, meaning the dependencies of your dependencies.

An SCA tool inventories that entire tree, then checks every component against databases of known vulnerabilities (each tracked by a CVE identifier), license obligations, and known-malicious packages. The inventory itself becomes a deliverable: a software bill of materials (SBOM), a machine-readable ingredient list in a standard format like SPDX or CycloneDX that customers and regulators increasingly expect.

The attack it stops

In December 2021, a critical flaw called Log4Shell was disclosed in a logging library used, often invisibly, by an enormous share of the world's server software. Attackers began exploiting it within hours. The defining problem wasn't patching — it was that most organizations spent days just figuring out whether and where they ran the library at all, because it usually arrived as a dependency of a dependency.

SCA turns that fire drill into a query: teams with a current inventory knew their exposure in minutes. It also guards the front door against deliberate attacks on the supply chain itself — a package whose name is one typo away from a popular one (typosquatting), or a legitimate project quietly backdoored, as happened to a widely used open-source compression tool in 2024 before the sabotage was caught.

How it works, step by step

  1. The tool reads your dependency manifest — the file where your project declares what packages it needs — and resolves the complete tree, including every transitive dependency and its exact version.
  2. Each component is matched against vulnerability databases, license records, and feeds of known-malicious or suspicious packages.
  3. Findings are prioritized. Better tools add reachability analysis — checking whether your code actually calls the vulnerable function — because a flaw in code you never invoke is noise, not risk.
  4. The build pipeline enforces policy: a pull request that introduces a critically vulnerable or license-incompatible package is blocked before it merges.
  5. Monitoring continues after release. When a new flaw is disclosed tomorrow, the tool re-checks yesterday's SBOMs and tells you which deployed products are affected.

What it doesn't do

SCA finds known problems in components — it says nothing about the security of the code your own team wrote, and nothing about flaws nobody has discovered yet. Its output can also overwhelm: thousands of "vulnerable" findings, many in code paths you never execute, which is why prioritization and reachability matter more than raw counts.

The common beginner misconception is that an SBOM is itself security. An ingredient list doesn't make the cake safe — it makes the recall fast. The value appears the day a new disclosure lands and you need an answer in minutes.

How it fits the stack

SCA covers the code you import, while SAST covers the code you write — most teams run them side by side in the same pipeline. Container image scanning in container and Kubernetes security applies the same idea to everything packed into an image, and component findings flow into vulnerability management to be prioritized alongside every other patch.

Terms you just met

Each links to its plain-language definition in the glossary.

The field guide

Evaluating this category

A second pass for buyers: market context, distinctions that matter, and what to weigh when tools in this category start looking alike.

Most of a modern application isn't code anyone on the team wrote — it's open-source libraries, and the libraries those libraries depend on, sometimes dozens of layers deep. Software composition analysis inventories all of it, matches every component against databases of known vulnerabilities, and flags the dependencies that need attention, because a team can't secure what it doesn't know it's running.

The supply chain adds a sharper edge to that problem: packages themselves can be tampered with or actively malicious, so a vulnerability doesn't have to be in code you wrote to become code you ship.

The problem it solves

A typical project pulls in a handful of direct dependencies and, transitively, hundreds more nobody explicitly chose or reviewed. New vulnerabilities surface in open-source packages constantly, and a codebase can go from clean to exposed overnight with no first-party code change at all. Tracking which packages, at which versions, carry known issues isn't something a person can do reliably at scale.

The risk isn't limited to accidental bugs, either. Attackers now target the supply chain directly — publishing malicious packages under names that look like popular ones, or compromising a legitimate package's publishing pipeline — so the dependency itself can be the attack.

How it works

A scanner builds a full dependency tree for the project — direct and transitive — and matches each package and version against vulnerability databases to flag known issues. Because open-source licenses carry legal obligations too, most tools also check license terms against policy and flag anything that would create exposure if shipped.

Beyond known vulnerabilities, supply-chain checks look for signs of tampering: a package that suddenly changed maintainer, added unusual install-time behavior, or was published under a name deliberately close to a popular one (typosquatting). Findings are typically exported as a software bill of materials — a standardized component inventory that increasingly doubles as required proof of what shipped.

Not every flagged vulnerability is actually reachable — plenty of code sits in a library at rest and never runs. Reachability analysis checks whether a vulnerable function is genuinely called, letting most theoretical findings be safely deprioritized in favor of the handful an attacker could reach. Like SAST, checks are wired into pull requests and builds so a newly introduced vulnerable package is blocked before merge rather than found after release.

SCA vs SAST

Both scan source code, but for different code. SAST hunts for mistakes in the logic your own team wrote. SCA looks at everything else the application pulls in, checking third-party components against known vulnerability and license data rather than analyzing custom logic at all. Neither substitutes for the other: a perfectly written application can still ship a critical vulnerability living entirely in a dependency, and no dependency scan catches a bug in your own team's code.

The supply chain includes your infrastructure

A dependency tree doesn't stop at the packages your code imports. The base image a container is built from pulls in an entire operating system and its libraries; a Terraform or Helm module pulls in someone else's infrastructure definition the same way an npm package pulls in code. All of it is inherited, transitive, and capable of shipping a vulnerability or a malicious change nobody on the team wrote — exactly the problem SCA exists to catch.

So the supply-chain remit has widened to match. Tools now inventory base-image layers and IaC modules alongside application dependencies, and some go further with cloud connectors or agentless scanning that ties a flagged component back to where it is actually running — overlapping with the cloud-native protection platforms (CNAPP) built for the infrastructure side. When two tools both claim the container and IaC layer, check what you already own before adding another.

Choosing one

Reachability and prioritization quality matter more here than almost anywhere else in application security, because raw vulnerability counts in dependencies are enormous and mostly not exploitable in context — a tool that can't tell you which findings are real cuts straight to a backlog nobody will finish. Ask how a candidate separates reachable from theoretical risk before judging it on database size alone.

License compliance matters disproportionately to organizations that redistribute software or work under strict legal review, and barely at all to others — decide which camp you're in first. Finally, weigh how well SBOM output matches what customers or regulators require, since that document increasingly appears in contracts and audits rather than staying an internal nicety.

Capability taxonomy

What buyers typically evaluate when comparing tools in this category.

Dependency vulnerability scanning
Flags known CVEs in direct and transitive open-source dependencies.
License compliance
Detects and enforces policy on open-source license obligations.
SBOM generation
Produces standardized SPDX or CycloneDX software bills of materials.
Malicious package detection
Flags typosquatting and known-malicious packages in the dependency chain.
CI/CD gating
Blocks builds or pull requests that introduce new vulnerable or noncompliant packages.
Reachability analysis
Determines whether a vulnerable code path is actually invoked, to cut noise from unused code.
IaC & container config scanning
Scans infrastructure-as-code templates and container configurations for misconfigurations alongside application code.

Tools in this category

Now that you know what SCA does, see who does it.

Search Cyber Tool Stack

Jump to any tool, vendor, category, or glossary term.