Documentation Index
Fetch the complete documentation index at: https://docs.pipefort.com/llms.txt
Use this file to discover all available pages before exploring further.
| Field | Value |
|---|---|
| Category | CICD-SEC-6 |
| Severity | HIGH |
| OWASP | CICD-SEC-6: Insufficient Credential Hygiene |
| Auto-fix | partial (what it does) |
What the check does
Two detection paths: 1. Suspiciousenv: keys with literal values. Any environment variable whose name contains one of token, password, secret, key, webhook, passwd, credential and whose value is a literal (not ${{ secrets.* }} / ${{ ... }}). Checked at workflow, job, and step scope.
2. Pattern-matched literals in run: scripts. Regex matches for:
| Pattern | Example |
|---|---|
| GitHub PAT | ghp_[A-Za-z0-9]{36} |
| Slack bot token | xoxb-... |
| AWS access key | AKIA[0-9A-Z]{16} |
Generic var := "..." | token := "abcdef1234567890abcdef" |
Why it matters
Hardcoded credentials end up in git history, build logs, action audit logs, and anywhere the workflow file gets mirrored. Rotating them after a leak is painful; preventing the leak is cheaper.Vulnerable examples
Env var with literal:Safe alternative
Store the value in GitHub Secrets (or org/environment secrets) and reference it via expression:Auto-fix
--fix rewrites the env-var case only. The literal value is replaced with ${{ secrets.<KEY_UPPER> }} — e.g. API_TOKEN: "ghp_..." becomes API_TOKEN: ${{ secrets.API_TOKEN }}. You still need to create the matching secret in GitHub.