Skip to content
Back to skills

Use Context Reviewer Security

ASecurity

OWASP Top 10 security review. Do NOT use for readability (use-context-reviewer-readability) or test design (use-context-reviewer-testability).

  • 12 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 24, 2026
ai-agentsrustgobashsqlnodeawsterraformapifrontendci/cd

Works with

  • api

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned September 24, 2026

npx -y skills add thkt/dotclaude --skill use-context-reviewer-security --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Use Context Reviewer Security?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Use Context Reviewer Security
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thkt-use-context-reviewer-security-dotclaude/badge)](https://www.skillsdirectory.com/skills/thkt-use-context-reviewer-security-dotclaude)

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

Download with Pro
SKILL.md
---
name: use-context-reviewer-security
description: OWASP Top 10 security review. Do NOT use for readability (use-context-reviewer-readability) or test design (use-context-reviewer-testability).
when_to_use: security, OWASP, XSS, SQL injection, prompt injection, LLM security, セキュリティ, 脆弱性, cloud security, AWS, IAM, Terraform, クラウドセキュリティ, インフラ
allowed-tools: Read Agent Bash(ugrep:*) Bash(bfs:*)
agent: reviewer-security
context: fork
user-invocable: false
---

# use-context-reviewer-security

## Detection (OWASP Top 10)

LLM01 covers apps that pass untrusted content to an LLM. The sink is the prompt itself: untrusted text concatenated without a data/instruction boundary, or a caller-supplied value interpolated into a system prompt. Constrain an LLM tool such as `fetch_url` the same way as its non-LLM counterpart, A10 SSRF. The tool is the sink, not the prompt.

| ID    | Category                  | Pattern                                                                                                                                         | Fix                                                                                   |
| ----- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| LLM01 | Prompt Injection (LLM)    | Untrusted or caller-controlled value such as RAG docs, fetched content, tool results, or role args reaches the prompt with no data-only framing | Delimit untrusted content as data; map caller values to fixed enumerated instructions |
| A01   | Broken Access Control     | Missing auth, IDOR, path traversal                                                                                                              | Auth middleware, ownership check                                                      |
| A01   | CSRF                      | No CSRF token verification on state-changing requests (POST/PUT/PATCH/DELETE)                                                                   | Double Submit Cookie                                                                  |
| A01   | Open Redirect (Taint)     | URL param → `location.href` without validation                                                                                                  | Domain allowlist or relative-only                                                     |
| A02   | Cryptographic Failures    | `password: 'plaintext'`                                                                                                                         | bcrypt/argon2 hashing                                                                 |
| A02   | Timing Attack             | `===` comparison of tokens/signatures                                                                                                           | Constant-time comparison: XOR all bytes, decide last                                  |
| A02   | Sensitive Data Exposure   | JWT stored in localStorage/sessionStorage                                                                                                       | httpOnly cookie instead                                                               |
| A03   | Injection                 | `db.query(\`SELECT...${id}\`)`                                                                                                                  | Parameterized query, ORM                                                              |
| A03   | Injection                 | `exec(\`ping ${host}\`)`                                                                                                                        | Input validation, library instead                                                     |
| A03   | XSS                       | `dangerouslySetInnerHTML` (static presence)                                                                                                     | Default escaping, DOMPurify                                                           |
| A03   | XSS (Taint)               | `dangerouslySetInnerHTML={{ __html }}` without sanitizer                                                                                        | DOMPurify.sanitize() at boundary                                                      |
| A03   | XSS (Taint)               | Function arg → `innerHTML` without sanitization                                                                                                 | Sanitize at function boundary                                                         |
| A03   | XSS (Taint)               | `<a href={variable}>` with user-controlled URL                                                                                                  | Protocol allowlist of https/http only                                                 |
| A04   | Insecure Design           | `postMessage` handler without origin check                                                                                                      | Strict `event.origin` comparison                                                      |
| A05   | Security Misconfiguration | `cors({ origin: '*' })`                                                                                                                         | Explicit origin allowlist                                                             |
| A05   | Security Misconfiguration | `cookie: {}` with no options                                                                                                                    | secure, httpOnly, sameSite: 'strict'                                                  |
| A05   | Security Misconfiguration | `err.stack` in error response without `NODE_ENV` guard                                                                                          | Generic message in prod, log internally                                               |
| A07   | Authentication Failures   | No rate limit on auth endpoints (login, register, password-reset)                                                                               | Rate limiter middleware on auth route group                                           |
| A08   | Prototype Pollution       | Request object built with `...body` spread                                                                                                      | Explicit field assignment                                                             |
| A09   | Logging Failures          | `logger.info({ password })`                                                                                                                     | Exclude sensitive fields                                                              |
| A10   | SSRF                      | `fetch(userInputUrl)`                                                                                                                           | URL validation, allowlist                                                             |

## Reporting

Severity runs critical / high / medium, finding-schema.md's four levels minus `low`. A security finding carries no fix-it-if-you-notice level; reporting one asks for action. Report each independent vulnerability as its own finding. When one file holds two distinct issues (e.g. a path traversal and a separate prompt injection), list both as separate findings rather than folding one into a note on the other.

| Signal              | Severity | Required output                      |
| ------------------- | -------- | ------------------------------------ |
| Certain exploit     | critical | Full exploit scenario + concrete fix |
| Clear vulnerability | high     | Attack vector + concrete fix         |
| Possible issue      | medium   | verification_hint + suggested fix    |
| Speculative only    | none     | Do NOT report                        |

## References

| Topic            | Scope                             | File                                                   |
| ---------------- | --------------------------------- | ------------------------------------------------------ |
| Basic            | A01, A02, A07                     | ${CLAUDE_SKILL_DIR}/references/owasp-basic.md          |
| Injection        | A03                               | ${CLAUDE_SKILL_DIR}/references/owasp-injection.md      |
| Advanced         | A04-A06, A08-A10                  | ${CLAUDE_SKILL_DIR}/references/owasp-advanced.md       |
| Cloud access     | IAM, secrets, network             | ${CLAUDE_SKILL_DIR}/references/cloud-access-network.md |
| Cloud operations | Logging, CI/CD, CDN, backup       | ${CLAUDE_SKILL_DIR}/references/cloud-operations.md     |
| Taint (markup)   | HTML and attribute sinks          | ${CLAUDE_SKILL_DIR}/references/frontend-taint-html.md  |
| Taint (data)     | Cross-origin, navigation, storage | ${CLAUDE_SKILL_DIR}/references/frontend-taint-data.md  |

## Taint Review Workflow

Apply this to Taint (markup) and Taint (data) in the table above.

1. Identify taint sources such as user input, API responses, and URL parameters
2. Trace data flow to sinks such as DOM manipulation, navigation, and storage
3. Verify sanitization or validation exists at every source-to-sink path
4. Check that sanitization cannot be bypassed via error paths or conditional logic

Files in this skill

  • SKILL.md9.3 KB
  • references/cloud-access-network.md2.1 KB
  • references/cloud-operations.md2.3 KB
  • references/frontend-taint-data.md3.2 KB
  • references/frontend-taint-html.md3 KB
  • references/owasp-advanced.md2.6 KB
  • references/owasp-basic.md2 KB
  • references/owasp-injection.md2 KB
  • test/README.md2.5 KB
  • test/cases/cross-file/analytics-route.ts210 B
  • test/cases/cross-file/middleware.ts470 B
  • test/cases/hard-safe/allowlist-fetch.ts286 B
  • test/cases/hard-safe/parameterized-like.ts158 B
  • test/cases/hard-safe/prompt-injection-explainer.ts576 B
  • test/cases/hard-safe/wrapped-sanitize.tsx266 B
  • test/cases/hard-vuln/fake-escape.ts253 B
  • test/cases/hard-vuln/indirect-xss.tsx210 B
  • test/cases/hard-vuln/prompt-injection-exfiltration.ts570 B
  • test/cases/hard-vuln/prompt-injection-system-spoof.ts484 B
  • test/cases/hard-vuln/second-order-injection.ts373 B

Attribution

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

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.