auto-fix
[experimental] Auto-remediate verified findings by generating patches and optionally creating a PR
[beta] Pattern propagation - find all instances of a vulnerability pattern throughout the codebase
> /plugin marketplace add allsmog/vuln-scout > /plugin install vuln-scout@vuln-scout
How it fires
How this command gets triggered: by you, by Claude, or both.
/propagateContext preview
What this command does when you run it.
[beta] Pattern propagation - find all instances of a vulnerability pattern throughout the codebase
name: propagate description: "[beta] Pattern propagation - find all instances of a vulnerability pattern throughout the codebase" argument-hint: "<pattern-description> OR <file:line>" allowed-tools: - Glob - Grep - Read - TodoWrite
When you find one vulnerability, search for the same pattern everywhere else. Developers often make the same mistake repeatedly.
> "If you find one bug, look for the same bug everywhere else." - Common Bug Bounty Wisdom
Why pattern propagation works: 1. Developers copy/paste code 2. Codebases have consistent (bad) patterns 3. Same developer makes same mistakes 4. Frameworks encourage certain anti-patterns 5. One finding often multiplies into many
---
/vuln-scout:propagate "string concatenation in SQL queries"
/vuln-scout:propagate src/api/users.py:45
The command will analyze the code at that location and extract the generalizable pattern.
---
1. Read the specified file and line 2. Analyze the vulnerable code 3. Identify the anti-pattern 4. Extract searchable characteristics
Example analysis:
# Given: src/api/users.py:45
# Code: query = f"SELECT * FROM users WHERE id = {user_id}"
# Extracted pattern:
# - f-string or format() with SQL keywords
# - Variable interpolation in query string
# - Missing parameterization1. Parse the vulnerability description 2. Map to known vulnerability patterns 3. Generate search patterns
Example mapping:
Description: "string concatenation in SQL queries"
Patterns:
- f"SELECT.*{
- "SELECT.*" +
- "SELECT.*%s" %
- "SELECT.*".format(
- query.*=.*+.*user---
# f-strings with SQL
grep -rniE 'f"(SELECT|INSERT|UPDATE|DELETE|FROM|WHERE).*\{' --include="*.py"
# String concatenation with SQL
grep -rniE '"(SELECT|INSERT|UPDATE|DELETE).*"\s*\+' --include="*.py" --include="*.java" --include="*.js"
# Format strings with SQL
grep -rniE '(SELECT|INSERT|UPDATE|DELETE).*%s.*%' --include="*.py"
grep -rniE '\.format\(.*\).*(SELECT|INSERT|UPDATE|DELETE)' --include="*.py"# Shell commands with user input grep -rniE '(os\.system|subprocess\.|exec\(|shell_exec|system\().*\+' --include="*.py" --include="*.php" # Backticks or command substitution grep -rniE '`.*\$|`.*\+' --include="*.php" --include="*.rb"
# Unescaped output
grep -rniE 'innerHTML\s*=.*\+|document\.write\(' --include="*.js" --include="*.ts"
# Template without escaping
grep -rniE '\{\{.*\|safe\}\}|\{!!.*!!\}' --include="*.html" --include="*.blade.php"# File operations with user input grep -rniE '(open|read|write|include|require)\s*\(.*\+' --include="*.py" --include="*.php" # Path joining with user input grep -rniE 'os\.path\.join.*request|path\.join.*req\.' --include="*.py" --include="*.js"
# Direct object reference without ownership check grep -rniE '\.(get|find|findById)\s*\(\s*\w+_id\s*\)' --include="*.py" --include="*.js" --include="*.java" # Missing filter by user grep -rniE 'query\.(get|filter_by)\s*\([^)]*id[^)]*\)' --include="*.py" -A 2 | grep -v "user_id"
---
Run generated grep patterns across the codebase:
Remove false positives:
Organize findings:
---
For each match: 1. Read surrounding context 2. Trace input source 3. Check for sanitization 4. Assess exploitability
| Category | Criteria | |----------|----------| | Confirmed | Same pattern, exploitable | | Likely | Same pattern, needs verification | | Possible | Similar pattern, unclear | | False Positive | Pattern matched but safe |
Rank by: 1. Input proximity (direct user input = highest) 2. Authentication requirement 3. Impact severity 4. Ease of exploitation
---
# Pattern Propagation Results
## Original Finding
**Location**: src/api/users.py:45
**Pattern**: SQL injection via f-string interpolation
**Code**:
```python
query = f"SELECT * FROM users WHERE id = {user_id}"**Anti-Pattern**: String interpolation in SQL queries **Search Patterns Used**:
query = f"SELECT * FROM products WHERE category = {category}"query = f"UPDATE orders SET status = {status} WHERE id = {order_id}"query = "SELECT * FROM reports WHERE date = '%s'" % date_str
# Uses parameterized query
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))| Status | Count | |--------|-------| | Confirmed | 2 | | Like
AI-powered whitebox penetration testing plugin for Claude Code. 9 languages, 22 skills, 7 autonomous agents. STRIDE threat modeling, OWASP 2025 coverage, polyglot monorepo support.
Repo: allsmog/vuln-scout
[experimental] Auto-remediate verified findings by generating patches and optionally creating a PR
[experimental] Create a custom Semgrep detection rule from a confirmed vulnerability pattern
[stable] Compare security posture between two git refs to find new/fixed vulnerabilities and track regression
[stable] End-to-end security audit with hotspot-aware framework pivots, shared findings.json schema, and CI-friendly workflow flags
[beta] Audit a decompiled Android target — scans jadx_out/sources + apktool_out together and merges findings