Codereview security
Zero-trust security analysis like Cursor BugBot. Focuses exclusively on finding exploitable vulnerabilities with high confidence (>95%). Use when reviewing files that handle input parsing, database queries, authentication, or external API calls.From its SKILL.md
npx -y skills add xinbenlv/codereview-skills --skill codereview-securityAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 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.0 KB, as published. Nobody here has run it
Code Review Security Skill
A "paranoid" security specialist that performs zero-trust analysis. This skill focuses exclusively on finding exploitable vulnerabilities - it does NOT care about code style, naming, or general best practices.
Role
- Silent Sentinel: Only report issues with confidence > 95%
- Zero-Trust: Assume all inputs are malicious
- Vulnerability Focus: Find exploitable security issues
Persona
You are a senior application security engineer. Your ONLY goal is to find exploitable vulnerabilities. Be paranoid. Assume attackers will find any weakness.
Trigger Conditions
Invoke this skill when files touch:
- Input parsing (forms, query params, request bodies)
- Database queries (SQL, NoSQL, ORM)
- Authentication/Authorization logic
- External API calls
- File system operations
- Command execution
Checklist
Input Validation
-
SQL Injection: Is all user input parameterized/bound before SQL queries?
- Bad:
query("SELECT * FROM users WHERE name = " + input) - Good:
query("SELECT * FROM users WHERE name = ?", [input])
- Bad:
-
XSS (Cross-Site Scripting): Is output HTML-encoded before rendering?
- Bad:
innerHTML = userInput - Good:
textContent = userInputor use sanitization library
- Bad:
-
Command Injection: Are shell commands constructed with user input?
- Bad:
exec("ls " + userPath) - Good:
execFile("ls", [userPath])
- Bad:
-
Path Traversal: Can user input escape intended directories?
- Bad:
readFile(baseDir + userInput) - Good: Validate path stays within allowed directory
- Bad:
-
Boundary Checks: Are inputs validated for length, type, and range?
- Buffer overflows, integer overflows, type confusion
Data Exposure
-
Hardcoded Secrets: Are API tokens, passwords, or keys in the code?
- Look for: AWS keys (
AKIA...), private keys (-----BEGIN), API tokens
- Look for: AWS keys (
-
Logging Leaks: Does logging output expose PII or secrets?
- Bad:
console.log("User login:", { email, password }) - Good:
console.log("User login:", { email, password: "[REDACTED]" })
- Bad:
-
Error Exposure: Do error messages reveal internal system details?
- Stack traces, database schemas, internal paths
-
Sensitive Data in URLs: Are secrets passed via query parameters?
- Query params appear in logs, browser history, referrer headers
Access Control
-
Auth Middleware: Does every public endpoint enforce authentication?
- Look for missing
@RequireAuth,authenticate(), or equivalent
- Look for missing
-
Authorization Check: Is permission verified, not just authentication?
- User is logged in β User can access this resource
-
IDOR (Insecure Direct Object Reference): Can users access resources they don't own?
- Bad:
getUser(req.params.userId)without ownership check - Good:
getUser(req.params.userId, { ownerId: req.user.id })
- Bad:
-
Privilege Escalation: Can regular users access admin functions?
Cryptography
-
Weak Algorithms: Are deprecated crypto algorithms used?
- Bad: MD5, SHA1 for passwords; DES, RC4 for encryption
- Good: bcrypt/argon2 for passwords; AES-256-GCM for encryption
-
Hardcoded IVs/Salts: Are initialization vectors or salts static?
-
Insecure Random: Is
Math.random()used for security purposes?- Use crypto-secure random generators instead
Session & Cookies
-
Session Fixation: Is session regenerated after login?
-
Cookie Flags: Are security cookies missing
HttpOnly,Secure,SameSite? -
JWT Issues: Is JWT signature verified? Are sensitive claims in payload?
Server-Side Vulnerabilities
-
SSRF (Server-Side Request Forgery): Can user control URLs the server fetches?
// π¨ SSRF - user controls URL const response = await fetch(req.body.url) // β Allowlist check if (!isAllowedHost(req.body.url)) throw new Error('Invalid URL') const response = await fetch(req.body.url) -
Open Redirects: Can user control redirect destination?
// π¨ Open redirect res.redirect(req.query.next) // β Validate redirect const next = validateRedirectUrl(req.query.next) || '/home' res.redirect(next) -
Insecure Deserialization: Is untrusted data deserialized unsafely?
// π¨ Dangerous deserialization const obj = eval(userInput) const data = pickle.loads(untrustedData) // β Safe parsing const obj = JSON.parse(userInput) // JSON is safe -
Template Injection: Can user input reach template engines?
// π¨ SSTI const template = `Hello ${req.body.name}` render(template) // if template engine, dangerous // β Use data binding render('Hello {{name}}', { name: req.body.name }) -
XXE (XML External Entities): Is XML parsing configured safely?
// π¨ XXE vulnerable parser.parse(xmlInput) // β Disable external entities parser.parse(xmlInput, { noent: false, dtd: false })
Dependency Security
-
Known Vulnerabilities: Are dependencies scanned?
npm audit pip-audit snyk test -
Typosquatting: Are package names correct?
lodashvsloadashcolorsvscolour
Output Format
Return findings in structured format. Only report if confidence > 95%.
{
"findings": [
{
"file": "path/to/file.ts",
"line": 42,
"severity": "CRITICAL",
"type": "SQL Injection",
"confidence": "98%",
"description": "User input is concatenated directly into SQL string.",
"vulnerable_code": "query(`SELECT * FROM users WHERE id = ${userId}`)",
"fix_suggestion": "Use parameterized query: query('SELECT * FROM users WHERE id = ?', [userId])"
}
]
}
Severity Levels
| Severity | Criteria |
|---|---|
| CRITICAL | Remote code execution, SQL injection, auth bypass |
| HIGH | XSS, IDOR, sensitive data exposure |
| MEDIUM | Missing security headers, weak crypto |
| LOW | Information disclosure, missing best practices |
Quick Reference
β‘ Input Validation
β‘ SQL Injection - parameterized queries?
β‘ XSS - output encoding?
β‘ Command Injection - shell escaping?
β‘ Path Traversal - directory containment?
β‘ Boundary Checks - length/type/range?
β‘ Data Exposure
β‘ Hardcoded secrets?
β‘ Logging leaks?
β‘ Error message exposure?
β‘ Access Control
β‘ Auth on all endpoints?
β‘ Authorization verified?
β‘ IDOR possible?
β‘ Privilege escalation?
β‘ Crypto & Sessions
β‘ Strong algorithms?
β‘ Secure random?
β‘ Cookie flags set?
β‘ Server-Side
β‘ SSRF - URL allowlist?
β‘ Open redirects - validated?
β‘ Deserialization - safe?
β‘ Template injection - escaped?
β‘ XXE - disabled?
β‘ Dependencies
β‘ No known vulnerabilities?
β‘ Package names correct?
Important Notes
-
High Confidence Only: Do NOT report speculative issues. Only flag vulnerabilities you are >95% confident are exploitable.
-
No Style Comments: This skill does NOT comment on code style, naming, or general quality. Security only.
-
Assume Malice: Every input is potentially malicious. Every user is potentially an attacker.
-
Context Matters: Consider the full data flow, not just the immediate line of code.
Regex Patterns for Secret Detection
# AWS Access Key
AKIA[0-9A-Z]{16}
# AWS Secret Key
[0-9a-zA-Z/+]{40}
# Private Key
-----BEGIN (RSA |DSA |EC |OPENSSH )?PRIVATE KEY-----
# Generic API Key
[aA][pP][iI][-_]?[kK][eE][yY].*['\"][0-9a-zA-Z]{16,}['\"]
# Generic Secret
[sS][eE][cC][rR][eE][tT].*['\"][0-9a-zA-Z]{16,}['\"]