brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
security-auditStructured, adversarial, multi-phase security audit of a codebase — recon → coverage-led hunting → finder≠validator validation → machine-readable findings → target-neutral report
Independent GitHub snapshot · Automated classification · Original documentation governs
security; for a quick branch review use /security-review.
user-invocable: true
allowed-tools: [Read, Glob, Grep, Bash, Task]
effort: highA full audit, not a checklist. It runs in phases, keeps a coverage ledger so
nothing is skipped silently, and — the core discipline — the agent that finds a
candidate is never the one that confirms it. Severity is likelihood × impact,
not deviation from a style rule. Output is machine-readable and reproducible.
Methodology inspired by Cloudflare's public security-audit-skill, rebuilt to reuse maggy's own pieces:
council-reviewfor adversarial validation,cpg-analysis(Joern/CodeQL) for static taint/data-flow,agent-teams/polyphonyfor isolated parallel hunters, andsecurityfor the vuln classes.
confirmed only when you can name the
file:line of the boundary that fails and a concrete attack that crosses it.council-review model) tries to disprove it.likelihood × impact, not "differs from best
practice". A hardcoded key in a test fixture is not critical; an auth bypass on
a tenant boundary is.architecture.md + coverage-ledger.jsonMap the target before hunting. Identify: entry points (HTTP routes, CLI, queue
consumers, webhooks), trust boundaries (authn/authz, tenant isolation, privilege
transitions), input surfaces (params, headers, files, env, deserialization),
secret handling, external calls (SSRF surface), and data stores. Write a short
architecture.md, then enumerate every surface as a unit in
coverage-ledger.json ({id, surface, boundary, status: pending}).
For each ledger unit, hunt the relevant classes. Prefer isolated sub-agents
(via agent-teams / polyphony) so one hunter's context does not bias another,
and lean on cpg-analysis for data-flow/taint where a graph beats grep. Mark each
unit hunted; a coverage critic pass re-reads the ledger and reopens units
that were skimmed. Classes to cover (depth in security + cpg-analysis):
| Class | Look for |
|---|---|
| Injection | SQL/NoSQL/OS/LDAP/template; unparameterized queries, shell=True, eval |
| AuthN / AuthZ | missing checks, IDOR, broken tenant isolation, JWT/session flaws |
| Secrets | keys in code/history/logs, client-exposed VITE_/NEXT_PUBLIC_ secrets |
| SSRF / egress | user-controlled URLs, metadata endpoints, unvalidated redirects |
| Deserialization | pickle/yaml.load/Marshal on untrusted input |
| Path / file | traversal, arbitrary write, zip-slip, unsafe temp files |
| LLM / prompt | prompt injection, tool-abuse, unbounded fan-out, data exfil via output |
| Supply chain | typosquats, unpinned deps, postinstall scripts, CI token scope |
| Cloud / IaC | over-broad IAM, public buckets, exposed admin, secrets in env |
| Client-side | XSS, DOM sinks, CSP gaps, sensitive data in localStorage |
| Resource / DoS | unbounded loops/allocations, regex catastrophic backtracking |
| Data isolation | cross-tenant reads, missing RLS, PII in logs/caches |
| Memory (native) | overflow, UAF, integer wrap (for C/C++/unsafe Rust targets) |
For each unique candidate, a different reviewer attempts to disprove it:
is the tainted input actually reachable? is there a guard upstream? is the sink
real? Route this through council-review (multiple models vote) for anything
rated high/critical. Assign a verdict: confirmed, needs_validation, or
rejected.
findings.jsonEmit findings.json conforming to report-schema.json (shipped in this skill).
Validate it before reporting:
python3 "$(cat ~/.claude/.bootstrap-dir)/skills/security-audit/validate_findings.py" findings.json
The validator enforces the rules that keep the audit honest: unique ids, valid
enums, and that every confirmed finding has a file:line location, an attack
scenario, and a validated_by that differs from found_by.
A fresh agent re-opens each confirmed finding and checks the cited file:line
still supports the claim (code may have moved). A material mismatch drops it
back to needs_validation.
REPORT.mdWrite REPORT.md (executive summary + confirmed findings by severity),
FINDINGS-DETAIL.md (per-finding evidence + remediation), and
NEEDS-VALIDATION.md (candidates that could not be confirmed). Neutral tone: no
vendor names, no editorializing, just boundary → attack → impact → fix.
cpg-analysis.base Definition of Done for security-critical changes as the
"prove it's safe" gate, above the preventive security skill.council-review (adversarial validation), cpg-analysis (static taint),
agent-teams / polyphony (isolated parallel hunters).