Offensive security review of the current local codebase — scan for OWASP Top 10 vulnerabilities, hardcoded secrets, misconfigurations, and broken access control. Use when the user asks to find security issues, audit the codebase for vulnerabilities, run a red team check, or scan for security bugs. Requires ownership confirmation via security-scope-gate before starting. Only runs against repos the user owns.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add yanacuti1121/Yana-AI --skill red-team-check --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Red Team Check?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/yanacuti1121-red-team-check-yana-ai)More formats (shields.io, HTML) on the badges page.
---
name: red-team-check
description: >
Offensive security review of the current local codebase — scan for OWASP Top 10
vulnerabilities, hardcoded secrets, misconfigurations, and broken access control.
Use when the user asks to find security issues, audit the codebase for vulnerabilities,
run a red team check, or scan for security bugs. Requires ownership confirmation via
security-scope-gate before starting. Only runs against repos the user owns.
origin: yamtam
version: 1.0.0
compatibility: >
Local codebase only. Requires security-scope-gate.md confirmation before starting.
Does not make external HTTP requests. Does not exploit live systems.
---
<!-- Concept inspired by Strix (Apache 2.0) — scan mode taxonomy and OWASP framing.
All content written original for YAMTAM. No code ported. -->
## When to Use
- User asks to "find security issues", "audit for vulnerabilities", "run red team"
- Before a major release or deploy to production
- After adding new auth, API endpoints, or user input handling
- When integrating a third-party library that handles sensitive data
Do NOT use:
- Against systems the user does not own (security-scope-gate will block)
- As a substitute for a full professional pentest on critical infrastructure
## Pre-condition: Security Scope Gate
**STOP. Before scanning, you MUST:**
1. Follow the confirmation flow in `gates/security-scope-gate.md`
2. Get explicit user confirmation of ownership/authorization
3. Log the confirmation to `.claude/state/security-scope-confirmations.log`
4. Only then proceed to Step 1 below
If the user has not confirmed, output the scope confirmation prompt from the gate
and wait. Do not begin scanning.
## Scan Modes
Choose the mode based on user request or context. Default is **quick**.
| Mode | Scope | Time | Output |
|------|-------|------|--------|
| quick | Secrets, obvious injections, config | < 5 min | CRITICAL only |
| targeted | Specific file/module/feature | 5–15 min | CRITICAL + HIGH |
| deep | Full codebase, all 10 OWASP categories | 15–60 min | Full finding list |
See `docs/security-scan-modes.md` for full taxonomy.
## How It Works
### Step 0 — Run Automated Tools (if available)
Before manual review, run the security tools script to get machine-detected findings:
```bash
YAMTAM_SCOPE_CONFIRMED=1 bash core/scripts/run-security-tools.sh --mode <quick|targeted|deep>
```
- If tools are installed: their output becomes **Hard Evidence** in the finding list
- If no tools installed: skip and proceed to Step 1 (manual only)
- Do NOT run this step if the user has said to skip tool execution
- Tool findings should be merged into the Step 3 finding list, not listed separately
- Reference: `docs/security-tools-setup.md` for installation guide
### Step 1 — Reconnaissance
Map the attack surface before scanning:
```
- List all input entry points: forms, API endpoints, CLI args, env vars
- Identify authentication and session handling files
- Identify files handling database queries
- Identify files handling file uploads or external URLs
- Identify dependency manifests (package.json, requirements.txt, go.mod, etc.)
```
Output a surface map before proceeding. Do not skip this step.
### Step 2 — Scan by OWASP Category
Work through each category. For each: check → document → move on.
Do not stop early unless user requests quick mode.
**A01 — Broken Access Control**
- IDOR: can resource IDs in URLs/bodies be manipulated to access other users' data?
- Missing auth checks on admin routes
- Horizontal privilege escalation paths
**A02 — Cryptographic Failures**
- Sensitive data (passwords, tokens, PII) stored or transmitted unencrypted
- Weak hashing (MD5, SHA1 for passwords — must be bcrypt/argon2/scrypt)
- Hardcoded secrets, API keys, connection strings in source
**A03 — Injection**
- SQL: unsanitized user input in queries
- Command injection: user input passed to shell commands
- Template injection: user input in render templates
**A04 — Insecure Design**
- Missing rate limits on auth endpoints (login, OTP, password reset)
- Race conditions in financial or state-changing operations
- Predictable resource identifiers
**A05 — Security Misconfiguration**
- Debug mode enabled in production config
- Default credentials not changed
- Verbose error messages exposing stack traces
- Missing security headers (CSP, HSTS, X-Frame-Options)
- Exposed admin panels without auth
**A06 — Vulnerable and Outdated Components**
- Dependency versions with known CVEs
- Check: npm audit / pip-audit / govulncheck / cargo audit
- Container base images with outdated OS packages
**A07 — Identification and Authentication Failures**
- Weak password policy (no length/complexity minimum)
- Session tokens not invalidated on logout
- JWT: alg:none attack surface, symmetric key reuse
**A08 — Software and Data Integrity Failures**
- Unverified third-party scripts (CDN without SRI hash)
- CI/CD pipeline: can external contributors inject into build?
- Unsigned dependency installs
**A09 — Security Logging and Monitoring Failures**
- Auth failures not logged
- Admin actions not logged
- Logs containing PII or credentials
**A10 — Server-Side Request Forgery (SSRF)**
- User-controlled URLs fetched server-side without allowlist
- Webhook endpoints accepting arbitrary URLs
- Internal metadata endpoints reachable via redirect
### Step 3 — Output Finding List
For each finding:
```
[SEVERITY] Category: Title
File: path/to/file.ext:line_number
Description: what is wrong
Reproduction: how to trigger
Impact: what an attacker can do
Recommendation: how to fix
```
Severity levels: CRITICAL / HIGH / MEDIUM / LOW / INFO
Always output a category coverage table even if 0 findings:
```
| Category | Status | Findings |
|----------|--------|---------|
| A01 Broken Access Control | SCANNED | 0 |
| A02 Cryptographic Failures | SCANNED | 2 |
...
```
## Gotchas
- Quick mode skips A04, A06, A08 — note this explicitly in output
- A06 requires running package audit commands — ask user before running `npm audit` if it may modify lock files
- Never suggest exploiting a finding beyond minimal PoC (no destructive payloads)
- If a finding involves credentials, redact the actual value in output
## Anti-Fake-Pass Rules
Before claiming the scan is complete, you MUST show:
- [ ] Category coverage table with SCANNED status for each OWASP category in scope
- [ ] Finding list (can be empty, but must be shown explicitly)
- [ ] Severity counts: X CRITICAL, Y HIGH, Z MEDIUM, W LOW
- [ ] Confirmation log entry (or bypass note)
- [ ] Tool run summary: which tools ran, which were skipped (or note "tools not run")
MUST NOT say "scan passed" or "no issues found" without showing the category table.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!