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-2 |
| Severity | MEDIUM |
| OWASP | CICD-SEC-2: Inadequate Identity and Access Management |
| Auto-fix | ✗ |
What the check does
Flags any workflow that authenticates with a secret whose name implies a long-lived personal access token. The check walks everyenv: block (workflow, job, step) and every step with: input, looking for ${{ secrets.NAME }} references where NAME matches any of:
*_PATorPAT_**_PERSONAL_ACCESS_TOKEN(any casing or separator)*_GH_TOKEN/*_GH_PAT/*_GITHUB_PAT
GITHUB_TOKEN is not flagged — that’s the short-lived per-run token GitHub mints automatically, which is the recommended replacement.
Why it matters
A PAT is a static credential bound to a single human account. It:- Survives employee turnover (until someone notices and revokes it manually).
- Carries the user’s full set of repo permissions, not the workflow’s least-privilege scope.
- Is difficult to rotate — every workflow that references it must be updated together.
- Bypasses GitHub App / organisation governance because it acts as the user.
Vulnerable example
Safe alternatives
Use the per-run GITHUB_TOKEN with explicit permissions:aws-actions/configure-aws-credentials, google-github-actions/auth, and azure/login all accept the workflow’s OIDC token in place of a long-lived access key.