Skip to content
Back to skills

Plan Security Audit

ASecurity

Plan-only OWASP Top 10 and Supabase-first hardening burndown. Use when "security audit plan", "OWASP audit", "hardening plan", or "security burndown". Auth flows → audit-auth-flows. RLS → plan-rls-audit. Keys → plan-secrets-audit.

  • 9 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 11, 2026
ai-agentsgosqlrailstestinggitapidatabasefrontendbackendsecurity

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 24, 2026

npx -y skills add kensaurus/cursor-kenji --skill plan-security-audit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Plan Security Audit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Plan Security Audit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kensaurus-plan-security-audit/badge)](https://www.skillsdirectory.com/skills/kensaurus-plan-security-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: plan-security-audit
description: >
  Plan-only OWASP Top 10 and Supabase-first hardening burndown. Use when
  "security audit plan", "OWASP audit", "hardening plan", or "security
  burndown". Auth flows → audit-auth-flows. RLS → plan-rls-audit. Keys →
  plan-secrets-audit.
license: MIT
effort: high
---

# Security Audit + Hardening Plan

**Degree of freedom: MIXED** — OWASP mapping and severity are judgment; RLS
enumeration, secret scan, and `npm audit` run exactly. Stay **plan-only**.
No patches or destructive testing.

**Role:** Senior application security engineer.

**Task:** Exhaustive vulnerability audit (frontend, backend, auth, Supabase, deps, secrets),
mapped to OWASP Top 10, then remediation plan. **Audit & plan only — no code changes, no
destructive testing.**

## This skill vs neighbors

| Skill | Does |
|-------|------|
| **plan-security-audit** (this) | Plan with OWASP + Supabase-first burndown |
| `audit-security` | Static security review (may fix) |
| `test-red-team` | Adversarial runtime testing |
| `audit-db-schema` | Schema health including RLS review |

**Loop:** see `docs/PLAN-LOOPS.md` — after `plan-test-coverage`, parallel with `plan-perf-audit`, before `plan-docs-sync`

## How to reason (every plan item)

1. **Propose** — RLS, secret rotation, auth enforcement, dep bump, or header/CSP
2. **Risk** — data exposure, auth bypass, or a leaked key that bypasses RLS
3. **Keep-working** — controls that already enforce server-side
4. **Phase** — Critical → High → Med-Low (do not execute)

## Worked example

> **Propose:** enable RLS on `public.orders`; rotate the `service_role` found in the client bundle; add `getUser()` on `/api/orders`.
> **Risk:** anon key + RLS-off = full table dump; `service_role` in the bundle bypasses every policy.
> **Keep-working:** `/dashboard` layout already calls `getUser()` on the server.
> **Phase:** Critical — RLS + secret rotation first.
> **Report:** `lib/supabase.ts:12` service_role (type only — never the value). Table RLS detail → `plan-rls-audit`.

---

## ⛔ Preservation Contract

Read `references/preservation-contract.md`. Acknowledge in output #1.

**Safety guardrails:**

- No destructive/live exploit testing
- Never paste found secret values — location + type, flag for rotation

---

## References

| File | Contents |
|------|----------|
| `references/owasp-supabase-scope.md` | OWASP map, RLS-first methodology, scans |
| `references/output-templates.md` | Burndown, phased hardening, secrets list |

---

## Phase flow

```
1. Stack fingerprint
2. RLS-first pass (Supabase MCP if available)
3. Bundle/secret scan (no value echo)
4. Auth-path trace
5. Dependency CVE scan
6. OWASP remainder (injection, headers, misconfig)
7. Burndown + phased hardening plan
8. Guardrails + research citations
```

Sentry MCP: security-related production errors. Firecrawl: current OWASP + Supabase patterns.

Delegate a scan pass to a subagent only when it is sizeable, independent of the others, and its raw output (audit dumps, grep results) has no place in the plan; brief it with the exact commands and the columns to return, and it inherits this pass's rules — it edits nothing and never pastes a secret value. Long sweeps are expected — context compaction exists, so finish the inventory rather than wrapping up early.

---

## Phase 2 — RLS-first (Supabase)  [LOW freedom — run exactly]

Enumerate every `public` table:

- RLS enabled?
- Policies scope rows correctly?
- `WITH CHECK` on writes?
- Realtime respects SELECT policies?

**#1 critical class:** table without RLS + anon key in client = full data exposure.

Detail: `references/owasp-supabase-scope.md`

---

## Phase 3 — Bundle/secret scan  [LOW freedom — run exactly]

Inspect client bundle + source for:

- `service_role` key (Critical — full RLS bypass)
- Hardcoded API keys, DSNs
- `.env` committed / not gitignored
- Secrets in git history → **rotate** (history is forever)

Report: `file:line` + type only — **never the value**.

---

## Phase 4–6 — Auth, deps, OWASP  [HIGH freedom]

- Every protected route/endpoint → server-side enforcement?
- `npm audit`, lockfile versions vs CVE databases — every CVE ID cited comes from scan output or an advisory lookup, never from memory
- XSS, SQLi, SSRF, headers/CSP, rate limits

Map each finding to OWASP category.

---

## Burndown + hardening plan  [HIGH freedom — plan only]

Template: `references/output-templates.md`

Phases: Critical → High → Med/Low. Each remediation + "what must keep working".

Re-scan proposed after fixes (second pass).

## Self-critique before the burndown  [LOW freedom — do not skip]

1. **evidenced-not-assumed** — every finding cites file:line or scan output; unconfirmed → `[NEEDS VERIFICATION]`
2. **plan-only** — no patches, no live/destructive exploit testing
3. **severity/phase justified** — RLS-off + anon key and client `service_role` are Critical
4. **right-owner** — table-by-table RLS → `plan-rls-audit`; key rotation → `plan-secrets-audit`; app-layer auth flows → `audit-auth-flows`; LLM attacks → `audit-llm-security`
5. **no-false-safety** — never paste secret values; never fabricate CVEs; confirmed vuln ≠ hardening suggestion

---

## Required output (in order)

1. Preservation-contract acknowledgment
2. Stack fingerprint + scope
3. Per-area finding inventory
4. Burndown table (OWASP + evidence + severity)
5. Hardening + enhancement plan, phased
6. Guardrails/tooling (SCA CI, secrets manager, RLS tests)
7. Research notes + citations
8. Open questions / `[NEEDS VERIFICATION]` + secrets-to-rotate (locations only)

End the turn with a standalone recap in chat: the two or three highest-impact confirmed findings (locations only for secrets) and the first phase to approve. The plan is the deliverable — write it before the recap.

---

## Rules

- Plan only — no patches, no live/destructive testing.
- Every finding cites real evidence. Unconfirmed → `[NEEDS VERIFICATION]`.
- Never paste secret values.
- Never fabricate CVEs or exploits.
- Separate confirmed vulnerability vs hardening recommendation.

Files in this skill

  • SKILL.md5.4 KB
  • references/output-templates.md930 B
  • references/owasp-supabase-scope.md2.2 KB
  • references/preservation-contract.md751 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…