Skip to content
Interactive checklist

GitHub CI Secret-Hardening Checklist

The fastest path from “someone can push a branch” to “someone stole our production secrets” runs through CI. Work the eight controls that stop secret exfiltration in GitHub Actions — least-privilege tokens, OIDC, environment protection, scoped secrets, no secret echo, SHA-pinned actions, reviewed workflows and an egress allowlist. Tap each to mark it in place, partial or not done, watch your coverage score, and export the result.

0
Hardening coverage — 0/8 fully in place

Why this matters

In the October 2026 LiteLLM compromise, the attacker did not break CI — they used it. With a write token, they pushed throwaway workflows that read maintainer secrets and POSTed them to an external collector, then repointed the release and approved its gate with stolen tokens. Every item on this checklist is a lever that would have turned that into a blocked connection, an unreadable secret, or a change that never ran without review. CI secret hygiene is not paperwork; it is the difference between a stolen branch and a stolen release.

Educational — not affiliated with GitHub, GitLab or any vendor. A self-assessment, not an audit. Runs entirely in your browser: nothing is uploaded and no scan is performed.

TL;DR

What this checklist covers

  • A scored checklist of the GitHub Actions controls that stop a workflow from leaking the secrets it can reach — least-privilege GITHUB_TOKEN, OIDC federation instead of long-lived secrets, environment protection with required reviewers, and pinned actions.
  • Mark each control enforced, partial or not set for a weighted 0–100 coverage score, a per-area breakdown, and a prioritised list of the gaps that matter most.
  • Each control that would have broken the LiteLLM-style "throwaway CI workflow exfiltrates secrets" step is flagged, so you can see what the incident would have hit.
  • Copy or download the result. Everything runs in your browser — no repo connected, no data sent.

Why this matters

In the publicly reported October 2026 LiteLLM compromise, a step that did real damage was a throwaway CI workflow that exfiltrated maintainer secrets. That step only works when a workflow can reach long-lived credentials and send them out. Every control on this list narrows that surface: least-privilege tokens limit what a stolen workflow can do, OIDC removes the standing secret entirely, environment protection puts a human between a job and a sensitive deploy, and pinned actions stop an updated third-party action from running new code with your secrets.

None of these are exotic — they are configuration. This is an educational checklist that references a real, publicly reported incident for context; PlayCISO is not affiliated with LiteLLM or GitHub.

Frequently asked questions

How does a CI workflow leak secrets?

A workflow that can read a secret can also send it anywhere it has network access — print it to a log, POST it to an attacker server, or write it into an artifact. The common failure modes are a default write-all GITHUB_TOKEN, long-lived cloud credentials stored as repo secrets, secrets exposed to workflows triggered by untrusted forks, and unpinned third-party actions that run arbitrary code with access to the job environment. Hardening is about shrinking what each workflow can reach and reauthorising nothing automatically.

What is OIDC trusted publishing and why is it safer?

Instead of storing a long-lived cloud or registry credential as a GitHub secret, OIDC lets the workflow exchange a short-lived, request-scoped token with the provider (AWS, GCP, Azure, PyPI, npm) at run time, tied to the specific repository and workflow. There is no standing secret to steal: the token lives for minutes and only works from the workflow it was issued to. It removes the single most valuable thing an attacker gets from a CI compromise.

Should GITHUB_TOKEN be write-all?

No. Set the default to contents: read at the repository or organisation level and grant only the specific write permissions a given job needs, in that job. A write-all token is what lets a compromised workflow push code, cut releases or change settings. Least privilege here is a one-line permissions block with an outsized payoff.

Does this tool connect to my GitHub repo?

No. It is a static, in-browser checklist. You answer which controls are in place and it computes a score and gap list locally. Nothing is uploaded and no repository is accessed.

This tool is free and always will be. Would a Pro workspace — saved designs, team sharing and exports — be worth paying for?

Show me Pro →No account needed to use this tool — this just tells us whether Pro is worth building out.
Educational — not affiliated with GitHub.
🎉 New here? Use code WELCOME10 for 10% off any plan at checkout
GitHub CI Secret Hardening Checklist — Stop Workflows Leaking Secrets · PlayCISO