sota-secrets-management — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sota-secrets-management (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Eliminate static secrets where possible; where not possible, make every secret short-lived, narrowly scoped, runtime-injected, auditable, and rotatable without downtime. This skill covers the full lifecycle (generation → distribution → storage → use → rotation → revocation → expiry), storage backends, application handling patterns, leak detection, incident remediation, and per-credential-type rules. It serves two workflows: BUILD (write correct secrets handling into new or existing code) and AUDIT (sweep a repo for secret issues and report findings).
The hierarchy of preference, always:
When you write or review code, push the design as far up this hierarchy as the platform allows, and document why if you stop below level 2.
Use when implementing anything that consumes or manages a credential.
rules — read rules/05-credential-types.md for the matching section before writing code.
(OIDC, IAM roles, SPIFFE) — see rules/01-lifecycle-and-workload-identity.md. Only fall back to a stored secret when no federation path exists (e.g., third-party SaaS API key).
rules/02-storage-backends.md. Never invent a custom encrypted store.
SDK with caching/TTL, never baked into images or code. Patterns and good/bad pairs in rules/03-application-patterns.md.
works with zero downtime (dual-secret / kid overlap), an expiry or rotation interval, and a revocation path. If you cannot answer "how do we rotate this at 3am during an incident," the design is not done.
.gitignore entries for.env* and key files, log-scrubbing for the new secret's shape (rules/04-detection-and-remediation.md).
Use when asked to find secret leaks/misuse in an existing repo.
gitleaks detect --source . --redact and/ortrufflehog filesystem . (and git log history scan when the repo has history). Treat tool output as candidates, not verdicts — verify each hit.
AKIA, ASIA, ghp_, gho_, github_pat_,xoxb-, xoxp-, sk-, sk_live_, rk_live_, AIza, ya29., glpat-, npm_, dop_v1_, shpat_, eyJhbGciOi (inline JWTs), -----BEGIN .* PRIVATE KEY-----.
(password|passwd|pwd|secret|token|api[_-]?key|auth)\s*[:=]\s*['"][^'"]{6,}.://[^/:@\s]+:[^@\s]+@ (postgres, mysql, mongodb,amqp, redis URLs).
.env* tracked in git, *.pem, *.p12, *.pfx, *.key, *.jks, *.keystore,id_rsa*, credentials.json, serviceaccount*.json, kubeconfig, .npmrc/.pypirc with tokens, terraform.tfstate (state files contain plaintext secrets).
git log -p / gitleaks detect --log-opts for secrets removed from HEADbut live in history. A secret deleted in a later commit is still leaked — severity is unchanged.
exception payloads, crash/telemetry dumps, URLs/query strings, CLI args (visible in ps), Dockerfile ENV/ARG, docker-compose environment: literals, Kubernetes manifests with stringData/base64 secrets committed, CI YAML with inline values, debug endpoints dumping config, world-readable key files, missing rotation/expiry on long-lived tokens, overly broad token scopes.
is it currently valid, what blast radius. Never call a credential live by invoking it against production without explicit permission; judge from context.
| Severity | Definition | Examples |
|---|---|---|
| Critical | Valid (or must-assume-valid) secret exposed to anyone with repo/log access | Live cloud key in code or git history; DB password in a public image; private signing key committed |
| High | Secret exposed in a narrower channel, or handling that will leak under normal operation | Secret logged at info level; cred in CLI args; .env with real values tracked in private repo; token in URL; tfstate with secrets in VCS |
| Medium | Weak lifecycle or weak protection of an otherwise contained secret | No rotation for years; long-lived token where OIDC is available; overly broad scope; secret in env var where platform supports file mounts; world-readable key file; weak generation (low entropy) |
| Low | Hygiene gaps with no current exposure | Missing pre-commit/CI scanning; .env.example containing realistic-looking values; no .gitignore for key files; missing audit logging on secret access |
Confirmed-fake placeholders (changeme, xxx, <YOUR_KEY>, obvious test fixtures) are not findings, but note them as Low if they are realistic enough to mask real leaks in scans.
Report every finding as:
[SEVERITY] path/to/file.py:123 — RULE-ID short title
Evidence: the offending line, with the secret value REDACTED (show prefix + length only)
Why: one sentence of impact
Fix: concrete remediation (rotate first, then remove; target pattern to adopt)Order findings Critical → Low. End the audit with: counts per severity, whether git history is affected (if so, remediation must include rotation + history purge per rules/04-detection-and-remediation.md), and the top 3 systemic fixes. Never reproduce a discovered secret in full in your report — redact to first 4 chars + length.
| File | Read this when... |
|---|---|
rules/01-lifecycle-and-workload-identity.md | Generating secrets (entropy/length), setting rotation/expiry/revocation policy, replacing static secrets with OIDC federation, SPIFFE/SPIRE, cloud IAM roles, GitHub Actions OIDC |
rules/02-storage-backends.md | Choosing where a secret lives: Vault/OpenBao, AWS/GCP/Azure secret managers, SOPS+age, sealed-secrets/external-secrets in Kubernetes, env vars vs file mounts, in-memory handling and zeroization |
rules/03-application-patterns.md | Writing app code that consumes secrets: config layering, runtime injection, caching/TTL, keeping secrets out of code/VCS/logs/errors/URLs/argv/crash dumps, per-env separation, least-privilege scoping, access audit logging |
rules/04-detection-and-remediation.md | Setting up gitleaks/trufflehog, pre-commit hooks, CI gates; responding to a leak (rotate-first, purge history, assume compromised); honeytokens; running an AUDIT sweep |
rules/05-credential-types.md | Handling a specific credential class: DB creds, API keys, signing keys, TLS private keys, SSH keys, JWT secrets and kid rotation, data keys vs KMS envelope encryption, .env discipline |
theater — assume every secret that ever touched git, logs, or a ticket is compromised.
services, example files with live values, and committed .env files.
a static credential (CI→cloud, service→cloud, pod→service), use it. Static keys for cloud access from CI are a defect, not a choice.
procedure** (dual-secret overlap, JWT kid, DB dual users). Unrotatable = misdesigned.
before encoding); never derive from timestamps, UUIDv4-as-secret, or human-chosen strings.
query strings, CLI arguments, ps output, Dockerfile layers, image env, shell history, or telemetry. Scrub at the logger and wrap in redacting types.
secret-free; the platform (orchestrator, secret-manager SDK, CSI driver) supplies values when the process starts — file mounts preferred over env vars where supported.
environment, scoped to the minimum actions/resources; dev/staging/prod never share secrets and prod values are unreadable from non-prod.
wrap the data key with a KMS key); never hardcode or hand-manage raw encryption keys.
machine, a blocking CI gate, and periodic full-history scans. Detection without a leak runbook is incomplete — keep the rotate→revoke→purge→monitor runbook current.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.