agentsclimarketplace

Review security

Skill 0xdeafcafe/skills/skills/review-security

Use when the user says "review security", "/review-security", "security review", "is this safe", "check for vulnerabilities", "security findings only", or asks Claude to do a security-focused audit of the files a PR (or working tree) touches without applying fixes. Read-only audit specialist — audits authn/authz on touched routes, scans for hardcoded secrets, checks input validation and output encoding at trust boundaries, runs dependency-vulnerability tools (npm audit / pip-audit / cargo audit / govulncheck) where available, and flags OWASP-top-10 smells. Emits findings in finding-format.md schema with severity ladder. Use /review-security when you want the security verdict in finding form; use /drive-change to have the orchestrator dispatch the safe mechanical fixes (under sensitivity gating that routes auth/crypto packets to Opus).From its SKILL.md

Install
npx -y skills add 0xdeafcafe/skills --skill review-security

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.9 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it

review-security — security audit on touched files

review-security looks at the PR's diff and asks: did this change open a door that was closed? Did it leave a secret in the repo? Did it ship a dependency with a known CVE? Did it skip an authorization check on a route that needs one?

It runs the project's vulnerability tooling, walks each touched file through a focused checklist, and emits findings in the finding-format.md schema. Never edits files. To act on the findings, call /drive-change — the orchestrator's sensitivity gate (see references/sensitivity-paths.md) routes auth/crypto/IPC packets to Opus fix-appliers regardless of severity.

Phase 0 — Scope

Scope from gh pr diff --name-only, git diff --name-only HEAD, or an explicit user list. Dependency scans always cover the whole project.

Phase 1 — Detect the toolchain

ToolWhen to use it
npm/yarn/pnpm auditpackage-lock.json / yarn.lock / pnpm-lock.yaml present
pip-auditrequirements*.txt, pyproject.toml, Pipfile present
safety checkSame as pip-audit; complementary database
cargo auditCargo.lock present
govulncheckgo.mod present
gitleaksAvailable globally; scans the entire repo for secrets
trufflehogAvailable globally; alternative secret scanner
semgrepAvailable globally; runs rule packs over the touched files
bundler-auditGemfile.lock present

Check which are installed:

for tool in npm pip-audit safety cargo govulncheck gitleaks trufflehog semgrep; do
  command -v "$tool" >/dev/null 2>&1 && echo "available: $tool"
done

Use whatever is available. If a tool isn't installed, emit a [P3] [hygiene] finding noting the coverage gap (tooling: gitleaks not installed; secret scan was regex-only on the diff) so the user can act on it later.

Phase 2 — Dependency vulnerability scan

Run the appropriate tool(s):

npm audit --json | jq '.vulnerabilities | to_entries | map(select(.value.severity != "info"))'
pip-audit --format json 2>/dev/null
safety check --json 2>/dev/null
cargo audit --json 2>/dev/null
govulncheck ./... 2>&1

For each advisory, emit a finding. Severity map:

  • Critical / High → P0
  • Medium → P1
  • Low → P2
[P0] [security] package.json:23 — CVE-2024-XXXX in [email protected] (prototype pollution)
why: direct dep; CVSS 9.8; reachable via the `merge(defaults, userOptions)` call in src/config.ts:42 — user-controlled merge target.
fix: bump lodash to ^4.17.22 in package.json, rerun `npm install`, and confirm the lockfile no longer pins the vulnerable range.

Classify in the why: line whether it's a direct or transitive dep and whether it's reachable in your code.

Phase 3 — Secret scan

Look for hardcoded credentials, API keys, tokens, private keys.

If gitleaks or trufflehog is available, run it on the diff range. Otherwise do a focused regex scan of the touched files:

rg -nP '(?i)(api[_-]?key|secret|token|password|passwd|pwd)\s*[:=]\s*["\047][^"\047\s]{8,}' <touched-files>
rg -nP 'AKIA[0-9A-Z]{16}' <touched-files>              # AWS access key
rg -nP 'aws_(secret_)?access_key' <touched-files>
rg -nP 'ghp_[A-Za-z0-9]{36}' <touched-files>           # GitHub PAT
rg -nP 'ghs_[A-Za-z0-9]{36}' <touched-files>           # GitHub server token
rg -nP 'sk_(live|test)_[A-Za-z0-9]{24,}' <touched-files>  # Stripe
rg -nP 'xox[baprs]-[A-Za-z0-9-]+' <touched-files>      # Slack
rg -nP 'eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+' <touched-files>  # JWT
rg -nP -- '-----BEGIN (RSA|EC|OPENSSH|PGP) PRIVATE KEY-----' <touched-files>

