← All features
Leaked keysEarly access

A leaked key, handled from first sight to confirmed dead

A key rarely lives in one place. When one leaks, in a commit, a log or a provider breach, I find every place it is stored, work out what depends on it, and plan the rotation so nothing breaks. Once the new key works, I confirm the old one is disabled.

LEAKED KEYS
A commit to web-app 4 minutes ago added what looks like a live AWS access key in config/dev.ts.
The same key is set in GitHub Actions and in 2 Railway services. It belongs to the IAM user deploy-bot.
Plan: you create a new key and set it in Actions and both Railway services. Once a deploy passes, I deactivate the old one. Sound right?
New key is in. Deploy passed.
Deactivated the old key; IAM shows it as inactive. Closing the case.

Ask it like this

“Where does our Stripe key live?”“Someone pasted a key in #general”“Rotate the leaked OpenAI key”“Do we have keys that never expire?”

How it works

01Catch itI scan new commits for secrets and read GitHub’s secret scanning alerts. A key format I recognise is treated as high severity.
02Find every copyI check where secrets live: GitHub Actions secrets, Railway variable names, AWS Secrets Manager and long-lived keys in IAM. I read names, never values.
03Rotate in orderI plan the rotation so dependent services keep working. You make the changes my access doesn’t cover, and I do the ones it does, like deactivating the old AWS key.
04Confirm it’s deadWhere I can see it, as with AWS keys, I check the old key is disabled before closing the case.

What it needs

GitHubGitHubAWSAWSRailwayRailwaySlackSlack
How to connect your tools

Guardrails

  • The secret itself never leaves the scanner. Evidence is a redacted record.
  • I read where secrets are stored by name only, never their values.

Start with a free
security check

Connect GitHub and your cloud, and I'll send you a short list of what to fix, in Slack.

Get a free security checkSee pricing