When the secret leaks: the hour after exposure
What happens after a machine credential is exposed, reconstructed from the GitHub record of four 2024-25 supply-chain incidents (Ultralytics, reviewdog, tj-actions, Nx) and from the revocation machinery three platforms run in code and policy: PyPI's delete-then-notify receiver, AWS's quarantine deny-list, and GitHub's split between auto-revoking its own tokens and merely notifying partners.
A field guide to the race that starts when a token goes public: who is allowed to kill a credential automatically, how fast the machinery actually works, and why every incident in the corpus was reopened not by slow revocation but by a credential nobody had enumerated. A reader leaves with a decision tree for each credential class they issue, five failure classes with transferable rules, a rehearsal ladder that ends with revoking a production credential on purpose, and the GitHub-native archaeology method that produced the evidence.
Revocation, once aimed, worked in hours everywhere in the corpus; what reopened every incident was enumeration, the credential nobody listed, like the PyPI token that survived Ultralytics' fix and published two more poisoned versions that exist on the registry and nowhere in git.
What you get out of it
- Platform responses to the same event diverge by revocation blast radius: PyPI deletes the token before emailing, AWS fences a live key behind a 98-action deny list, GitHub auto-kills its own tokens but lets partners decide about theirs.
- CI log masking is literal string matching (documented by the runner maintainer in a 2020 issue that is still open), which is why double-base64 output walked every secret past it in March 2025.
- SHA pinning was defeated three ways in one week: tags rewritten retroactively, a transitive unpinned inner action, and Renovate updating careful repos onto the attacker's hash.
- The strongest recorded fix is credential abolition, not rotation: Nx moved to trusted publishing so no npm token exists to steal; Kubernetes needed five years and two KEPs to do the same for one token class.
- Response automation without an incident mode joins the attack: two projects' bots answered breach reports with marketing and with advice to install the compromised version.
Scope
Why this, now. Between December 2024 and August 2025 four major CI supply-chain compromises left their complete primary records on GitHub, and the platforms' automated responses (trusted publishing, quarantine V3 updates, validity checks) all shifted within the same window.
What it does not cover. Human-credential attacks (phishing, session theft), vault product internals, and the 2022-23 SaaS credential-theft postmortems (Heroku, CircleCI, Cloudflare), which were unreachable from this session's network and are named in the page as an evidence gap.
Other field guides
The leak goes around the tenant filter, not through it
A field guide to tenant isolation built from seven published cross-tenant incidents (Steam 2015, Cloudbleed 2017, GitHub 2021, ChaosDB 2021, AutoWarp…
27 sources · 25 organisations · 5 postmortemsThe breach is a missing check. The outage is the checker.
Reconstructs the authorization layer from the accounts of Google, Airbnb, Carta, Netflix, Figma, Slack and Gojek: relationship tuples, precomputed in…
26 sources · 24 organisations · 5 postmortemsTrusting the build pipeline
A CI job holds every credential you own and, on a public repo, runs code proposed by strangers. This guide reconstructs seven incidents (Codecov, Cir…
22 sources · 20 organisations · 7 postmortems