Software supply chain security requires more than scanning open-source dependencies for known vulnerabilities. From compromised npm packages and stolen publishing credentials to poisoned CI/CD tools and AI dependencies, modern applications inherit risk from every component and process involved in building and delivering software. This software supply chain security checklist covers nine practical areas for reducing that risk, from dependency management and SBOMs to pipeline security, runtime testing, and vendor governance.

Modern software is assembled from far more than first-party source code. Applications can depend on hundreds of open-source packages, container base images, GitHub Actions, CI/CD workflows, cloud credentials, infrastructure templates, APIs, AI models and services, build tools, and third-party software.
Every dependency and integration introduces a trust relationship. Attackers increasingly look for ways to abuse those relationships instead of attacking an application directly.
OWASP formally broadened its treatment of this risk in the Top 10:2025. A03:2025 Software Supply Chain Failures covers compromises and breakdowns in the processes used to build, distribute, and update software, including third-party components, repositories, development tooling, and artifact creation.
The practical consequence is that a software supply chain security checklist cannot stop at SCA or SBOM generation. Teams need layered controls from dependency selection and build infrastructure through deployment and runtime testing.
This checklist covers nine areas that AppSec and DevSecOps teams should address.
Software supply chain security is the set of practices and controls used to protect the components, tools, identities, infrastructure, and processes involved in building and delivering software.
The software supply chain can include:
Securing this chain requires both preventive controls and ongoing verification. Static and build-time techniques can identify vulnerable components, exposed secrets, and configuration problems before deployment. Runtime testing adds another perspective by examining the application that is actually assembled and exposed.
Open-source components accelerate development, but every dependency can introduce security, maintenance, and licensing risk.
That risk is not limited to known Common Vulnerabilities and Exposures (CVEs). Common supply chain attack patterns include dependency confusion, typosquatting, malicious packages, compromised maintainer accounts, and attacks on transitive dependencies.
Shai-Hulud illustrated how quickly these risks can combine. First observed in September 2025, the npm malware harvested secrets and used stolen npm tokens to publish malicious versions of other packages accessible to compromised maintainers. After compromising one maintainer, the malware could use that maintainer’s npm tokens to infect other packages they were authorized to publish, allowing the same process to repeat as more credentials were exposed. This gave the campaign worm-like, self-propagating behavior across the npm ecosystem. Invicti’s analysis of the Shai-Hulud npm worm covers the propagation mechanics and later second wave in more detail.
Dependency controls should therefore address both known vulnerabilities and trust in the package itself.
Useful practices include:
Exact version pinning can reduce unexpected upgrades, but it is not a substitute for vulnerability monitoring. A precisely pinned vulnerable version remains vulnerable. Teams need a controlled process for detecting, evaluating, testing, and deploying dependency updates.
A software bill of materials is a machine-readable inventory of components associated with a software product or build. During a major vulnerability disclosure, an SBOM can help answer a basic but urgent question: “Where are we using this component?”
That makes SBOMs useful for vulnerability response, software asset visibility, customer requirements, and compliance activities.
Effective SBOM programs should:
An SBOM is an inventory, not a vulnerability verdict. Teams still need vulnerability intelligence and security testing to determine what an identified component means for a specific application.
AI-enabled applications add dependencies that a conventional software inventory may not fully describe. These can include models, datasets, AI frameworks, model-serving infrastructure, and external AI services.
Industry BOM standards are already expanding to represent these relationships. CycloneDX supports machine learning BOM information for models, datasets, frameworks, and related dependencies, while SPDX 3 includes an AI Profile for documenting and exchanging information about AI software packages, models, and datasets.
CISA’s updated SBOM guidance also identifies AI software as an area where additional SBOM elements may be warranted, although this remains an area of ongoing work rather than a finalized separate federal AI-BOM minimum-elements standard.
Organizations building or consuming AI-enabled software should consider inventorying:
Regulatory requirements are developing alongside these technical standards. In the EU, for example, the AI Act includes documentation and transparency requirements for different classes of AI systems and models. Article 50 transparency obligations apply from August 2, 2026, while other requirements follow different timelines depending on the system and risk category. An AI component inventory can support governance without being treated as a compliance mechanism by itself.
AI component inventory also needs to be paired with application-level testing. Knowing that an application uses an LLM does not reveal whether its implementation is vulnerable to prompt injection, insecure output handling, excessive tool access, or other LLM-specific risks. These concerns are part of the broader software supply chain risks introduced by AI-driven applications, where models, SDKs, plugins, APIs, and external AI services add new dependencies and attack paths.
Credentials are a recurring link in software supply chain compromises because build systems and package registries depend on trusted identities.
A stolen publishing token can let an attacker release a malicious package under a legitimate name. A CI/CD credential can provide access to source code, artifacts, cloud infrastructure, or additional secrets.
The Axios compromise in March 2026 showed the impact of compromised publishing access. Attackers used a compromised maintainer account to publish malicious Axios versions 1.14.1 and 0.30.4. Those versions added plain-crypto-js@4.2.1, a malicious dependency whose post-install behavior delivered a cross-platform remote access trojan for Windows, macOS, and Linux. Microsoft attributed the campaign’s infrastructure to Sapphire Sleet, a North Korean state actor. Invicti’s analysis of the Axios npm compromise provides the incident timeline and technical details.
For a package with tens of millions of weekly downloads, even a short compromise window can create significant downstream exposure.
Supply chain identity controls should include:
Secrets scanning can identify exposed credentials, but it should sit inside a broader identity security program. A credential that was never committed to source can still be stolen from a developer workstation, CI runner, or compromised dependency.
CI/CD systems are unusually valuable supply chain targets because they combine trusted code execution with access to repositories, credentials, build artifacts, and deployment environments.
Third-party actions and plugins extend that trust to external code.
The March 2025 compromise of tj-actions/changed-files demonstrated one specific danger. Attackers compromised the project and repointed existing version tags to a malicious commit. Workflows using those mutable tags could then execute the compromised code, which attempted to expose CI/CD secrets through workflow logs. Invicti covered the tj-actions/changed-files supply chain attack shortly after its discovery.
Mutable tags were therefore an enabling condition that expanded the attack’s reach. They were not the initial compromise vector.
For third-party GitHub Actions, referencing a full commit SHA can reduce this particular risk:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
Teams should combine immutable references with controlled dependency update tooling so pinned actions do not simply become permanently outdated.
Other CI/CD controls include:
The 2026 Trivy incident showed why CI/CD dependencies deserve the same scrutiny as application dependencies.
According to Aqua Security’s Trivy incident report, attackers used compromised credentials to publish malicious Trivy artifacts and force-pushed existing trivy-action and setup-trivy version tags to malicious commits. Pipelines referencing mutable tags could therefore run attacker-controlled code without changing their own workflow definitions.
The incident also illustrates how one supply chain compromise can create conditions for another. The LiteLLM incident record states that the subsequent PyPI compromise originated from the compromised Trivy security-scanning dependency. Malicious LiteLLM versions 1.82.7 and 1.82.8 were then published to steal credentials.
The broader lesson is to treat CI/CD tooling as executable third-party code with privileged access, not merely as pipeline configuration.
Container images package application code together with dependencies, operating system components, configuration, and supporting tools. A vulnerable or malicious component in a base image can therefore propagate across every workload built from it.
Container security should include:
Container scanning should also connect back to application context. A long list of component CVEs is useful for coverage, but teams still need to understand which applications contain an affected image and what exposure that application presents.
Package registries sit at a critical trust boundary between publishers and consumers.
Attackers can target this boundary through account takeover, stolen publishing credentials, typosquatting, dependency confusion, malicious new packages, or compromised legitimate packages.
Useful registry controls include:
Provenance can help establish where and how an artifact was built or published. It does not prove that the software itself is secure, so it should complement SCA, malware detection, code review, and application security testing.
Infrastructure-as-code templates define the environments where applications run. A secure application component can still be exposed through an insecure deployment configuration, while a vulnerable component can become more dangerous when combined with excessive privileges or unnecessary network exposure.
Teams should scan infrastructure definitions before deployment for issues such as:
Policy-as-code controls can enforce organization-specific requirements alongside vulnerability and misconfiguration scanning.
Infrastructure security should also continue after deployment. Configuration drift can make a previously reviewed environment materially different from the IaC definition that was originally approved.
Pre-deployment controls answer important questions about source code, dependencies, configurations, and artifacts. They cannot provide a complete view of the assembled application that an attacker can actually reach.
Dynamic application security testing (DAST) approaches the application from the outside while it is running. That makes it useful for finding vulnerabilities and misconfigurations that depend on runtime behavior, application architecture, authentication, APIs, server configuration, or interactions between components.
This distinction matters for supply chain security.
SCA can tell you that a vulnerable component is present in the dependency tree. An SBOM can tell you which application or build contains that component. DAST can test the running application for externally exposed vulnerabilities, including weaknesses associated with vulnerable or outdated technologies where a suitable dynamic check exists.
DAST should not be described as a universal CVE exploitability oracle. Some vulnerable components or code paths cannot be exercised or identified dynamically, and some supply chain problems occur entirely in build infrastructure rather than in the deployed application.
The techniques are complementary:
The Invicti platform’s DAST includes checks for vulnerable and outdated technologies identified in running applications, complementing the static dependency visibility that SCA provides. For vulnerability classes where safe automatic exploitation is possible, Invicti’s proof-based scanning can also provide evidence that a reported application vulnerability is exploitable, helping reduce manual verification work.
Modern applications also expose much of their functionality through APIs, so runtime coverage needs to extend beyond browser-facing pages. Invicti’s API security testing combines API discovery with dynamic testing to identify and test documented and undocumented endpoints.
Your software supply chain includes software that your organization buys and integrates as well as software it builds.
A vendor can introduce risk through vulnerable software, insecure update mechanisms, compromised credentials, excessive API permissions, or weak incident response processes.
Vendor assessments should be risk-based. A SaaS provider handling public marketing content does not require the same scrutiny as a vendor whose software runs inside production infrastructure or has access to customer data.
For higher-risk vendors, consider asking:
Contractual requirements can also define SBOM delivery, vulnerability notification, remediation expectations, and security incident reporting where justified by the vendor’s risk.
Use this checklist as a starting point and adapt it to your development stack, deployment model, and risk profile.
Software supply chain controls generate security signals at many different stages. The operational challenge is turning those signals into a coherent view of application risk.
Invicti AppSec Core brings essential application security capabilities into the Invicti Application Security Platform, including SAST, SCA, SBOM, container security, secrets detection, IaC scanning, API security, DAST, and ASPM. Rather than treating these as unrelated products, the platform provides centralized visibility and correlation across findings from code to cloud to runtime.
For supply chain security, that supports several complementary layers.
SCA identifies vulnerable components in application code, while SBOM capabilities help teams inventory components and map them to applications. Container and IaC scanning extend visibility into deployable artifacts and cloud application configurations. Secrets detection identifies exposed credentials in source and configuration data.
DAST adds the runtime perspective. Invicti dynamically tests running web applications and APIs, including security checks for vulnerable and outdated technologies. For many common application vulnerabilities, proof-based scanning can automatically provide evidence of exploitability rather than leaving teams to manually validate every reported issue.
Application security posture management (ASPM) provides the management layer across these signals, collecting, correlating, and prioritizing findings to provide a clearer view of application risk. Invicti’s SBOM management capabilities can also maintain component inventory across applications and help teams identify affected projects when new component vulnerabilities emerge.
This is especially important because supply chain security cannot be reduced to a single scanner. Component inventory, code analysis, infrastructure controls, and runtime testing each expose different parts of the problem.
The practical goal is to know what is in an application, protect how it is built and deployed, test what is actually running, and use all of that context to prioritize remediation.
No single control can secure the entire software supply chain.
SCA can identify vulnerable dependencies. SBOMs provide component inventory. Identity and CI/CD controls protect trusted build processes. Provenance helps establish where artifacts came from. Container and IaC scanning extend security checks into deployment. Vendor governance addresses dependencies outside your direct control.
DAST adds another necessary layer by testing the assembled application and API attack surface at runtime.
Bringing those signals together gives AppSec teams a more useful model of supply chain risk: know what you use, control how software is built, protect what you deploy, test what is running, and prioritize remediation using evidence from across the application lifecycle.
If you want to see how those layers work together in practice, request an Invicti demo to see how the platform combines software composition analysis, application and API testing, runtime validation, and centralized risk management in one AppSec workflow.
A software supply chain security checklist should cover dependencies, SBOMs, AI components where relevant, secrets and identities, CI/CD pipelines, containers, package registries and provenance, infrastructure as code, runtime application testing, and vendor governance. The exact controls should reflect the organization’s development stack and threat model.
Examples include the 2025 Shai-Hulud npm worm and tj-actions/changed-files compromise, followed in 2026 by compromises involving Trivy, LiteLLM, and Axios. These incidents affected different parts of the supply chain, including package publishing credentials, CI/CD actions, security tooling, and widely used open-source dependencies.
SCA analyzes software components and dependencies to identify known vulnerabilities and other component risks. DAST tests a running application or API from the outside to identify vulnerabilities exposed through its runtime behavior. SCA provides broader dependency visibility, while DAST adds evidence from the assembled application and its reachable attack surface.
Git tags can be moved to point to different commits. If a workflow trusts a mutable tag and that tag is maliciously repointed, the workflow may execute code that was not originally reviewed. Referencing a full commit SHA makes the code reference immutable, although teams still need a controlled process for updating pinned actions. The tj-actions/changed-files compromise demonstrated the risk of relying on mutable tags.
SBOMs provide structured component inventories. When a vulnerability or malicious package is disclosed, teams can use that inventory to identify applications and artifacts that contain the affected component instead of relying entirely on manual searches.
An AI or machine learning BOM extends component transparency to AI systems by describing relevant models, datasets, frameworks, services, and relationships. CycloneDX provides AI/ML-BOM capabilities, while SPDX 3 includes an AI Profile for exchanging information about AI software packages, models, and datasets.
Use controlled namespaces for private packages, explicitly configure private package resolution, review new dependencies, and ensure internal package names cannot unexpectedly resolve to untrusted public packages. Registry and package-manager configuration should make the intended source of internal dependencies unambiguous.
Supply-chain Levels for Software Artifacts (SLSA) is a framework for improving software artifact integrity. It provides requirements and guidance around areas such as build provenance and trusted build processes, helping organizations establish stronger evidence about how software artifacts were produced.
OWASP Top 10:2025 includes A03:2025 Software Supply Chain Failures. The category covers compromises or failures in software building, distribution, and update processes, including risks involving third-party components, repositories, development tools, and artifacts.
The Invicti Application Security Platform combines capabilities including SCA, SBOM management, secrets detection, container and IaC security, DAST, API security, and ASPM. This allows teams to combine component and pre-deployment visibility with runtime application testing and centralized risk management rather than operating each security technique in isolation.
