A common mistake is treating runner authentication tokens as ordinary configuration rather than sensitive credentials. Teams also leave secrets in repos, reuse long-lived tokens, or make the repository publicly accessible. Better practice is to store tokens in sealed secrets, limit repository access, rotate credentials deliberately, and separate controller and runner permissions so compromise is harder to spread.
Why This Matters for Security Teams
Actions Runner Controller turns Kubernetes into a credentialed execution layer for CI workloads, so secret handling is not a side detail, it is the trust boundary. The most common failure is treating runner access tokens, registration material, and related credentials as ordinary deployment settings instead of sensitive secrets that can be reused, copied, or exposed through the same channels as application config. Once that happens, a compromise can move from a single runner into the controller plane, the repository, or the surrounding pipeline.
The practical consequence is that secrets hygiene directly shapes blast radius. If tokens are long-lived, shared across environments, or stored where developers and automation can read them broadly, the deployment becomes easier to operate but much harder to contain. NHIMG’s 2025 State of NHIs and Secrets in Cybersecurity reports that 44% of NHI tokens are exposed in the wild, often through tickets, collaboration tools, and code commits, which is exactly the kind of drift that breaks controller-based runner security. In practice, many security teams discover the problem only after a token has already been reused or a repo has already been overexposed, rather than through deliberate review.
How It Works in Practice
A secure ARC deployment depends on separating the controller’s authority from the runner’s runtime access and then protecting the credentials that connect those pieces. The controller should hold only the minimum permissions needed to create, register, and retire runners, while runners should inherit only the access needed for the job they execute. The mistake teams make is collapsing those layers, which creates a single credential path that is both operationally convenient and high impact if exposed.
Common failure points include:
- Storing runner tokens or registration secrets directly in manifests, Helm values, or repository files.
- Reusing the same token across multiple runner sets, namespaces, or clusters.
- Using long-lived credentials where short-lived issuance or deliberate rotation is possible.
- Granting the controller broad namespace or cluster permissions that exceed its function.
- Making the repository or delivery pipeline readable by more people and systems than the secret itself should reach.
The right operational pattern is to treat token handling as a lifecycle problem: issuance, storage, access, rotation, and revocation all need ownership. Sealed secrets or an equivalent secrets-management pattern helps keep material out of plain text, but the control only works if repository permissions, controller permissions, and runner permissions are all aligned. The strongest external guidance for this is the OWASP Non-Human Identity Top 10, which frames overprivilege, secret exposure, and poor lifecycle control as linked failure modes rather than separate issues.
These controls tend to break down when teams scale ARC quickly across many ephemeral runners and assume the automation layer will self-correct its own access sprawl.
Common Variations and Edge Cases
Tighter secret handling often increases operational overhead, so teams have to balance speed of runner provisioning against the control needed to stop credential spread. That trade-off becomes sharper in multi-tenant clusters, self-hosted runner fleets, and environments where different repositories or business units share the same ARC deployment.
A few edge cases matter in practice. Public repositories create a false sense of safety because the workload appears disposable, but the runner token or controller secret is still sensitive even if the code is not. Ephemeral runners also do not remove the need for secret hygiene, because short runner lifetimes do not protect long-lived registration material. Likewise, if the controller can create runners across more namespaces than intended, a single compromised secret can become a broad execution foothold.
The main judgement call is whether the deployment treats secrets as portable build-time convenience or as credentials with a real blast radius. The latter view is usually the correct one. NHIMG’s broader secrets research is useful here: the “The 2025 State of NHIs and Secrets in Cybersecurity” report notes that 62% of secrets are duplicated across multiple locations, which is a reminder that even well-intended ARC setups can become harder to secure once the same token appears in CI variables, manifests, and documentation. The better practice is to minimise where the token can exist at all, not just where it is intended to live.
Risk and Threat Considerations
The security risk is credential exposure plus privilege amplification. In ARC deployments, a leaked runner or controller secret can be reused to register malicious runners, access job execution paths, or pivot into repository-linked automation. The threat is attractive because the secret is often sufficient for trust, and trust is what the attacker needs.
Failure mechanism: The weak point is usually secret sprawl, overlong token validity, or excessive controller permissions. Once a token is copied into a repo, ticket, log, or shared config path, it can be replayed until rotation or revocation happens, and the attacker can abuse the same automation trust that legitimate runners depend on.
Impact: The result can be unauthorized runner registration, job interception, pipeline tampering, or broader access to systems that trust the CI execution layer. In the worst case, one exposed secret becomes a durable control-plane compromise rather than a single isolated leak.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 address the attack and risk surface, while CIS Controls v8 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP Non-Human Identity Top 10 | NHI-01 — Secrets and Credential Management | ARC runner tokens are non-human credentials that must be stored and rotated safely. |
| NHI-03 — Overprivileged NHIs | Controller and runner permissions can become excessive if not separated. | |
| Recommendation — Store runner tokens in sealed secrets and rotate them on a strict schedule. Restrict controller and runner permissions to the minimum required for registration and execution. | ||
| CIS Controls v8 | 6 — Access Control Management | ARC secret exposure is reduced by limiting who can access tokens and repo paths. |
| Recommendation — Limit access to runner secrets and remove unnecessary repository and pipeline read paths. | ||
| NIST CSF 2.0 | PR.AA — Identity Management, Authentication, and Access Control | ARC deployments depend on controlling who and what can authenticate into automation flows. |
| Recommendation — Enforce least-privilege authentication paths for controller and runner identities. | ||
Practitioner Guidance
What to prioritise: Treat the runner registration secret as the highest-value object in the deployment, then verify where it can be read, copied, and rotated. If the same secret can reach code, CI variables, and controller configuration, the exposure path is already too wide.
Decision rule: If a token can authenticate outside the narrowest intended runner registration flow, shorten its lifetime or replace it with a more bounded secret before expanding the deployment. If rotation is hard, the design is already too dependent on that credential.
What good looks like: The controller and runners have clearly separated permissions, secrets are not stored in plain repository files, and every credential has an owner, a rotation trigger, and a revocation path. The best sign of control is not zero secrets in use, but minimal secret persistence and predictable renewal.
Practitioner takeaway: ARC secrets should be managed as short-lived trust anchors, not reusable deployment conveniences; once they spread across the delivery stack, the security problem becomes systemic rather than local.
Related resources from NHI Mgmt Group
- What do teams get wrong about managing container deployments with multiple orchestration and deployment tools?
- What do teams get wrong when they rely on secret scanning alone to manage exposed credentials?
- What do security teams get wrong about secrets in third-party code and integrations?
- What do teams get wrong about rotating NHI secrets after compromise?