Back

C6: Keep Your Components Secure - Overview

What is this control?

Keep Your Components Secure is the proactive control of managing the security of every first- and third-party component your software depends on, across its entire lifecycle—from the moment you choose it, through every release you ship, to the day you retire it. A modern application is mostly code you did not write: frameworks, libraries, runtimes, base images, and the long tail of transitive dependencies those pull in. This control is the discipline of knowing exactly what those components are, keeping them patched, sourcing them safely, and removing them when they are no longer needed.

This is the defensive counterpart to Vulnerable and Outdated Components (OWASP Top 10 A06) and to the broader category of software supply-chain risk. That risk category is what happens when a known-vulnerable, unmaintained, or maliciously altered dependency ends up running in production; this control is the set of habits that stop that from happening—inventory, scanning, patching, trusted sourcing, and continuous monitoring. The governing principle is you cannot secure what you cannot see: everything starts with a complete, accurate inventory.

Core Concept

Unmanaged components (invisible, drifting, trusted blindly):
  Inventory     -> nobody knows the full dependency tree
  Sourcing      -> packages pulled from any registry, unverified
  Versions      -> floating ranges, no lockfile, no pinning
  Patching      -> updated only when something breaks
  Monitoring    -> CVEs noticed from the news, if at all
  Footprint     -> unused libraries left installed "just in case"
  End of life   -> abandoned dependencies still shipped

Managed components (inventoried, verified, patched, watched):
  Inventory     -> SBOM lists every direct and transitive component
  Sourcing      -> trusted official registries, integrity verified
  Versions      -> pinned in a lockfile with integrity hashes
  Patching      -> regular cadence, tested, plus emergency path
  Monitoring    -> automated CVE/advisory alerts (Dependabot/Renovate)
  Footprint     -> unused dependencies removed, surface minimized
  End of life   -> EOL components tracked and replaced ahead of time

Two audiences: what you build and what you consume

The control applies in two directions, and both matter:

Why This Control Matters

Business Impact of Getting It Right

Technical Impact

Core Practices

Keep Your Components Secure is made of a set of reinforcing habits:

The Component Lifecycle

This control is best understood as covering a component from selection to retirement. Each stage has its own safeguard.

Lifecycle stageUnmanaged (risk)Managed (this control)
SelectionGrab any package that worksPrefer maintained, reputable, trusted-source components
AcquisitionInstall from any registry, unverifiedOfficial registry, integrity hash / signature verified
DeclarationFloating version ranges, no lockfilePinned versions committed in a lockfile
BuildUnprotected CI pulls fresh each timeHardened pipeline, provenance, reproducible build
OperationDeployed and forgottenContinuously scanned against advisory feeds
MaintenanceUpdate only when it breaksRegular tested cadence + emergency patch path
RetirementUnused / EOL libraries left in placeUnused removed, EOL replaced ahead of time

Real-World Incident Classes

These are recurring classes of incident that this control is designed to prevent. They are described as patterns, not as specific vulnerabilities, and no CVE numbers are invented.

Class 1: Critical flaw in a ubiquitous library (Log4Shell-class)

A single, extremely widely used logging library disclosed a critical remote-code-execution flaw. Because the library was buried deep in the transitive dependency trees of countless applications, most organisations could not even answer "are we affected?" for days. Teams with a current SBOM and SCA answered in minutes and patched first. This class is the canonical argument for inventory plus continuous scanning.

Class 2: Dependency confusion

An attacker publishes a package to a public registry using the same name as an organisation's internal private package, with a higher version number. Misconfigured tooling prefers the public one and pulls attacker code straight into the build. Defenses are trusted-source configuration, scoped/namespaced internal packages, and pinned lockfiles.

Class 3: Typosquatting and malicious packages

Attackers publish packages whose names are near-misses of popular ones (a transposed letter, a hyphen), or they compromise the credentials of a legitimate maintainer and push a malicious release. Installing one runs attacker code at install time. Defenses are careful sourcing, integrity verification, and holding back automatic adoption of brand-new versions.

Class 4: Compromised build pipeline

Rather than attacking a package, adversaries compromise the build or update infrastructure of a trusted vendor and ship a tainted-but-signed artifact to all of that vendor's customers. This is why securing your own pipeline and generating provenance (SLSA) matters—you are a link in someone else's supply chain.

Common Misunderstandings

Myth 1: "We only need to track what's in our manifest"

Reality: the large majority of components are transitive—pulled in by your dependencies' dependencies. Only a resolved lockfile and an SBOM show the real tree, and that is where most vulnerabilities live.

Myth 2: "If it isn't broken, don't update it"

Reality: an unchanged dependency is not a stable one—the world's knowledge of its flaws grows over time. A library that was "fine" last year may have three critical advisories today. Staying current on a cadence is cheaper and safer than a forced emergency jump.

Myth 3: "Popular packages are safe packages"

Reality: popularity increases blast radius, not safety. The most impactful supply-chain events target widely used libraries precisely because so many victims inherit the flaw at once.

Myth 4: "A scan at release is enough"

Reality: new vulnerabilities are disclosed daily against code you already shipped. Scanning must be continuous against deployed artifacts, not a one-time gate.

Myth 5: "A WAF rule fixed it"

Reality: virtual patching buys time; it does not remove the vulnerable code. Treat it as a stopgap and still schedule the real upgrade.

How This Control Relates to Vulnerable and Outdated Components

AspectVulnerable & Outdated Components (the risk)Keep Your Components Secure (the control)
NatureA known-flawed dependency left runningThe practices that stop that from happening
Default postureUnknown and unmanaged until it bitesInventoried, pinned, scanned, patched
Effort modelSomeone must notice the CVE in the newsAutomation surfaces and PRs the fix
Failure modeBlind to transitive and supply-chain riskContinuous visibility across the lifecycle

Key Takeaways

  1. You cannot secure what you cannot see—an SBOM covering direct and transitive components comes first.
  2. Scan continuously, not just at release—SCA belongs in CI and against everything deployed.
  3. Source and pin deliberately—trusted registries, integrity hashes, and lockfiles keep malicious and drifting components out.
  4. Patch on a cadence with an emergency lane—small frequent updates beat a crisis upgrade.
  5. Minimize and retire—remove unused dependencies and replace EOL components before they lose support.

Self-Assessment Checklist

Next Steps