TL;DR — Key Takeaways
- CI/CD pipelines are highly attractive attack targets because they execute code automatically while often holding privileged credentials and broad access to cloud, registry and production systems.
- Common weaknesses include permanent credentials, outdated Jenkins servers, third-party actions pinned to mutable tags and build agents with excessive network or environment access.
- Hardened pipelines should use least-privilege credentials, commit-pinned actions, ephemeral isolated execution environments and signed provenance for every build.
Your team probably spends considerable effort securing your application. WAFs, rate limiting, input validation, penetration testing. Then code passes through a CI/CD pipeline that runs with privileged credentials, executes arbitrary code from third-party actions, has broad network access to internal systems, and logs secrets in plain text if someone makes one configuration mistake.
The pipeline that builds and deploys your secure application is itself the least secure system in your infrastructure.
Think about what a CI/CD pipeline actually is from an attacker’s perspective. It is a system that automatically executes code, often with administrative access to your cloud accounts, container registries, databases, and production environments. It pulls dependencies from the public internet. It runs plugins and actions written by strangers. It often has access to every secret needed to deploy to every environment. If you designed a system specifically to be an attractive target for supply chain attacks, you would design a CI/CD pipeline.
The XZ Utils backdoor was a masterclass in exploiting this exact attack surface. A patient attacker spent years building trust in an open-source project, then introduced a backdoor that would have propagated through build systems worldwide. That attack was caught by accident. The next one might not be. And your pipeline is running builds right now that pull in hundreds of dependencies, each of which is a potential vector.
Here is what a hardened pipeline actually looks like. First, pipeline credentials should be scoped to the minimum required for each stage, not a single service account that can do everything. Second, third-party actions and plugins should be pinned to specific commit SHAs, not tags that can be silently updated. Third, pipeline execution environments should be ephemeral and isolated, with no network access beyond what is explicitly required for that build step. Fourth, every pipeline run should produce a signed provenance attestation that can be verified independently.
Most organizations are nowhere near this. They are running Jenkins instances that have not been patched in months, GitHub Actions workflows that use community actions pinned to “latest,” and build agents with permanent credentials stored in environment variables. The gap between how seriously we take application security and how casually we treat pipeline security is the biggest unaddressed risk in modern DevOps. And it will take one high-profile breach through a CI/CD vector to make everyone suddenly care.
Frequently Asked Questions
Why are CI/CD pipelines such attractive targets for attackers?
They combine automated code execution with access to sensitive credentials, internal systems, container registries, cloud accounts and production environments. Compromising the pipeline can therefore provide a path into multiple parts of the software supply chain.
How can organizations reduce CI/CD pipeline risk?
Teams should scope credentials to individual stages, pin third-party actions to specific commit SHAs, isolate build environments, restrict network access and remove persistent credentials wherever possible.
Why does software provenance matter in pipeline security?
Signed provenance allows organizations to verify where a build came from, what process produced it and whether the artifact has been altered, providing stronger assurance before software reaches production.