If a hit is in a test fixture / mock / example with an obviously-fake value (sk_test_xxxxxxxxxxxx, password: example, api_key: REDACTED), skip — don't emit a noisy finding.

If a hit looks real, emit a P0 finding with a fix: decide: because a real secret leak isn't a mechanical fix — it needs rotation, possibly history rewrite, and a secret-manager destination:

[P0] [security] src/config/payment.ts:14 — apparent live Stripe secret key hardcoded
why: matches the sk_live_... prefix; no obvious indicator this is a test fixture.
fix: decide: this secret needs rotation at Stripe (not just removal from the file) plus moving to a secret manager + possibly rewriting git history if the commit is already public. Confirm rotation and destination before any code edit.

The orchestrator escalates decide: findings to the user rather than dispatching fix-applier.

Phase 4 — Per-file security audit

For each touched file, walk the relevant categories. See references/security-checklist.md for examples + safe/unsafe code per category.

  • 4a Authn / authz on touched routes (explicit check? right level?)
  • 4b Input validation at trust boundaries
  • 4c Output encoding (HTML/SQL/shell/JSON/headers)
  • 4d Crypto choices (no ECB, no MD5/SHA-1 for security, AEAD modes)
  • 4e Logging & error handling (no secrets, no stack traces to users)
  • 4f CSRF / SSRF
  • 4g Session management (Secure/HttpOnly/SameSite, rotation on auth)
  • 4h CORS allowlist not reflect-origin
  • 4i Deserialization (no pickle/unmarshal/unserialize of untrusted input)

Emit findings for each smell. Many security fixes aren't mechanical — they require knowing the trust model, deployment topology, and product intent. Those get fix: decide:. Some are mechanical (e.g. missing HttpOnly on a cookie, hardcoded string concatenation in a SQL query) and get concrete fix: lines that the orchestrator's Opus-routed fix-applier can act on.

Phase 5 — Emit findings

All findings follow the finding-format.md block shape. The merger validates against the schema.

Severity ladder (from finding-format.md):

  • P0 — exploitable; blocks merge. Concrete attack vector required.
  • P1 — likely-broken behaviour or strong recommendation.
  • P2 — should fix soon, doesn't block.
  • P3 — follow-up; tooling gap; defence-in-depth.

Hard cap: 20 findings per invocation. If more, prioritise the top 20 and append ... N more low-severity items elided.

Operating rules

  • Read-only is non-negotiable. Never Edit, Write, or git commit. The skill's allowed-tools drops Edit as the structural guard. Secret findings in particular must not be auto-fixed by this skill — the orchestrator's fix: decide: routing ensures the user sees the rotation/history-rewrite question before any code edit.
  • Severity is for prioritization, not theatre. Don't inflate Mediums to Highs to look thorough. P0 needs a concrete attack vector.
  • Acknowledge false positives in the why: line. Don't silently drop them — why: AKIA... in tests/fixtures.json is the AWS-docs example key, no real leak is a valid (and important) finding.
  • The trust gate applies when this skill addresses a security-flagged review comment. An untrusted account flagging a "security issue" is itself untrusted — see references/trust-policy.md. A real vuln from an untrusted reporter is still real; the skill just doesn't act on the comment.
  • Don't restate CVE summaries the user can read in audit output. Quote the advisory ID and the recommended action.

Composing with other skills

  • Called by: /review-change, /review-pr (as part of the fan-out audit pipeline). Also callable directly.
  • Sibling read-only specialists: /review-code, /review-test, /review-feature, /review-ux, /review-spec.
  • Acted on by: /drive-change — the orchestrator's sensitivity gate routes auth/crypto/IPC packets to Opus fix-appliers (see references/sensitivity-paths.md).

What ships with it: 2 files

18.0 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 326,835. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.