A03—Software Supply Chain Failures
>Control Description
>Prevention & Mitigation Strategies
- 1.Centrally generate and manage the Software Bill of Materials (SBOM) of your entire software.
- 2.Track not just your direct dependencies, but their (transitive) dependencies, and so on.
- 3.Reduce attack surface by removing unused dependencies, unnecessary features, components, files, and documentation.
- 4.Continuously inventory the versions of both client-side and server-side components (e.g., frameworks, libraries) and their dependencies using tools like OWASP Dependency Track, OWASP Dependency Check, retire.js, etc.
- 5.Continuously monitor sources like Common Vulnerability and Exposures (CVE), National Vulnerability Database (NVD), and [Open Source Vulnerabilities (OSV)](https://osv.dev/) for vulnerabilities in the components you use. Use software composition analysis, software supply chain, or security-focused SBOM tools to automate the process. Subscribe to alerts for security vulnerabilities related to components you use.
- 6.Only obtain components from official (trusted) sources over secure links. Prefer signed packages to reduce the chance of including a modified, malicious component (see [A08:2025-Software and Data Integrity Failures](https://owasp.org/Top10/2025/A08_2025-Software_or_Data_Integrity_Failures/)).
- 7.Deliberately choose which version of a dependency you use and upgrade only when there is need.
- 8.Monitor for libraries and components that are unmaintained or do not create security patches for older versions. If patching is not possible, consider migrating to an alternative. If that is not possible, consider deploying a virtual patch to monitor, detect, or protect against the discovered issue.
- 9.Update your CI/CD, IDE, and any other developer tooling regularly.
- 10.Avoid deploying updates to all systems simultaneously. Use staged rollouts or canary deployments to limit exposure in case a trusted vendor is compromised.
- 11.Implement a change management process that tracks changes to CI/CD pipelines, code repositories, sandbox areas, developer IDEs, SBOM tooling and artifacts, logging systems, third-party integrations (SaaS), artifact repositories, and container registries.
- 12.Harden your code repository (no checked-in secrets, protected branches, backups), developer workstations (regular patching, MFA, monitoring), build servers and CI/CD (separation of duties, access control, signed builds, environment-scoped secrets, tamper-evident logs), artifacts (integrity via provenance, signing, timestamping; promote rather than rebuild per environment; immutable builds), and infrastructure as code (managed via PRs and version control).
>Attack Scenarios
A trusted vendor is compromised with malware, leading to your computer systems being compromised when you upgrade. The most famous example of this is probably: * The 2019 SolarWinds compromise that led to ~18,000 organizations being compromised. [https://www.npr.org/2021/04/16/985439655/a-worst-nightmare-cyberattack-the-untold-story-of-the-solarwinds-hack](https://www.npr.org/2021/04/16/985439655/a-worst-nightmare-cyberattack-the-untold-story-of-the-solarwinds-hack)
A trusted vendor is compromised such that it behaves maliciously only under a specific condition. * The 2025 Bybit theft of $1.5 billion was caused by [a supply chain attack in wallet software](https://www.sygnia.co/blog/sygnia-investigation-bybit-hack/) that only executed when the target wallet was being used.
The [`Shai-Hulud` supply chain attack](https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem) in 2025 was the first successful self-propagating npm worm. Attacks seeded malicious versions of popular packages, which used a post-install script to harvest and exfiltrate sensitive data to public GitHub repositories. The malware would also detect npm tokens in the victim environment, and automatically use them to push malicious versions of any accessible package. The worm reached over 500 package versions before being disrupted by npm. This supply chain attack was advanced, fast-spreading, and damaging, and by targeting developer machines it demonstrated developers themselves are now prime targets for supply chain attacks.
Components typically run with the same privileges as the application itself, so flaws in any component can result in serious impact. Such flaws can be accidental (e.g., coding error) or intentional (e.g., a backdoor in a component). Some example exploitable component vulnerabilities discovered are: * CVE-2017-5638, a Struts 2 remote code execution vulnerability that enables the execution of arbitrary code on the server, has been blamed for significant breaches. * CVE-2021-44228 ("Log4Shell"), an Apache Log4j remote code execution zero-day vulnerability, has been blamed for ransomware, cryptomining, and other attack campaigns.
>Related CWEs
>References
- •OWASP Application Security Verification Standard: V15 Secure Coding and Architecture
- •OWASP Cheat Sheet Series: Dependency Graph SBOM
- •OWASP Cheat Sheet Series: Vulnerable Dependency Management
- •OWASP Dependency-Track
- •OWASP CycloneDX
- •OWASP Application Security Verification Standard: V1 Architecture, design and threat modelling
- •OWASP Dependency Check (for Java and .NET libraries)
- •OWASP Virtual Patching Best Practices
- •The Unfortunate Reality of Insecure Libraries
- •MITRE Common Vulnerabilities and Exposures (CVE) search
- •National Vulnerability Database (NVD)
- •Retire.js for detecting known vulnerable JavaScript libraries
- •GitHub Advisory Database
- •SAFECode Software Integrity Controls (PDF)
- •Glassworm supply chain attack
- •PhantomRaven supply chain attack campaign
Ask AI
Configure your API key to use AI features.