SC-CRED-HYGIENE-CICDSEC6-2023
CI/CD · Insufficient CI credential hygiene
Summary
Insufficient credential hygiene is the class in which long-lived, broadly-scoped secrets such as cloud access keys, registry tokens, and signing keys are stored as static CI variables, so any pipeline compromise (or any poisoned-pipeline, OIDC, or cache attack) yields durable, high-blast-radius credentials. The root mechanism is that static secrets do not expire, are often shared across projects, and grant standing access far beyond a single build, so theft of the CI platform's secret store or of a single workflow's environment converts a transient foothold into persistent access to production cloud and registry accounts. The CircleCI breach of January 2023 is the canonical illustration: malware on an engineer's laptop stole a valid 2FA-backed SSO session, letting attackers exfiltrate customers' environment variables, API tokens, and SSH keys, and CircleCI had to invalidate project tokens and instruct every customer to rotate all stored secrets, a platform-wide rotation that demonstrated the systemic cost of static-credential dependence. OWASP catalogues this as CICD-SEC-6 and recommends short-lived OIDC tokens and least privilege as the structural fix.
How to avoid it in your code
- Replace static cloud/registry secrets with short-lived OIDC-federated tokens scoped per workflow.
- Apply least privilege and condition-bind credentials to a single repo, environment, and identity.
- Rotate any remaining static secrets on a schedule and immediately on suspected platform compromise.
- Scan code, logs, and history for hardcoded secrets; block plaintext secrets in pipeline output.
- Inventory and revoke stale, unused, or over-shared credentials across the CI/CD estate.
References
Related vulnerabilities
All Supply chain →- HIGHGHSA-5CJ2-3JR2-5H77
OpenClaw: Shell positional parameters could weaken strict inline-eval checks
- MEDIUMGHSA-2F86-9CP8-6HCF
Grav: Admin Backup Zip File Exposes Account Credentials and Configuration Secrets
- MEDIUMGHSA-4R4W-2WGP-W7CJ
Open WebUI Prompt history IDOR: unbound history_id allows cross-prompt read and deletion
- HIGHGHSA-VJQM-6GCC-62CR
Open WebUI: Forged model meta.knowledge allows cross-user file read and deletion
- HIGHGHSA-VRHC-3FR6-PC3C
Open WebUI: Forged chat-file link allows cross-user file read and deletion
- MEDIUMGHSA-3G6V-2R68-PRFC
Traefik: Kubernetes Gateway crossProviderNamespaces bypass allows HTTPRoute outside the allowlist to expose internal Traefik services