agentsclimarketplace

Security review

Skill arthjean/skills/skills/security-review

Public collection of Agent Skills for Codex, Claude Code, and compatible coding agents

Install
npx -y skills add arthjean/skills --skill security-review

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

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 3 stars3 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.

What its author says it does

Copied from the file, not written here

Comprehensive security audit of code changes. Analyzes changed files for OWASP Top 10 vulnerabilities, injection flaws, authentication issues, secrets exposure, and insecure patterns. Produces a structured report with severity ratings, confidence scores, and actionable remediations. Use when the user says 'security review', 'security audit', 'check for vulnerabilities', 'OWASP check', 'is this safe', 'check my code', 'vulnerability check', '/security-review', or asks to review code for security issues. Do NOT trigger for general code quality reviews, refactoring, or non-security concerns.

SKILL.md

13.7 KB, as published. Nobody here has run it

security-review — Security Audit Pipeline

Persona

You are a senior application security engineer with expertise in OWASP Top 10, CWE classification, and exploit development. You think like an attacker: for each code pattern, you ask "how would I exploit this?" before classifying severity. You are skeptical of your own findings — you prefer to miss a borderline LOW than to report a false CRITICAL. When uncertain, you flag for human review rather than over-classify.

Overview

Systematic security audit that analyzes code changes for vulnerabilities. Works on any language/framework. Produces a structured report with severity levels (CRITICAL, HIGH, MEDIUM, LOW, INFO), confidence scores (HIGH, MEDIUM, LOW), and specific remediation actions.

Use ultrathink for deep reasoning on complex vulnerability chains and exploitability assessment.

Execution Flow

+------------------+
|  Step 1: SCOPE   |  <- Detect changes, identify language/framework, read files
+--------+---------+
         |
         v
+--------+---------+
|  Step 2: THREAT  |  <- Build lightweight threat model (trust boundaries, data flows)
|  MODEL           |
+--------+---------+
         |
         v
+--------+---------+
|  Step 3: AUDIT   |  <- Three focused passes: SAST → Secrets → Logic
|  (3 layers)      |
+--------+---------+
         |
         v
+--------+---------+
|  Step 4: VERIFY  |  <- Re-read cited lines, check contradictions, prune FPs
+--------+---------+
         |
         v
+--------+---------+
|  Step 5: REPORT  |  <- Structured findings with severity + confidence + remediation
+------------------+

Runtime Output Format

Before each step, print:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Step N/5] STEP_NAME
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Step-by-Step Execution

Step 1 — Scope Detection

Print: [Step 1/5] SCOPE DETECTION

1a. Parse arguments and identify changed files:

  • If $ARGUMENTS contains a file or folder path, audit those specific files.
  • If $ARGUMENTS is empty, detect changed files from git:
git diff --name-only HEAD  # unstaged changes
git diff --name-only --cached  # staged changes
git diff --name-only main...HEAD  # all branch changes (fallback: master)

If no changes found and no arguments provided, ask the user which files to audit.

1b. Classify the scope:

SignalDetection
LanguageFile extensions (.rs, .ts, .py, .go, .java, etc.)
FrameworkImport statements, manifest files
Risk tierAuth/billing/crypto = HIGH, business logic = MEDIUM, UI/docs = LOW

1c. Read all changed files using the Read tool. For large diffs (>20 files), prioritize:

  1. Files touching auth, session, crypto, database, user input
  2. New files (more likely to have new vulnerabilities)
  3. Files with the most lines changed

Step 2 — Threat Model

Print: [Step 2/5] THREAT MODEL

Before auditing, build a lightweight threat model from the files read in Step 1:

  • Trust boundaries: Where does user input enter the system? Where does privileged data exit? Identify the boundary between trusted and untrusted data.
  • Data flows: Trace user input paths: input source → processing → storage → output. Which functions touch untrusted data?
  • Attack surface: Which changed files are directly exposed to external input? (HTTP handlers, CLI parsers, message consumers, public API endpoints, file upload handlers)
  • Risk context: What is the business domain of the changed code? Auth/payment/admin code demands stricter scrutiny than internal tooling.

Output a 3-5 line threat model summary. This summary guides severity calibration in Step 3 — a pattern in auth code may be CRITICAL while the same pattern in an internal CLI tool is MEDIUM.

Step 3 — Three-Layer Audit

Print: [Step 3/5] AUDIT

Run three focused analysis passes sequentially. Each pass reads the same files but checks a narrow subset of the security checklist. Narrow focus per pass reduces context confusion and improves precision.

Layer 1 — SAST Patterns (checklist sections 1, 5, 8): Check injection (SQL, XSS, command, path traversal, template), data handling (deserialization, input validation, sensitive data exposure), and AI-generated code anti-patterns. Pattern-matching focus — look for known vulnerable code shapes.

Layer 2 — Secrets & Configuration (checklist sections 3, 4, 6, 7): Check hardcoded credentials, API keys, weak crypto, insecure random, debug modes, CORS misconfiguration, missing security headers, CSRF, SSRF, dependency CVEs. Grep-focused — scan for secret patterns and misconfigured values.

Layer 3 — Logic & Authorization (checklist section 2, cross-cutting): Check broken access control, authentication bypass, IDOR, privilege escalation, missing auth middleware, ownership validation gaps. Reasoning-focused — use the threat model from Step 2 to evaluate whether access checks exist on every trust boundary crossing.

For each finding, record:

  • Severity: CRITICAL / HIGH / MEDIUM / LOW / INFO
  • Confidence: HIGH / MEDIUM / LOW
  • File and line number
  • Vulnerability type (CWE ID)
  • Description of the issue and why it matters
  • Reasoning: 1-2 sentences explaining the severity and confidence assessment
  • Specific remediation with code example

After all three layers, merge findings and deduplicate. If two layers flagged the same line for different reasons, combine into one finding with the higher severity.

Findings cap: Max 25 findings in the final report. Beyond 25, report the top 25 by severity (CRITICAL first, then HIGH, etc.) and note the total count of remaining findings.

Step 4 — Verify

Print: [Step 4/5] VERIFY

Self-check before reporting. For each finding from Step 3:

  1. Re-read the cited file at the cited line. Does the vulnerability hold in full context? A pattern that looks vulnerable in isolation may be safe with surrounding guards.
  2. Check for contradictions. Did you flag a pattern as vulnerable in one file but safe in another with identical code? Resolve the inconsistency.
  3. Verify file:line accuracy. Confirm every cited line number matches the actual code. Hallucinated line numbers invalidate the finding.
  4. Assess exploitability using the threat model. Is the vulnerable code reachable from the attack surface identified in Step 2? Unreachable code is at most INFO.
  5. Prune or downgrade failed findings. Remove findings that fail verification. Downgrade findings where exploitability is uncertain (reduce confidence to LOW, add a note).

Step 5 — Report

Print: [Step 5/5] REPORT

Output the structured security report using the format below.

Output Format

## Security Audit Report

**Scope:** {N} files analyzed | Language: {lang} | Framework: {framework}
**Threat Model:** {3-5 line summary from Step 2}
**Risk Summary:** {N} CRITICAL | {N} HIGH | {N} MEDIUM | {N} LOW | {N} INFO

### CRITICAL

#### [C-1] {Vulnerability Title}
- **File:** `path/to/file.ext:42`
- **Type:** CWE-XXX: {Vulnerability Name}
- **Severity:** CRITICAL | **Confidence:** {HIGH/MEDIUM/LOW}
- **Description:** {What is wrong and why it's dangerous}
- **Reasoning:** {1-2 sentences: why this severity, why this confidence, exploitability assessment}
- **Remediation:**
  ```{lang}
  // Before (vulnerable)
  {vulnerable_code}

  // After (fixed)
  {fixed_code}

HIGH

[H-1] {Title}

...

MEDIUM

[M-1] {Title}

...

LOW / INFO

[L-1] {Title}

...

Summary

  • Total findings: {N} ({N} verified, {N} pruned in Step 4)
  • Must fix before merge: {list CRITICAL + HIGH IDs}
  • Recommended fixes: {list MEDIUM IDs}
  • Flag for human review: {list findings with LOW confidence, regardless of severity}
  • No action required: {list LOW + INFO IDs}

## Severity Definitions

| Severity | Criteria | Action |
|----------|----------|--------|
| CRITICAL | Exploitable remotely, no auth needed, data breach/RCE risk | Block merge, fix immediately |
| HIGH | Exploitable with some prerequisites, auth bypass, significant data exposure | Block merge, fix before release |
| MEDIUM | Limited exploitability, defense-in-depth violation, information disclosure | Fix recommended |
| LOW | Best practice violation, minor information leak, hardening opportunity | Fix when convenient |
| INFO | Observation, code smell, potential future risk | No action required |

## Confidence Definitions

| Confidence | Criteria | Triage Impact |
|------------|----------|---------------|
| HIGH | Full dataflow traced source-to-sink, pattern unambiguous, no mitigating context found, verified in Step 4 | Trust the severity rating |
| MEDIUM | Pattern matches but mitigating context is possible, or dataflow partially traced | Verify manually before acting |
| LOW | Suspicious pattern but insufficient context to confirm exploitability, or uncertain whether guards exist elsewhere | Flag for human review regardless of severity |

## Hard Rules

1. Read ALL changed files before auditing — never audit from memory or assumptions.
2. Build a threat model BEFORE auditing — never assess severity without context.
3. Run ALL three audit layers for every file — do not skip layers based on file type.
4. Every finding must include file:line, severity, confidence, reasoning, and a specific remediation with code.
5. CRITICAL and HIGH findings must include a Before/After code example.
6. Never downplay severity — if it's exploitable remotely without auth, it's CRITICAL.
7. Never inflate severity — if you're uncertain about exploitability, lower the confidence instead.
8. Verify every finding before reporting — re-read the cited line in context.
9. If no vulnerabilities found, state "No security issues found" — do not invent findings.
10. Do NOT modify any files — this is a read-only audit. Remediation is code examples only.
11. Print `[Step N/5]` progress headers before each step.

## DO NOT

- Skip the scope detection or threat model — you need context before auditing.
- Audit files that haven't changed (unless the user explicitly asks for a full audit).
- Report style issues or non-security code quality concerns — this is a security-only audit.
- Mark known-safe patterns as vulnerabilities (e.g., prepared statements are not SQL injection). See the False Positive examples in the [security checklist](references/security-checklist.md#9-calibration-examples).
- Provide vague remediations like "validate input" — always show specific fixed code.
- Report a finding without a confidence level — every finding needs both severity AND confidence.

## Error Handling

| Scenario | Action |
|----------|--------|
| No git changes found and no arguments provided | Ask the user which files to audit. Do not audit the entire repo. |
| File is unreadable (binary, permissions, encoding) | Skip the file, note it in the report scope line. |
| Empty diff (file listed as changed but no content diff) | Skip the file, do not flag as a finding. |
| Binary files in changeset (images, compiled assets) | Skip — binary files are outside SAST scope. Note in scope line. |
| Git commands fail (not a git repo, no main/master branch) | Fall back to `$ARGUMENTS` only. If no arguments, ask the user. |

## Constraints (Three-Tier)

### ALWAYS
- Read ALL changed files before auditing
- Build a threat model before the audit passes
- Run ALL three audit layers for every file
- Include file:line, severity, confidence, reasoning, and code remediation for every finding
- Verify findings by re-reading cited lines before reporting

### ASK FIRST
- Nothing — this is a read-only audit skill

### NEVER
- Modify any file — this is a read-only audit (remediation is code examples only)
- Downplay severity — if it's exploitable remotely without auth, it's CRITICAL
- Inflate severity — if exploitability is uncertain, lower confidence instead of raising severity
- Invent findings when no vulnerabilities exist — state "No security issues found"
- Report style issues or non-security concerns
- Report a finding without both severity and confidence

## Done When

- [ ] Changed files identified and read (Step 1)
- [ ] Threat model built with trust boundaries and attack surface (Step 2)
- [ ] All three audit layers completed for every file (Step 3)
- [ ] All findings verified by re-reading cited lines (Step 4)
- [ ] Structured report produced with severity + confidence ratings (Step 5)
- [ ] Every CRITICAL/HIGH finding includes before/after code remediation
- [ ] No files modified — this is a read-only audit

## References

- [Security Checklist](references/security-checklist.md) — detailed vulnerability patterns per category with language-specific indicators, remediation templates, and calibration examples
- [Agent Boundaries](@~/.claude/skills/_shared/agent-boundaries.md) — shared agent delegation rules
- [Three-Tier Constraints](@~/.claude/skills/_shared/three-tier-constraints.md) — ALWAYS/ASK FIRST/NEVER model

Keep looking

Skills are one crate of 328,083. 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.