What it catches
| Provider / type | Examples |
|---|---|
| AWS | Access key (AKIA…), secret access key, session token |
| GCP | Service-account JSON key (full file embedded), API keys |
| Azure | Storage account keys, client secrets, SAS tokens |
| GitHub / GitLab | PATs, OAuth tokens, app installation tokens |
| Slack | Bot tokens (xoxb-), webhook URLs |
| Stripe | Live (sk_live_) + test (sk_test_) secret keys |
| DB connection strings | PostgreSQL, MySQL, MongoDB, Redis, Snowflake |
| Private keys | RSA, OpenSSH, PGP, OpenSSL |
| JWT tokens | When the payload looks operational, not a test fixture |
| Generic high-entropy strings | Catches custom-format secrets we don’t have a pattern for |
How findings are produced
- Pattern match — regex against known credential formats (e.g.
AKIA[0-9A-Z]{16}for an AWS access key). - Entropy — Shannon entropy on the matched string; a very high-entropy value escalates the finding’s severity.
- Liveness verification — for supported issuers (GitHub, GitLab, Slack, Stripe, npm), TigerGate makes a single read-only identity call to confirm whether the credential is still active. The check runs at scan time and the secret value is never persisted — only the verdict (active / inactive / unknown). A confirmed-active secret is a true positive.
CRITICAL— cloud provider keys (AWS / GCP / Azure), private keys, database credentials, Stripe secret keysHIGH— API tokens, generic API keys, passwords, and very-high-entropy stringsMEDIUM— everything else
Suppressing false positives
Test files are full of fake-but-realistic keys. To suppress a match, open the finding in the dashboard, set its status to Muted or Accepted, and add a note. To skip whole paths (e.g. test fixtures) at scan time, use--exclude.
Running in CI
Secrets scanning runs on every CI scan —tigergate scan --type secrets, or as part of --type all — so a committed secret is caught on the pull request. Run the same scan as a local pre-commit step to block secrets before they reach git history.
What to do if a secret leaks
Treat rotation, not redaction, as the fix — a secret that was ever public is permanently compromised.- Revoke and rotate the credential at its provider.
- Audit the provider’s access log for unauthorized use.
- Purge from history if you want the value gone from old commits (e.g. with
git filter-repo). Rotate first — purging alone does not make a leaked secret safe.