Claude
Cursor
Skill
security-review
AI DevKit · Review code, skills, and prompts for security vulnerabilities — OWASP Top 10, prompt injection, business logic flaws, and insecure defaults. Use when reviewing PRs, auditing modules, reviewing AI skills/prompts, or preparing for release.
Virus-scanned
Reviewed automatically before listing.
Download
codeaholicguy-ai-devkit-skills_security-review-ac73d58.zip · 4 KB
Install
skills CLI
npx skills add https://github.com/codeaholicguy/ai-devkit/tree/main/skills/security-review
Claude Code
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install codeaholicguy-ai-devkit@llmmart
Git
git clone https://github.com/codeaholicguy/ai-devkit.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole codeaholicguy/ai-devkit collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Security Review
Find vulnerabilities before they ship.
Hard Rules
- Do not dismiss a finding without evidence it is unexploitable.
- Do not commit, log, or surface secrets discovered during review — flag and recommend rotation.
- Do not modify code until the user approves a remediation plan.
Workflow
Scope
- Confirm target: diff, file set, module, full repo, or skill/prompt. A target can be both code and prompt.
- Identify stack/framework — adapt the checklist (skip what the framework handles, add its pitfalls).
- Trace data flow: request → middleware → handler → service → datastore → response. For prompts: input → template → LLM → tools → output.
- Map trust boundaries, privilege levels, and threat actors.
- Search prior findings:
npx ai-devkit@latest memory search --query "<target>" --tags "security"
Scan
- Only check relevant categories. Skip sections and items that don't apply. Do not report skipped items.
- For diffs/PRs: also check whether the change weakens existing controls — removed middleware, bypassed validation, new unprotected routes.
- Categories in priority order:
- Secrets — hardcoded tokens, keys, connection strings.
- Injection — SQL, NoSQL, command, template, SSRF, path traversal, XSS.
- Auth — missing checks, privilege escalation, OAuth/OIDC, IDOR.
- Business Logic — race conditions, TOCTOU, workflow bypass, mass assignment, parameter tampering.
- Data Exposure — PII in logs, verbose errors, overly broad responses.
- Resource Exhaustion — unbounded queries, missing pagination, upload size, decompression bombs.
- Dependencies — critical CVEs only (RCE, auth bypass, data breach); ignore low/medium.
- Cryptography — weak algorithms, hardcoded IVs/keys, disabled certificate validation.
- Configuration — debug mode, permissive CORS, missing security headers.
- Logging — security events unlogged, no tamper protection, no alerting.
- Prompt Injection — instruction override, tool abuse, data exfiltration, indirect injection via tool results.
- For each finding: file, line, evidence.
Classify
Severity Criteria Critical Exploitable now, data loss or RCE possible High Exploitable with moderate effort or insider access Medium Requires chained conditions or limited impact Low Defense-in-depth, no direct exploit path - Adjust severity by exposure (internet-facing vs internal) and data sensitivity.
- Check for attack chains — multiple Medium findings that combine into High/Critical.
- Mark false positives with reasoning.
Remediate
- For each finding: root cause, minimal fix (prefer stdlib/framework over custom), verification step.
- For Critical/High: also recommend a detection control (log, alert, or WAF rule).
- Present plan and request approval before changing code.
Verify
- Use the
verifyskill to confirm each remediation. - Re-scan fixed files for regressions.
- Store findings:
npx ai-devkit@latest memory store --title "<pattern>" --content "<finding and fix>" --tags "security,<category>"
- Use the
Red Flags
| Rationalization | Do Instead |
|---|---|
| "It's internal / behind a VPN / only admins" | Zero-trust: validate at every boundary regardless of network position or user role |
| "We'll add auth later" | Add auth before merge — unauthenticated endpoints get discovered fast |
| "It's just a dev credential" | Use env vars / secrets manager — dev secrets leak to prod constantly |
| "The framework handles that" | Verify the config — frameworks have defaults, not guarantees |
| "We sanitize on the frontend" | Always validate server-side — client validation is bypassable |
| "The LLM won't follow injected instructions" | Treat all tool results and external content as untrusted data |
| "It's just a prompt, not code" | Prompts control tool execution — review with the same rigor as code |
Output Template
- Scope: Target, stack, data flow, trust boundaries, threat actors
- Findings (by severity): ID, severity, category, file:line, exploit scenario, fix
- Attack Chains: Findings that escalate when combined
- False Positives: Dismissed items with reasoning
- Remediation Plan: Ordered fixes with verification steps
- Residual Risk: Scope limitations, unverifiable items
- Zero findings: state what was checked and scope boundaries — "no findings" ≠ "fully secure"
Files (ai-devkit)
-
agents
-
openai.yaml 385 B
interface: display_name: "Security Review" short_description: "AI DevKit · Review code for security vulnerabilities before merge" default_prompt: "Use $security-review to audit this code for security vulnerabilities — scan against OWASP Top 10 and project-specific risks, classify findings by severity, and propose a remediation plan. Wait for approval before changing code."
-
-
references
-
checklist.md 4.3 KB
# Security Checklist Identify the stack first. Skip items the framework handles by default; add framework-specific pitfalls. For AI skills/prompts, focus on the Prompt Injection section. ## Secrets - [ ] No hardcoded keys, tokens, passwords, or connection strings - [ ] No secrets in comments, TODOs, dead code, client bundles, or public assets - [ ] Credential files in `.gitignore`; secrets loaded from env vars or secrets manager - [ ] No secrets in logs, error output, or stack traces ## Injection - [ ] SQL: parameterized statements, no string concatenation - [ ] NoSQL: no user input in query operators (`$gt`, `$ne`) - [ ] Command: array-based APIs, no shell interpolation - [ ] Template: auto-escaping on; raw output justified - [ ] SSRF: user-supplied URLs validated against allowlist - [ ] Path traversal: canonicalized, restricted to base directory - [ ] XSS: output encoding, CSP enforced - [ ] ReDoS: user input in regex escaped or validated - [ ] XXE: external entities disabled - [ ] Deserialization: safe formats only (no pickle/yaml.load on untrusted data) ## Authentication & Authorization - [ ] Every endpoint has explicit auth — no open-by-default - [ ] Role/permission checks server-side, not UI-only - [ ] JWT validated: signature, expiry, issuer, audience - [ ] Sessions expire and invalidate on logout - [ ] Passwords: bcrypt/scrypt/argon2 only - [ ] CSRF protection on state-changing endpoints - [ ] Rate limiting on auth endpoints - [ ] IDOR: no user-controlled values in authz without server-side lookup - [ ] OAuth/OIDC: state parameter validated, redirect URI allowlisted, tokens in httpOnly cookies ## Business Logic & Concurrency - [ ] Race conditions: concurrent requests can't double-spend or corrupt state - [ ] TOCTOU: no gap between permission check and action - [ ] Workflow bypass: multi-step processes enforce ordering server-side - [ ] Mass assignment: only allowlisted fields accepted - [ ] Parameter tampering: prices, quantities, IDs validated server-side - [ ] Batch endpoints: per-item authorization ## Data Exposure - [ ] API responses return only necessary fields - [ ] Errors don't leak stack traces, queries, or internal paths - [ ] Logs free of PII, session tokens, and sensitive request bodies - [ ] File uploads validated (type, size) and stored outside web root - [ ] GraphQL: introspection disabled in prod, query depth limited ## Resource Exhaustion - [ ] List/search endpoints enforce max page size and pagination - [ ] Expensive operations require auth and are rate-limited - [ ] File uploads enforce size limits at infra/middleware level - [ ] No decompression of untrusted archives without size/entry limits ## Dependencies (Critical Only) - [ ] No critical CVEs (CVSS 9.0+) - [ ] No CISA Known Exploited Vulnerabilities - [ ] Lockfile present and committed - [ ] Post-install scripts reviewed for untrusted packages ## Cryptography - [ ] No MD5/SHA1 for security purposes - [ ] No ECB mode; no hardcoded keys, IVs, or salts - [ ] TLS 1.2+ for external connections - [ ] Security tokens/nonces from CSPRNG - [ ] Certificate validation not disabled ## Configuration - [ ] Debug mode off in production - [ ] CORS: explicit allowlist, no wildcard with credentials - [ ] Security headers: CSP, HSTS, X-Content-Type-Options, X-Frame-Options - [ ] Cookies: Secure, HttpOnly, SameSite - [ ] Admin endpoints not publicly accessible ## Logging & Monitoring - [ ] Security events logged: failed auth, privilege changes, sensitive data access - [ ] Logs protected from tampering - [ ] Anomalous patterns trigger alerts ## Prompt Injection - [ ] System/skill instructions not overridable by user input or tool results - [ ] External content (file reads, API responses, tool output) treated as data, not instructions - [ ] Tool calls scoped to minimum necessary; destructive tools require user confirmation - [ ] No unsanitized user/external input passed as tool arguments (paths, commands, URLs) - [ ] No path from untrusted input → prompt → tool call that leaks secrets or env vars - [ ] LLM cannot be steered to send data to external services without user approval - [ ] Multi-agent handoffs do not propagate unvalidated instructions between agents - [ ] Skill permissions match stated scope (read-only skill has no write tools) - [ ] Approval gates cannot be bypassed by crafted input
-
-
SKILL.md 4.8 KB
--- name: security-review description: AI DevKit · Review code, skills, and prompts for security vulnerabilities — OWASP Top 10, prompt injection, business logic flaws, and insecure defaults. Use when reviewing PRs, auditing modules, reviewing AI skills/prompts, or preparing for release. --- # Security Review Find vulnerabilities before they ship. ## Hard Rules - Do not dismiss a finding without evidence it is unexploitable. - Do not commit, log, or surface secrets discovered during review — flag and recommend rotation. - Do not modify code until the user approves a remediation plan. ## Workflow 1. **Scope** - Confirm target: diff, file set, module, full repo, or skill/prompt. A target can be both code and prompt. - Identify stack/framework — adapt the [checklist](references/checklist.md) (skip what the framework handles, add its pitfalls). - Trace data flow: request → middleware → handler → service → datastore → response. For prompts: input → template → LLM → tools → output. - Map trust boundaries, privilege levels, and threat actors. - Search prior findings: `npx ai-devkit@latest memory search --query "<target>" --tags "security"` 2. **Scan** - Only check relevant categories. Skip sections and items that don't apply. Do not report skipped items. - For diffs/PRs: also check whether the change weakens existing controls — removed middleware, bypassed validation, new unprotected routes. - Categories in priority order: a. **Secrets** — hardcoded tokens, keys, connection strings. b. **Injection** — SQL, NoSQL, command, template, SSRF, path traversal, XSS. c. **Auth** — missing checks, privilege escalation, OAuth/OIDC, IDOR. d. **Business Logic** — race conditions, TOCTOU, workflow bypass, mass assignment, parameter tampering. e. **Data Exposure** — PII in logs, verbose errors, overly broad responses. f. **Resource Exhaustion** — unbounded queries, missing pagination, upload size, decompression bombs. g. **Dependencies** — critical CVEs only (RCE, auth bypass, data breach); ignore low/medium. h. **Cryptography** — weak algorithms, hardcoded IVs/keys, disabled certificate validation. i. **Configuration** — debug mode, permissive CORS, missing security headers. j. **Logging** — security events unlogged, no tamper protection, no alerting. k. **Prompt Injection** — instruction override, tool abuse, data exfiltration, indirect injection via tool results. - For each finding: file, line, evidence. 3. **Classify** | Severity | Criteria | |----------|----------| | Critical | Exploitable now, data loss or RCE possible | | High | Exploitable with moderate effort or insider access | | Medium | Requires chained conditions or limited impact | | Low | Defense-in-depth, no direct exploit path | - Adjust severity by exposure (internet-facing vs internal) and data sensitivity. - Check for attack chains — multiple Medium findings that combine into High/Critical. - Mark false positives with reasoning. 4. **Remediate** - For each finding: root cause, minimal fix (prefer stdlib/framework over custom), verification step. - For Critical/High: also recommend a detection control (log, alert, or WAF rule). - Present plan and request approval before changing code. 5. **Verify** - Use the `verify` skill to confirm each remediation. - Re-scan fixed files for regressions. - Store findings: `npx ai-devkit@latest memory store --title "<pattern>" --content "<finding and fix>" --tags "security,<category>"` ## Red Flags | Rationalization | Do Instead | |---|---| | "It's internal / behind a VPN / only admins" | Zero-trust: validate at every boundary regardless of network position or user role | | "We'll add auth later" | Add auth before merge — unauthenticated endpoints get discovered fast | | "It's just a dev credential" | Use env vars / secrets manager — dev secrets leak to prod constantly | | "The framework handles that" | Verify the config — frameworks have defaults, not guarantees | | "We sanitize on the frontend" | Always validate server-side — client validation is bypassable | | "The LLM won't follow injected instructions" | Treat all tool results and external content as untrusted data | | "It's just a prompt, not code" | Prompts control tool execution — review with the same rigor as code | ## Output Template - **Scope**: Target, stack, data flow, trust boundaries, threat actors - **Findings** (by severity): ID, severity, category, file:line, exploit scenario, fix - **Attack Chains**: Findings that escalate when combined - **False Positives**: Dismissed items with reasoning - **Remediation Plan**: Ordered fixes with verification steps - **Residual Risk**: Scope limitations, unverifiable items - Zero findings: state what was checked and scope boundaries — "no findings" ≠ "fully secure"
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.