Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Security Review

ASecurity

Use as a REVIEW LENS when judging another agent's diff for security defects — injection, broken authentication or authorization, secrets in code, unsafe deserialisation, SSRF, path traversal, missing validation, mass assignment, insecure defaults — before recommending approval. Invoke on every review of a ticket that touches auth, input handling, data access, outbound requests, files, crypto, or configuration, and on any high-risk ticket; it complements review-ticket, it does not replace it.

2 stars
0 votes
0 copies
0 views
Added 9/28/2026
ai-agentsjavascriptrustgojavashellsqlapifrontendsecurity

Works with

cliapi

Security Analysis

A100/100

Scanned 9/29/2026

$npx -y skills add tmj-90/gaffer --skill security-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Security Review?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Security Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tmj-90-security-review/badge)](https://www.skillsdirectory.com/skills/tmj-90-security-review)

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

Download with Pro
Files
SKILL.md
---
name: security-review
description: Use as a REVIEW LENS when judging another agent's diff for security defects — injection, broken authentication or authorization, secrets in code, unsafe deserialisation, SSRF, path traversal, missing validation, mass assignment, insecure defaults — before recommending approval. Invoke on every review of a ticket that touches auth, input handling, data access, outbound requests, files, crypto, or configuration, and on any high-risk ticket; it complements review-ticket, it does not replace it.
stack: []
area: review
---

# Security review lens

Security defects are the most expensive to miss and the easiest to skim past, because
the code works. Walk the diff against this checklist, organised by OWASP ASVS 5.0
chapter. A finding is a concrete, reachable defect — a **source** (input an attacker
controls), a **sink** (where it does harm) and the missing control between them — never
a hardening wish.

## Steps

1. **Map the attack surface of the diff.** New inputs (params, headers, bodies, files,
   messages, env, webhook payloads), new data read or written, new outbound calls, new
   privileges or roles. If the diff touches none, write "no new attack surface" and stop.
   Call `search_lore` for the repo's security conventions and past incidents.
2. **Trace each input to its sinks** by opening the files: query builders, shell/exec,
   templates, file paths, URL fetchers, deserialisers, redirects, authorisation checks.
   Walk only the checklist sections those sinks need.
3. **For each item** write "n/a", "ok — <the line that makes it so>", or a finding with
   file, line, attacker, input, impact and the single concrete fix.
4. **Rate each finding.** Blocking: exploitable by an unauthenticated or ordinary user,
   leaks data, or bypasses a control. Should-fix: exploitable only with elevated access or
   in combination. Note: hardening with no exploit path. Only blocking and should-fix
   justify `RECOMMEND CHANGES`; notes are "(optional)".
5. **Record each finding** with `record_ac_evidence` (`evidence_type: manual_note`: the
   checklist item, file, line, severity, fix). As a lens inside the primary review, the
   `review-ticket` verdict carries the result. As the second-opinion security reviewer,
   you give the verdict: RECOMMEND CHANGES for any blocking or should-fix finding, else
   RECOMMEND APPROVE, then as the very last line, alone, exactly `{"verdict":"CHANGES"}`
   or `{"verdict":"APPROVE"}`; do not run tests or the build, and stay under 12 tool
   calls. Never fix the code yourself. Read the diff once and open only
   the files it touches.

## Checklist

- **Encoding and injection (V1)**: SQL through parameters or the ORM, never string
  building (including `ORDER BY`/column names — allow-list them); shell via argv arrays,
  never `sh -c` with interpolation; output encoded by the template engine, no
  `innerHTML`/`dangerouslySetInnerHTML`/`v-html`/`|safe` on untrusted data; NoSQL
  operators (`$where`, `$ne`) not accepted from JSON bodies; no CRLF into headers or logs.
- **Validation and business logic (V2)**: every new input validated at the boundary
  with an allow-list schema (type, length, range, format); server re-checks prices,
  quantities, ids and states the client sends; steps cannot be skipped; limited resources
  cannot be double-booked by concurrent requests (the `concurrency-review` skill).
- **Web frontend (V3)**: state-changing requests protected against CSRF (SameSite
  cookies plus token or custom-header check); cookies `Secure`, `HttpOnly` for session,
  `SameSite` set; CORS never reflects arbitrary `Origin` with credentials; no open
  redirect to a user-supplied URL.
- **API (V4) and defensive coding (V15.3)**: responses return only the fields the caller
  may see (no whole ORM object); mass assignment blocked — writable fields allow-listed
  per action (no `role`, `owner_id`, `is_admin` from the body); strict type comparisons;
  JavaScript merges immune to prototype pollution (`__proto__`, `constructor`).
- **Files (V5)**: user-supplied names never used as paths; canonicalised path checked
  inside the allowed root; archive entries checked for `../` (zip slip); uploads limited
  in size and type, stored outside executable roots (the `file-uploads` skill).
- **Authentication and sessions (V6, V7)**: no new route bypasses login; passwords
  hashed with a slow KDF (argon2id, bcrypt, scrypt); session id rotated on login and
  invalidated on logout; login and reset responses do not reveal whether an account
  exists (the `auth-session-and-oauth` skill).
- **Authorization (V8)**: every new read and write checks the caller's right to the
  specific object, not just "is logged in"; no IDOR — a client id is scoped by owner or
  tenant in the query itself; checks happen server-side on every path, including
  list, export and bulk endpoints (the `security-authz` skill).
- **Tokens and OAuth (V9, V10)**: JWTs verified with a fixed algorithm allow-list (no
  `none`, no HS/RS confusion), expiry, issuer and audience checked; OAuth uses exact
  redirect-URI matching, `state` or PKCE, and never puts tokens in URLs.
- **Crypto (V11)**: standard libraries only; CSPRNG for tokens and ids that grant access;
  constant-time comparison for secrets and signatures; no ECB, MD5 or SHA-1 for security.
- **Communication and outbound calls (V12)**: TLS verification never disabled;
  user-supplied URLs checked against private, loopback, link-local and metadata ranges
  after DNS resolution (SSRF); redirects not followed unless intended; timeouts set.
- **Configuration and secrets (V13)**: no credentials, keys or tokens in code, tests,
  fixtures, logs or client bundles (the `security-secret-handling` skill); debug modes,
  wildcard permissions and permissive defaults not introduced; new dependencies pinned
  in the lockfile and from the expected registry.
- **Data protection (V14)**: personal and secret data not logged, cached publicly or
  returned in errors; sensitive responses not cacheable.
- **Parsing (V1, V5)**: no unsafe deserialisers (`pickle`, Java native serialisation,
  `yaml.load`, `Marshal`) on untrusted data; XML external entities disabled; body and
  JSON size limited; regexes over user input free of catastrophic backtracking.
- **Errors and logging (V16)**: stack traces, SQL and internal paths never returned to
  clients; failures fail closed; security events (login, permission denied) logged
  without secrets.
- **Agent and LLM surfaces**: untrusted text quarantined and never treated as
  instructions; tools scoped to least privilege; model output validated before it
  reaches a sink.

## Rules

- Walk the checklist against the code, not the description; "looks fine" is neither a
  finding nor a pass.
- Every finding names source, sink, file, line and fix; severity decides whether it
  blocks.
- A reachable security defect is never "optional"; a hardening idea with no exploit
  path always is.
- You review; you do not patch. Findings go into evidence.

Attribution

tmj-90tmj-90
View sourceSee grades on GitHubMore from tmj-90 →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

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 (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698461 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →