Injection
SQL/NoSQL/OS command/LDAP/template. String-built queries or shell from untrusted input. Fix: parameterize, use the platform's safe API.

the VAPT dog. Vulnerability assessment for source code, web apps, APKs and IPAs, then the report. Active tests stay in scope.
ExploitGET /users/1 OR 1=1 dumps every user
FixSmallest change suggested
$ /watchdog-go-vapt codeA security-review lens that stays on all session, plus on-demand audits.
The always-on lens flags injection, broken authz/authn, secrets, SSRF, path traversal, unsafe deserialization, weak crypto and insecure defaults as you work.
SQL/NoSQL/OS command/LDAP/template. String-built queries or shell from untrusted input. Fix: parameterize, use the platform's safe API.
missing ownership/role check per object (IDOR/BOLA), client-trusted role, endpoints with no guard.
weak token checks (`<` vs `<=` on expiry), predictable ids, missing signature verification, fixation.
hardcoded keys, tokens, passwords in source, config, history. Redact in any output; never echo full secret.
user-controlled URLs or paths reaching fetch/file APIs.
pickle, native deserialize, `eval`, template eval on untrusted data.
MD5/SHA1 for passwords, ECB, static IV, homemade crypto, no constant-time compare.
debug on, permissive CORS/CSP, verbose errors, TLS verify off.
Runs these scanners when installed, then reads the code they can't understand:
Static audit of a source repo (SAST + dependency CVEs + secrets)
Assessment of a running web app (scope-gated)
Static Android APK audit (OWASP MASVS)
Static iOS IPA audit (OWASP MASVS)
Merge the session's findings into one ranked report
Also runs in these bundles.
Its test target holds a deliberately vulnerable Express API (18 planted vulns, 2 decoys) and an answer key. First run of /watchdog-go-vapt code (2026-10-27, one run per model, skill text given to a subagent):
Authorized, in-scope targets only. Static review of code the user owns is fine. Active testing (requests/scans/fuzzing against a live system) needs the target in the user's written scope — if unclear, ask and wait.
Findings first. Write PoC/exploit code only when the user asks AND the target is in scope.
Root cause over symptom: grep every caller before you call something safe.
End each review with: what you did not check, and the top risk the user must act on.
Malinois is Watchdog's vapt dog for Claude Code. It looks for Injection, Broken authz, Broken authn/session, Secrets, SSRF / path traversal, Unsafe deserialization / eval, Crypto and Insecure defaults. Each finding comes with the exact file and line, how it could be abused, and the smallest fix.
Install Watchdog with /plugin marketplace add watchdoglab/watchdog and /plugin install watchdog@watchdog, then run /watchdog-go-vapt. It also has /watchdog-go-vapt web, /watchdog-go-vapt apk, /watchdog-go-vapt ipa and /watchdog-go-vapt report. Its lens also stays on while you code and flags risky lines as they're written.
When they're installed, Malinois runs pip-audit, osv-scanner, govulncheck, bundler-audit, gitleaks and trufflehog, then reads the code those scanners can't understand. Anything it couldn't check is listed under Not checked in the report.
Yes. Its first rule: Authorized, in-scope targets only. Static review of code the user owns is fine. Active testing (requests/scans/fuzzing against a live system) needs the target in the user's written scope — if unclear, ask and wait. Secrets it finds are reported by location and type only, never printed. Watchdog is free and open source (MIT).