plan-secrets-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited plan-secrets-audit (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.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.
Role: Senior security engineer (credential exposure + key scoping).
Task: Scan working tree and git history, classify each credential (rotate vs relocate), score by scope and permanence, emit plan-secrets-audit.md. Audit & plan only — no rotation, scrubbing, or env edits until each phase is approved.
Find every leaked key. Decide rotate vs relocate. Change nothing until approved.
Moltbook's breach started with a hardcoded Supabase key in client JavaScript — combined with RLS off, the public key became an admin backdoor. A secret committed even once lives in git history forever. Moving it to .env later does nothing; the only real fix is rotation.
Trigger phrases: "scan for secrets", "are my keys exposed", "did I commit an API key", "is my .env safe", "rotate keys", "about to open-source this", "pre-launch secret check".
Do not fire for: RLS policy correctness (plan-rls-audit), input/webhook validation (plan-input-validation). This skill owns credential exposure and key scoping specifically.
A grep finds strings. This skill adds the two judgments a grep can't: scope (is this key supposed to be client-side?) and permanence (is it in history, making relocation insufficient?).
Search outside .env* and server-only contexts for:
sk_, pk_, whsec_, service_role, eyJ..., AKIA, API_KEY,SECRET, TOKEN, long random blobs.
service_role.pk_), publicanalytics keys — note the protector dependency (RLS, Stripe design).
(sk_), webhook secret (whsec_), AWS secrets, DB URLs.
.env.example not committed with real values..gitignore & hygiene.env* ignored; no secrets in README, comments, test fixtures.plan-rls-audit.
plan-secrets-audit.md# Secrets & Key-Scope Audit — <repo>
_Audit-only. No key is rotated, moved, or scrubbed until each phase is approved._
## Scope
- Scanned: working tree ☐ git history ☐ deploy env (Vercel/AWS) ☐
- Assumptions / not inspected: …
## Verdict
| Severity | Count | Worst case |
|----------|-------|-----------|
| Critical | n | never-client secret exposed / in history |
| High | n | committed .env values, public-prefix leak |
| Medium | n | shared-env keys, hygiene |
## Findings
| # | Key type | Location | Scope bucket | In history? | Action | Sev |
|---|----------|----------|--------------|-------------|--------|-----|
| S1 | Supabase service_role | lib/admin.ts:4 | never-client | YES | ROTATE now | Crit |
| S2 | Stripe secret sk_ | api/pay.ts:2 | never-client | YES | ROTATE now | Crit |
| S3 | Supabase anon | client.ts:6 | safe-client | n/a | OK if RLS holds → plan-rls-audit | — |
| S4 | DB URL | .env.example | never-client | YES | ROTATE + remove from example | High |
## Phased burndown
- **Phase 1 — Rotate exposed never-client secrets** → dashboard rotation + Vercel/AWS env update (grace window)
- **Phase 2 — Relocate clean secrets** → move to env store, fix NEXT_PUBLIC_ leaks
- **Phase 3 — Hygiene** → .gitignore, remove committed examples, CI secret scanner
- **Phase 4 — (optional) Scrub history** → filter-repo/BFG, after rotation
## Execution handoff
Approve a phase to run it. Cross-hand safe-client keys to `plan-rls-audit`.
Add a pre-commit secret scanner (`create-hook`) so this can't regress.plan-rls-audit for anon-key safety.
audit-security.Plan with a strong model; execute with composer-2.5-execution.mdc riding along. Rotation is irreversible-ish — the plan says which keys; the rule constrains how and in what order.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.