Back

C6: Keep Your Components Secure - Threats Addressed

What This Control Defends Against

Keeping components secure is a defensive discipline. To see why each practice exists, it helps to look at what goes wrong when components are left unmanaged. The threats below are the concrete failure modes that a vulnerable, outdated, or compromised dependency creates. This page enumerates them; the How to Implement page gives the countermeasures.

These are threat classes and patterns. Real internet-wide events (Log4Shell-class RCE, dependency-confusion, typosquatting and malicious-package campaigns, and compromised-build-pipeline incidents) are referenced by class, not by invented CVE numbers.

The Threats, One by One

1. Remote Code Execution through a known-vulnerable library

The highest-impact outcome. A dependency ships a flaw that lets an attacker execute arbitrary code—often reachable with a single crafted request. Because the vulnerable code runs with your application's privileges, a single unpatched library can mean full server compromise.

2. Exploitation of publicly known, unpatched vulnerabilities

Once a CVE is public, exploit code and automated scanners follow within hours. Any service still running the affected version is a target of opportunity for mass, indiscriminate scanning—no sophistication required.

3. Malicious code execution from a compromised package (supply-chain)

The dependency is not merely buggy—it is hostile. An attacker publishes or hijacks a package so that installing or importing it runs their code. Payloads commonly steal environment variables and tokens, open reverse shells, or inject backdoors.

4. Dependency confusion / substitution

An attacker publishes a package on a public registry with the same name as your internal private package and a higher version. Build tooling that checks the public registry first happily pulls the attacker's code into your pipeline and production.

5. Typosquatting and brandjacking

Attackers register packages whose names are near-misses of popular ones—a swapped letter, an added hyphen, a plausible scope. A developer's typo or a copy-paste from a bad tutorial installs the malicious look-alike.

6. Compromised build and distribution pipeline

Instead of attacking a package on a registry, the adversary compromises the vendor's build or update infrastructure and ships a signed, trusted-looking artifact that is nonetheless malicious. Customers who trust the vendor inherit the backdoor.

7. Vulnerable operating-system and base-image packages

Your container base image is a bundle of components as well. An old base image drags in outdated OpenSSL, glibc, curl, and shell utilities—each a potential vulnerability that ships with every deploy even if your application code is clean.

8. Abandoned and end-of-life (EOL) components

A component whose maintainers have stopped work will never receive a fix. When a vulnerability is found in it, there is no patch to apply—you are exposed until you rip it out and replace it, which is slow under pressure.

9. Blindness to transitive dependencies

Not an exploit itself but the condition that makes all the others worse. Most components are pulled in indirectly. Without a resolved lockfile and an SBOM, you literally cannot answer "do we use this vulnerable library?"—so you cannot respond when it matters.

10. Integrity drift and unpinned versions

When versions float (^1.2.0, latest) and no integrity hash is enforced, two builds of the "same" commit can contain different code—and a registry compromise can slip an altered artifact into your build unnoticed.

How Attackers Find Vulnerable Components

You are not usually singled out; you are found in bulk. The reconnaissance is cheap and automated:

Threat-to-Safeguard Mapping

ThreatPrimary safeguard in this control
RCE via known-vulnerable librarySCA in CI + patch cadence + continuous scanning
Exploitation of public CVEsAdvisory monitoring (GHSA/NVD) + Dependabot/Renovate
Malicious / compromised packageTrusted sourcing + integrity verification + delayed adoption
Dependency confusionScoped internal packages + source pinning + lockfiles
TyposquattingVerify exact official name + integrity hashes
Compromised build pipelinePipeline hardening + artifact signing + provenance (SLSA)
Vulnerable base-image packagesContainer scanning (Trivy/Grype) + minimal images + rebuilds
Abandoned / EOL componentsEOL tracking + planned replacement
Transitive blindnessSBOM covering direct + transitive components
Integrity drift / unpinned versionsCommitted lockfiles with integrity hashes

Next Steps