Your CI/CD pipeline has access to everything: source code, secrets, production deployments. That makes it one of the most valuable targets for attackers. Here’s how to lock it down.
The Hidden Attack Surface
Most developers focus on application security while leaving their build pipeline wide open. But consider what your pipeline can do:
- Access source code repositories
- Read and write secrets
- Deploy to production
- Modify infrastructure
A compromised pipeline means game over.
Critical Security Measures
1. Principle of Least Privilege
Your CI/CD jobs shouldn’t have more access than they need.
Bad practice:
# DON'T: Full admin access
job:
permissions:
contents: write
packages: write
deployments: write
Good practice:
# DO: Minimal required permissions
job:
permissions:
contents: read
packages: read
2. Secret Management
Never hardcode secrets. Use your platform’s secret management:
- GitHub: Secrets and OIDC tokens
- GitLab: CI/CD Variables with masking
- Azure DevOps: Variable groups and Key Vault
3. Dependency Scanning
Supply chain attacks are on the rise. Scan every dependency:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run dependency audit
run: npm audit --audit-level=critical
4. Pipeline Integrity
Ensure your pipeline definitions can’t be tampered with:
- Require PR reviews for workflow changes
- Use commit signing
- Enable branch protection rules
Common Attack Vectors
Script Injection
Attackers can inject malicious scripts through PR titles, branch names, or issue content:
# VULNERABLE
- run: echo "Deploying ${{ github.event.pull_request.title }}"
# SECURE
- run: echo "Deploying PR #${{ github.event.pull_request.number }}"
Poisoned Dependencies
Lock your dependencies with checksums:
npm ci --ignore-scripts
# or
yarn install --immutable
Automated Security Testing in CI/CD
The best time to catch vulnerabilities is before they hit production. Integrate security scanning into every build:
- Static Analysis (SAST): Scan code for vulnerabilities
- Dynamic Analysis (DAST): Test running applications
- Dependency Scanning: Check for known CVEs
- Secret Scanning: Catch leaked credentials
Conclusion
Your CI/CD pipeline is infrastructure. Treat it with the same security rigor as your production systems. The cost of a pipeline breach far exceeds the effort of securing it properly.
Hacker Bot integrates directly with GitHub Actions and GitLab CI to scan every PR before merge. Start protecting your pipeline today.