Sample report. Scan of OWASP NodeGoat, a deliberately vulnerable open-source practice app. This is unedited output from our scanner on the public OWASP NodeGoat repo, scanned 2026-10-16. NodeGoat is built to contain security flaws for training, so expect a lot of findings. It is not a customer app.
Why it matters: These look like real credentials (keys, tokens, private keys) committed to your repository. If they're real, anyone who can read the repo can use them.
Evidence: values redacted
Fix prompt · paste into Lovable / Cursor / Bolt
These lines look like committed secrets: artifacts/cert/server.key:1 (private-key); config/env/development.js:6 (generic-api-key). For each real secret, move it into a server-side environment variable, remove it from the code (and from git history with git filter-repo or BFG), and remind me to rotate it with the provider. Tell me which ones are harmless placeholders.
HIGHSM-003 · dependencies
64 dependencies with known high-severity vulnerabilities
📍 lockfiles
Why it matters: These packages have publicly known security bugs. Attackers use automated tools to find apps running vulnerable versions.
Why it matters: Without rate limits, bots can guess passwords endlessly or hammer your AI endpoints and run up a large API bill.
Fix prompt · paste into Lovable / Cursor / Bolt
Add rate limiting to these endpoints: app/routes/index.js → /login; app/routes/index.js → /signup. Use @upstash/ratelimit (serverless) or express-rate-limit (Express), limiting per IP and per user (e.g. 5 login attempts/minute, 20 AI requests/minute), and return HTTP 429 when exceeded.
MEDIUMSM-005 · dependencies
30 dependencies with known medium-severity vulnerabilities
📍 lockfiles
Why it matters: These packages have publicly known security bugs. Attackers use automated tools to find apps running vulnerable versions.
Upgrade these packages to patched versions (run `npm audit fix`, or bump them manually and check for breaking changes): ajv@6.10.0 (2 advisories), bl@1.0.3 (1 advisories), bl@1.1.2 (1 advisories), express@4.16.4 (2 advisories), got@6.7.1 (1 advisories), helmet-csp@1.2.2 (1 advisories), hosted-git-info@2.1.5 (1 advisories), hosted-git-info@2.7.1 (1 advisories), is-my-json-valid@2.15.0 (1 advisories), jsonpointer@4.0.0 (1 advisories), jsonpointer@4.0.1 (1 advisories), micromatch@2.3.11 (1 advisories) …. Then run the app's tests and the build again.
LOWSM-006 · secrets
1 secret-like value(s) in tests or example files
📍 config/env/test.js:6 (generic-api-key)
Why it matters: Probably test data or placeholders, but worth a quick look: real keys sometimes end up in examples and tests.
Evidence: values redacted
Fix prompt · paste into Lovable / Cursor / Bolt
Check these test/example lines and confirm none contain real credentials: config/env/test.js:6 (generic-api-key). Replace any real ones with obvious placeholders and rotate them.
LOWSM-007 · dependencies
11 dependencies with known low-severity vulnerabilities
📍 lockfiles
Why it matters: These packages have publicly known security bugs. Attackers use automated tools to find apps running vulnerable versions.
⚠️ ShipMender is an automated scan for common issues in AI-built apps. It can miss problems and report false positives, and it is not a substitute for a full professional security audit or penetration test.