From soundcheck
Detects SQL, command, and template injection caused by user input reaching an interpreter without parameterization. Checks concatenated query strings, shell commands, eval/exec calls, and unsafe template usage.
How this skill is triggered — by the user, by Claude, or both
Slash command
/soundcheck:injectionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Protects against SQL, command, and template injection caused by passing
Protects against SQL, command, and template injection caused by passing
user-controlled data to an interpreter without sanitization. Exploitation leads to
full database read/write, remote code execution, and data exfiltration.
For NoSQL-specific injection (MongoDB operator injection, $where), see nosql-injection.
"SELECT * FROM users WHERE id = " + userId — user input concatenated into SQLexec("convert " + filename) — shell expansion allows ; rm -rf /eval(userInput) — arbitrary code execution from user-supplied stringTemplate("Hello " + name) — template body built from user inputFor each vulnerable call site, apply the appropriate control:
Environment(autoescape=True) (bool literal, not select_autoescape() with from_string()). Go: html/template, never text/template for HTTP output. Java FreeMarker: cfg.setOutputFormat(HTMLOutputFormat.INSTANCE). Rust: handlebars (escapes by default). Never build the template body from user input.Flag the vulnerable call site, explain the risk and the correct fix pattern, then continue with the original task.
Confirm the following properties hold (language-agnostic):
eval/exec, JS eval/new Function, etc. removed — not replaced with a safer-looking variant of the same function)render_template, Go html/template, Rust handlebars, Jinja2 Environment(autoescape=True) — NOT Jinja2 Template() direct, NOT Go text/template), and user values are passed through the engine's parameter interface — never by building the template body from user inputnpx claudepluginhub thejefflarson/soundcheck --plugin soundcheckAudits Python code for injection vulnerabilities including command execution (subprocess, os.system), SQL queries (cursor.execute, sqlalchemy.text), eval/exec calls, and template rendering (Jinja2, Mako SSTI).
Prevents SQL, NoSQL, and command injection by enforcing parameterized queries, input validation, and safe shell execution patterns.
Refuses SQL, NoSQL, LDAP, and XPath queries that concatenate user input. Suggests parameterized replacements for PostgreSQL, MySQL, Prisma, SQLAlchemy, and more.