What it means for teams

Once code runs in a job, it has everything the job has: every secret in scope, the runner's file system, its network reach and whatever later jobs leave on a reused runner. Scoping each pipeline is what limits a compromise to one job.

How to prevent it

  • Do not share runners between pipelines of different sensitivity, and return each runner to a clean state after every job.
  • Scope secrets and token permissions to the pipeline and step that need them.
  • Run jobs as a least-privileged OS user, apart from the CI controller, on patched nodes.
  • Limit each runner's network access to what its jobs need, including outbound internet access.

Guides on this site

Practice

Gaps on this site

The GitHub Actions guides cover per-job permissions, ephemeral runners and runner groups. No guide here walks through isolating self-hosted runners and restricting their network egress, or covers runners on other CI systems.

References

  1. CICD-SEC-5 Insufficient PBAC (Pipeline-Based Access Controls) (OWASP)

List data from the publisher. A guide is listed as the main subject when the weakness or risk is what the guide is about, and as covering it when a dedicated section or worked example addresses it.