Security infrastructure your AI can't be — deterministic, daily CVE intel past your model's training cutoff, whole-repo-aware, author-independent, and shift-left: secure_prompt secures the prompt before code generation. The security MCP for vibe coding: 450 rules, 39 tools, CLI + doctor for Next.js, Supabase, Clerk, Stripe, Prisma, Hono & MCP.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http · sse
verified
reported
listed in the official MCP registry counts 39 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
analyze_cross_file_dataflow
-
analyze_dataflow
-
audit_config
-
audit_mcp_config
-
auth_coverage
-
check_code
-
check_command
-
check_dependencies
-
check_package_health
-
check_project
-
compliance_report
-
deep_scan
-
explain_remediation
-
export_sarif
-
fix_code
-
full_audit
-
generate_policy
-
get_security_docs
-
guardvibe_doctor
-
policy_check
-
remediation_plan
-
repo_security_posture
-
review_pr
-
scan_changed_files
-
scan_config_change
-
scan_dependencies
-
scan_directory
-
scan_file
-
scan_hallucinated_packages
-
scan_host_config
-
scan_secrets
-
scan_secrets_history
-
scan_staged
-
secure_prompt
-
secure_this
-
security_stats
-
security_workflow
-
verify_fix
-
verify_remediation
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v3.29.0 · analyzer v33 · 3w ago
skills & prompt files 1
- agent-rules goklab-guardvibe-4eae3b7/CLAUDE.md
danger signals2
- suspicious endpoint us.i.posthog.com (telemetry) goklab-guardvibe-4eae3b7/src/tools/generate-policy.ts :189
directives["script-src"].push("https://us.i.posthog.com", "https://eu.i.posthog.com"); - committed secret Anthropic key goklab-guardvibe-4eae3b7/tests/rules/ai-differentiation.test.ts :41
sk-ant…(53 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 238
filesystem 92
- fs (weak) goklab-guardvibe-4eae3b7/scripts/intel-check.mjs :23
import { readdirSync, readFileSync } from "node:fs"; - fs goklab-guardvibe-4eae3b7/src/cli/audit.ts :6
import { writeFileSync, existsSync, mkdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/auth-coverage.ts :6
import { readdirSync, readFileSync, statSync, writeFileSync, existsSync, mkdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/ci.ts :7
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/compliance.ts :6
import { writeFileSync, existsSync, mkdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/deep-scan.ts :5
import { readFileSync, statSync } from "node:fs"; - fs goklab-guardvibe-4eae3b7/src/cli/doctor.ts :6
import { writeFileSync, existsSync, mkdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/fix.ts :5
import { readFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/hook.ts :7
import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync, unlinkSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/init.ts :7
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/scan.ts :6
import { readFileSync, writeFileSync, existsSync, mkdirSync, statSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/secure-this.ts :11
import { readFileSync, writeFileSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/cli/slopscan.ts :6
import { statSync } from "node:fs"; - fs goklab-guardvibe-4eae3b7/src/data/rules/ai-security.ts :110
'import path from "path";\nconst ALLOWED_BASE = "/data/workspace";\nconst resolved = path.resolve(ALLOWED_BASE, args.filePath);\nif (!resolved.startsWith(ALLOWED_BASE)) throw new Error("Path traversal - fs goklab-guardvibe-4eae3b7/src/data/rules/cve-versions.ts :570
'// package.json\n"@anthropic-ai/sdk": "^0.91.1" // or latest\n\n// Harden Memory Tool root (server bootstrap)\nimport { chmodSync, mkdirSync } from "node:fs";\nmkdirSync(memoryRoot, { recursive: tru - fs goklab-guardvibe-4eae3b7/src/data/rules/modern-stack.ts :586
'import { randomUUID } from "crypto";\nimport path from "path";\n\n// Generate safe filename\nconst ext = path.extname(file.name).toLowerCase();\nconst ALLOWED_EXT = [".jpg", ".jpeg", ".png", ".webp", - fs goklab-guardvibe-4eae3b7/src/lib/stats.ts :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/plugins/loader.ts :1
import { readdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/audit-config.ts :1
import { readFileSync, existsSync, readdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/audit-mcp-config.ts :1
import { readFileSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/check-command.ts :3
import { existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/compliance-report.ts :1
import { readFileSync, statSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/doctor.ts :1
import { readFileSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/export-sarif.ts :2
import { readFileSync, statSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/fix-code.ts :298
return "import path from \"path\";\nconst BASE = path.resolve(\"/data/safe\");\nconst resolved = path.resolve(BASE, userPath);\nif (!resolved.startsWith(BASE + path.sep)) throw new Error(\"Path traver - fs goklab-guardvibe-4eae3b7/src/tools/full-audit.ts :13
import { readdirSync, readFileSync, statSync, existsSync } from "node:fs"; - fs goklab-guardvibe-4eae3b7/src/tools/generate-policy.ts :1
import { readFileSync, existsSync, readdirSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/policy-check.ts :1
import { readFileSync, statSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/reachability.ts :19
import { readdirSync, statSync, readFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/repo-posture.ts :1
import { readdirSync, readFileSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/scan-dependencies.ts :1
import { readFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/scan-directory.ts :2
import { readFileSync, statSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/scan-hallucinated.ts :26
import { readdirSync, statSync, readFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/scan-host-config.ts :1
import { readFileSync, existsSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/tools/scan-secrets.ts :1
import { existsSync, readdirSync, readFileSync, statSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/utils/config.ts :1
import { readFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/utils/ignore.ts :11
import { readFileSync } from "fs"; - fs goklab-guardvibe-4eae3b7/src/utils/update-check.ts :15
import { readFileSync, writeFileSync, mkdirSync } from "node:fs"; - fs goklab-guardvibe-4eae3b7/src/utils/walk-directory.ts :6
import { readdirSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/benchmarks/performance-1000.test.ts :9
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/audit.test.ts :3
import { mkdirSync, rmSync, writeFileSync, existsSync, readFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/auth-coverage-cli-coverage.test.ts :3
import { mkdtempSync, mkdirSync, rmSync, writeFileSync, readFileSync, existsSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/ci.test.ts :3
import { mkdirSync, rmSync, existsSync, readFileSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/cli-coverage.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/cli.test.ts :3
import { mkdirSync, readFileSync, existsSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/compliance-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync, existsSync, readFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/deep-scan-cli-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/doctor-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/doctor.test.ts :3
import { mkdirSync, rmSync, writeFileSync, existsSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/fix-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/format-matrix.test.ts :7
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/hook.test.ts :3
import { mkdirSync, rmSync, existsSync, readFileSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/init.test.ts :3
import { mkdirSync, rmSync, existsSync, readFileSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/scan.test.ts :3
import { mkdirSync, rmSync, writeFileSync, existsSync, readFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/slopscan.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/stabilization.test.ts :6
import { mkdirSync, rmSync, writeFileSync, existsSync, readFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/cli/staged-gate.test.ts :7
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/meta/consistency.test.ts :12
import { readFileSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/plugins/integration.test.ts :3
import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/rules/modern-stack.test.ts :566
`const name = req.file.originalname;\nawait fs.writeFile(\`/uploads/\${name}\`, buffer);`, - fs (weak) goklab-guardvibe-4eae3b7/tests/smoke.test.ts :7
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/audit-config.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/audit-mcp-config.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/auditability.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync, readFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/check-code.test.ts :728
const code = `import * as fs from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/compliance-report.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/config.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/export-sarif.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/full-audit-coverage.test.ts :3
import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/generate-policy.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/policy-check.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/reachability.test.ts :29
'import fs from "node:fs";', // ignored (builtin) - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/repo-posture-coverage.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/repo-posture.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/review-pr.test.ts :4
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-dependencies-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-dependencies.test.ts :3
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-directory.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-hallucinated-fp.test.ts :9
import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-hallucinated.test.ts :80
const code = `import fs from "fs";\nimport x from "node:crypto";\nimport y from "@/lib/util";\nimport z from "~/config";\nimport real from "lodash";`; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-host-config-coverage.test.ts :3
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-host-config.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets-coverage.test.ts :4
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets-history-coverage.test.ts :4
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets-history.test.ts :4
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-staged.test.ts :4
import { mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/tools/security-stats-coverage.test.ts :3
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/utils/ignore.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/utils/stats-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync, mkdirSync, readFileSync, existsSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/utils/update-check-coverage.test.ts :3
import { mkdtempSync, rmSync, writeFileSync, mkdirSync, readFileSync, existsSync } from "node:fs"; - fs (weak) goklab-guardvibe-4eae3b7/tests/utils/walk-directory.test.ts :3
import { mkdirSync, rmSync, writeFileSync } from "fs";
shell / exec 36
- shell (weak) goklab-guardvibe-4eae3b7/scripts/release-gate.mjs :14
import { execSync } from "node:child_process"; - shell goklab-guardvibe-4eae3b7/src/cli/init.ts :133
const hookCommand = `node -e "const fs=require('fs');let s='';try{s=fs.readFileSync(0,'utf8')}catch(e){}try{const p=(JSON.parse(s).tool_input||{}).file_path;if(p)require('child_process').execFileSync( - shell goklab-guardvibe-4eae3b7/src/cli/scan.ts :99
const { execFileSync } = await import("child_process"); - shell goklab-guardvibe-4eae3b7/src/data/rules/ai-security.ts :125
'// Use spawn with argument array (no shell interpretation)\nimport { spawn } from "child_process";\nconst allowed = /^[a-zA-Z0-9._-]+$/;\nif (!allowed.test(args.filename)) throw new Error("Invalid fi - shell goklab-guardvibe-4eae3b7/src/data/rules/core.ts :84
fix: "Avoid shell commands with user input. Use allowlists and input validation. Prefer spawn() with array arguments. Python: use subprocess.run([...]) with list arguments, never shell=True with user - shell goklab-guardvibe-4eae3b7/src/index.ts :730
const { execFileSync } = await import("child_process"); - shell goklab-guardvibe-4eae3b7/src/tools/cross-file-taint.ts :368
// Bare child_process exec()/execSync() (shell-invoking). Lookbehind excludes method - shell goklab-guardvibe-4eae3b7/src/tools/diff-aware.ts :12
import { execFileSync } from "child_process"; - shell goklab-guardvibe-4eae3b7/src/tools/review-pr.ts :1
import { execFileSync } from "child_process"; - shell goklab-guardvibe-4eae3b7/src/tools/scan-secrets-history.ts :1
import { execFileSync } from "child_process"; - shell goklab-guardvibe-4eae3b7/src/tools/scan-secrets.ts :3
import { execFileSync } from "child_process"; - shell goklab-guardvibe-4eae3b7/src/tools/scan-staged.ts :1
import { execFileSync } from "child_process"; - shell goklab-guardvibe-4eae3b7/src/tools/secure-this.ts :94
`import { execFileSync } from "node:child_process";`, - shell goklab-guardvibe-4eae3b7/src/tools/taint-analysis.ts :56
// Command injection: bare child_process exec()/execSync() (the shell-invoking forms). - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/audit.test.ts :5
import { spawnSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/ci.test.ts :5
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/cli-coverage.test.ts :5
import { execFileSync, spawnSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/cli.test.ts :5
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/doctor.test.ts :5
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/format-matrix.test.ts :9
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/hook.test.ts :5
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/init.test.ts :5
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/scan.test.ts :5
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/slopscan.test.ts :5
import { spawnSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/stabilization.test.ts :8
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/cli/staged-gate.test.ts :9
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-security.test.ts :59
const code = 'execute: async ({ command }) => {\n return require("child_process").exec(command);\n}'; - shell (weak) goklab-guardvibe-4eae3b7/tests/smoke.test.ts :9
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/file-security.test.ts :16
"execSync(cmd);", - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/full-audit.test.ts :279
sectionFindings: [{ ruleId: "VG011", severity: "critical", file: "index.js", line: 18, name: "Command injection", description: "exec with user input", fix: "Use spawn() with array args" }] }, - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/review-pr.test.ts :3
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets-coverage.test.ts :3
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets-history-coverage.test.ts :3
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-secrets-history.test.ts :3
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/scan-staged.test.ts :3
import { execFileSync } from "child_process"; - shell (weak) goklab-guardvibe-4eae3b7/tests/tools/taint-analysis.test.ts :45
"execSync(cmd);",
network 27
- net (weak) goklab-guardvibe-4eae3b7/scripts/intel-check.mjs :39
const res = await fetch("https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json", { - net goklab-guardvibe-4eae3b7/src/cli/init.ts :75
- Never pass user-controlled URLs to fetch() without allowlist validation - net goklab-guardvibe-4eae3b7/src/data/framework-guides.ts :140
const res = await fetch(url, { - net goklab-guardvibe-4eae3b7/src/data/rules/ai-security.ts :95
'// Validate URL before fetch in MCP tool\nconst allowedHosts = ["api.example.com", "cdn.example.com"];\nconst parsed = new URL(args.url);\nif (!allowedHosts.includes(parsed.hostname)) throw new Error - net goklab-guardvibe-4eae3b7/src/data/rules/ai-tool-runtime.ts :19
'// Sanitize external content in MCP tool response\nfunction sanitizeToolOutput(text: string): string {\n return text\n .replace(/<[^>]*>/g, "")\n .replace(/[\\x00-\\x08\\x0B-\\x1F]/g, "")\n - net goklab-guardvibe-4eae3b7/src/data/rules/core.ts :448
"User-controlled input is passed directly to fetch(), axios, or http.request() as the URL. Attackers can make the server request internal services (169.254.169.254 for cloud metadata, localhost admin - net goklab-guardvibe-4eae3b7/src/data/rules/cve-versions.ts :127
fix: "Upgrade node-fetch to 2.6.7+ or 3.1.1+. Consider using native fetch (Node.js 18+).", - net goklab-guardvibe-4eae3b7/src/data/rules/firebase.ts :86
fixCode: '// Server-side: generate custom token\nimport { getAuth } from "firebase-admin/auth";\nconst customToken = await getAuth().createCustomToken(uid);\n\n// Client-side: only use tokens from you - net goklab-guardvibe-4eae3b7/src/data/rules/react-native.ts :25
fixCode: '// Validate token from deep link server-side\nconst { token } = parseURL(url);\nconst res = await fetch("/api/verify-token", { method: "POST", body: JSON.stringify({ token }) });\nif (!res.o - net goklab-guardvibe-4eae3b7/src/tools/check-code.ts :743
// Skip SSRF for fetch() calls that only use relative URLs or known-safe patterns - net goklab-guardvibe-4eae3b7/src/tools/check-package-health.ts :120
fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}`, { signal: AbortSignal.timeout(5000) }), - net goklab-guardvibe-4eae3b7/src/tools/deep-scan.ts :227
const res = await fetch("https://api.anthropic.com/v1/messages", { - net goklab-guardvibe-4eae3b7/src/tools/fix-code.ts :244
if (rule.id === "VG705") return 'import { fetch } from "react-native-ssl-pinning";\nawait fetch(url, { sslPinning: { certs: ["cert"] } });'; - net goklab-guardvibe-4eae3b7/src/tools/taint-analysis.ts :270
// (`fetch(`${WEBAPP_URL}/api?${q}`)`) is not flagged — only an attacker-controlled host - net goklab-guardvibe-4eae3b7/src/utils/osv-client.ts :26
const response = await fetch("https://api.osv.dev/v1/query", { - net goklab-guardvibe-4eae3b7/src/utils/update-check.ts :74
const res = await fetch(NPM_URL, { signal: ctrl.signal }); - net (weak) goklab-guardvibe-4eae3b7/tests/cli/deep-scan-cli-coverage.test.ts :100
const f = tmpFile("route.ts", "export async function GET(req){ return fetch(req.url) }"); - net (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-differentiation.test.ts :93
const r = await fetch(url); - net (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-security.test.ts :87
const code = 'server.tool("fetchUrl", async (args) => {\n const res = await fetch(args.url);\n return res.text();\n});'; - net (weak) goklab-guardvibe-4eae3b7/tests/rules/auth.test.ts :83
testRule("VG426", '/admin/users\nexport async function GET(req) {\n const data = await fetch("/api");\n return Response.json(data);\n}', true); - net (weak) goklab-guardvibe-4eae3b7/tests/rules/core.test.ts :294
testRule("VG090", "fetch(req.body.url)", "javascript", true); - net (weak) goklab-guardvibe-4eae3b7/tests/rules/supply-chain.test.ts :197
testRule("VG1075", "fetch('https://getsession.org/relay');", true); - net (weak) goklab-guardvibe-4eae3b7/tests/tools/check-code.test.ts :209
it("does NOT flag client-component fetch (no server SSRF surface)", () => { - net (weak) goklab-guardvibe-4eae3b7/tests/tools/reachability.test.ts :21
'import axios from "axios";', - net (weak) goklab-guardvibe-4eae3b7/tests/tools/taint-analysis.test.ts :151
const code = ["const target = req.query.url;", "await fetch(target);"].join("\n"); - net (weak) goklab-guardvibe-4eae3b7/tests/tools/vg120-narrowing.test.ts :10
const code = 'const apiUrl = "https://api.example.com/v1";\nawait fetch(apiUrl, { method: "POST" });\n'; - net (weak) goklab-guardvibe-4eae3b7/tests/utils/update-check-coverage.test.ts :46
// Allow the fire-and-forget fetch().then() chain to settle.
secrets 43
- secrets (weak) goklab-guardvibe-4eae3b7/scripts/intel-check.mjs :79
if (process.env.GITHUB_TOKEN) headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`; - secrets goklab-guardvibe-4eae3b7/src/cli/deep-scan.ts :58
if (!process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) { - secrets goklab-guardvibe-4eae3b7/src/data/framework-guides.ts :105
secret: process.env.SESSION_SECRET, - secrets goklab-guardvibe-4eae3b7/src/data/rules/advanced-security.ts :501
'// BAD: timing leak\nif (secret !== process.env.CRON_SECRET) return false;\n\n// GOOD: constant-time comparison\nimport { timingSafeEqual } from "crypto";\nfunction safeCompare(a: string, b: string): - secrets goklab-guardvibe-4eae3b7/src/data/rules/ai-security.ts :342
'// app/api/gemini/route.ts (server-only):\nimport { GoogleGenerativeAI } from "@google/generative-ai";\nconst genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);\nexport async function POST( - secrets goklab-guardvibe-4eae3b7/src/data/rules/ai-tool-runtime.ts :217
'// SAFE — explicit origin allowlist + bearer auth:\napp.use(cors({ origin: ["http://127.0.0.1:6274", "https://app.example.com"], credentials: true }));\napp.use((req, res, next) => {\n if (req.heade - secrets goklab-guardvibe-4eae3b7/src/data/rules/auth.ts :210
'// Server-side only (API route or Server Action)\nconst supabaseAdmin = createClient(url, process.env.SUPABASE_SERVICE_ROLE_KEY!);\nawait supabaseAdmin.auth.admin.deleteUser(userId);', - secrets goklab-guardvibe-4eae3b7/src/data/rules/core.ts :15
fix: "Use environment variables (process.env.SECRET) or a secrets manager. Never commit credentials to source code.", - secrets goklab-guardvibe-4eae3b7/src/data/rules/database.ts :16
'// Option 1: Service role key (admin access)\nconst supabase = createClient(\n process.env.SUPABASE_URL!,\n process.env.SUPABASE_SERVICE_ROLE_KEY!\n);\n\n// Option 2: SSR client with cookies (RLS-a - secrets goklab-guardvibe-4eae3b7/src/data/rules/deployment.ts :47
'// app/api/cron/route.ts\nexport async function GET(request: Request) {\n const authHeader = request.headers.get("authorization");\n if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {\n r - secrets goklab-guardvibe-4eae3b7/src/data/rules/firebase.ts :25
fixCode: '// Server-side only (API route or Server Action)\nimport { initializeApp, cert } from "firebase-admin/app";\ninitializeApp({ credential: cert(JSON.parse(process.env.FIREBASE_SERVICE_ACCOUNT_ - secrets goklab-guardvibe-4eae3b7/src/data/rules/modern-stack.ts :85
'// Add at the very top of server-only modules\nimport "server-only";\n\n// Now this file cannot be imported by Client Components\nexport async function getSecretData() {\n const key = process.env.SE - secrets goklab-guardvibe-4eae3b7/src/data/rules/nextjs.ts :16
'// Move to a Server Component (no \'use client\')\nexport default async function Page() {\n const secret = process.env.SECRET_KEY;\n return <ClientComponent data={safeData} />;\n}', - secrets goklab-guardvibe-4eae3b7/src/data/rules/other-services.ts :25
fixCode: '// Server-side only\nimport twilio from "twilio";\nconst client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);\n\n// Validate phone number before sending\nconst pho - secrets goklab-guardvibe-4eae3b7/src/data/rules/payments.ts :16
"// Server-side only (API route or Server Action)\nimport Stripe from 'stripe';\nconst stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);", - secrets goklab-guardvibe-4eae3b7/src/data/rules/react-native.ts :111
fixCode: '// app.config.ts — only public values in extra\nexport default {\n extra: {\n apiUrl: process.env.EXPO_PUBLIC_API_URL, // OK: public\n // NEVER: apiSecret: process.env.API_SECRET\n } - secrets goklab-guardvibe-4eae3b7/src/data/rules/services.ts :14
fixCode: '"use server";\nimport { Resend } from "resend";\nconst resend = new Resend(process.env.RESEND_API_KEY);', - secrets goklab-guardvibe-4eae3b7/src/data/rules/web-security.ts :14
fixCode: "// Verify webhook signature\nimport crypto from 'crypto';\nconst sig = request.headers.get('x-webhook-signature');\nconst expected = crypto.createHmac('sha256', process.env.WEBHOOK_SECRET!)\ - secrets goklab-guardvibe-4eae3b7/src/tools/audit-config.ts :287
fix: "Verify the authorization header against process.env.CRON_SECRET in the route handler.", - secrets goklab-guardvibe-4eae3b7/src/tools/deep-scan.ts :216
const anthropicKey = process.env.ANTHROPIC_API_KEY; - secrets goklab-guardvibe-4eae3b7/src/tools/fix-code.ts :165
return "import crypto from 'crypto';\nconst sig = request.headers.get('x-signature');\nconst expected = crypto.createHmac('sha256', process.env.WEBHOOK_SECRET!)\n .update(body).digest('hex');\nif (si - secrets (weak) goklab-guardvibe-4eae3b7/tests/benchmarks/realistic-projects.test.ts :157
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!); - secrets (weak) goklab-guardvibe-4eae3b7/tests/cli/cli.test.ts :130
writeFileSync(safePath, 'const x = process.env.API_KEY;\nconsole.log("hello");', "utf-8"); - secrets (weak) goklab-guardvibe-4eae3b7/tests/cli/deep-scan-cli-coverage.test.ts :23
const realAnthropic = process.env.ANTHROPIC_API_KEY; - secrets (weak) goklab-guardvibe-4eae3b7/tests/cli/stabilization.test.ts :64
writeFileSync(join(TEST_DIR, "test.ts"), 'const x = process.env.API_KEY;\n', "utf-8"); - secrets (weak) goklab-guardvibe-4eae3b7/tests/fp-detection/realistic-nextjs-supabase.ts :155
const secret = process.env.RESET_SECRET; - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-benchmark-semantic.test.ts :147
`function verifyCron(req: Request) {\n const secret = req.headers.get("x-cron-secret");\n if (secret !== process.env.CRON_SECRET) return false;\n return true;\n}`, - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-benchmark.test.ts :90
`import { createClient } from "@supabase/supabase-js";\nconst supabase = createClient(url, process.env.SUPABASE_SERVICE_ROLE_KEY!);`, - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-differentiation.test.ts :213
it("detects with process.env.GEMINI_API_KEY", () => { - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/auth.test.ts :30
testRule("VG422", '"use client";\nconst key = process.env.CLERK_SECRET_KEY;', true); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/core.test.ts :29
testRule("VG001", "const password = process.env.PASSWORD", "javascript", false); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/database.test.ts :47
testRule("VG437", '"use client";\nconst key = process.env.SUPABASE_SERVICE_ROLE_KEY;', true); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/modern-stack.test.ts :62
`import { NextResponse } from 'next/server';\nconst key = process.env.SECRET_KEY;\nconst users = await prisma.user.findMany();`, - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/nextjs.test.ts :19
testRule("VG400", '"use client";\nconst key = process.env.SECRET_KEY;', true); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/other-services.test.ts :25
testRule("VG801", '"use client";\nconst sid = process.env.TWILIO_AUTH_TOKEN;', true); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/payments.test.ts :23
testRule("VG600", "const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);", false); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/services.test.ts :18
testRule("VG620", '"use client";\nconst key = process.env.RESEND_API_KEY;', true); - secrets (weak) goklab-guardvibe-4eae3b7/tests/rules/web-security.test.ts :33
testRule("VG651", "const webhookSecret = process.env.WEBHOOK_SECRET", false); - secrets (weak) goklab-guardvibe-4eae3b7/tests/tools/audit-config.test.ts :159
if (auth !== \`Bearer \${process.env.CRON_SECRET}\`) { - secrets (weak) goklab-guardvibe-4eae3b7/tests/tools/check-code.test.ts :119
`process.env.DAILY_API_KEY = "MOCK_DAILY_API_KEY";`, - secrets (weak) goklab-guardvibe-4eae3b7/tests/tools/deep-scan-coverage.test.ts :33
savedAnthropic = process.env.ANTHROPIC_API_KEY; - secrets (weak) goklab-guardvibe-4eae3b7/tests/tools/deep-scan.test.ts :166
const savedAnthropic = process.env.ANTHROPIC_API_KEY; - secrets (weak) goklab-guardvibe-4eae3b7/tests/tools/vg964-narrowing.test.ts :8
"const token = process.env.API_SECRET;",
database 2
- db goklab-guardvibe-4eae3b7/src/data/rules/other-services.ts :61
fixCode: 'import { MongoClient } from "mongodb";\nconst client = new MongoClient(process.env.MONGODB_URI!);', - db (weak) goklab-guardvibe-4eae3b7/tests/rules/modern-stack.test.ts :86
`const prisma = require('@prisma/client');\nconst key = process.env.SECRET_KEY;\nawait prisma.user.findMany();`,
tool registrations 39
- check_code goklab-guardvibe-4eae3b7/src/index.ts :76
- check_project goklab-guardvibe-4eae3b7/src/index.ts :104
- get_security_docs goklab-guardvibe-4eae3b7/src/index.ts :143
- check_dependencies goklab-guardvibe-4eae3b7/src/index.ts :171
- scan_directory goklab-guardvibe-4eae3b7/src/index.ts :202
- scan_dependencies goklab-guardvibe-4eae3b7/src/index.ts :237
- scan_hallucinated_packages goklab-guardvibe-4eae3b7/src/index.ts :262
- scan_secrets goklab-guardvibe-4eae3b7/src/index.ts :287
- scan_staged goklab-guardvibe-4eae3b7/src/index.ts :314
- compliance_report goklab-guardvibe-4eae3b7/src/index.ts :341
- export_sarif goklab-guardvibe-4eae3b7/src/index.ts :358
- check_package_health goklab-guardvibe-4eae3b7/src/index.ts :372
- fix_code goklab-guardvibe-4eae3b7/src/index.ts :391
- secure_this goklab-guardvibe-4eae3b7/src/index.ts :421
- audit_config goklab-guardvibe-4eae3b7/src/index.ts :443
- generate_policy goklab-guardvibe-4eae3b7/src/index.ts :457
- review_pr goklab-guardvibe-4eae3b7/src/index.ts :471
- scan_secrets_history goklab-guardvibe-4eae3b7/src/index.ts :489
- policy_check goklab-guardvibe-4eae3b7/src/index.ts :504
- analyze_dataflow goklab-guardvibe-4eae3b7/src/index.ts :519
- analyze_cross_file_dataflow goklab-guardvibe-4eae3b7/src/index.ts :539
- check_command goklab-guardvibe-4eae3b7/src/index.ts :598
- scan_config_change goklab-guardvibe-4eae3b7/src/index.ts :614
- repo_security_posture goklab-guardvibe-4eae3b7/src/index.ts :630
- explain_remediation goklab-guardvibe-4eae3b7/src/index.ts :644
- scan_file goklab-guardvibe-4eae3b7/src/index.ts :661
- scan_changed_files goklab-guardvibe-4eae3b7/src/index.ts :720
- security_stats goklab-guardvibe-4eae3b7/src/index.ts :822
- audit_mcp_config goklab-guardvibe-4eae3b7/src/index.ts :839
- scan_host_config goklab-guardvibe-4eae3b7/src/index.ts :856
- guardvibe_doctor goklab-guardvibe-4eae3b7/src/index.ts :874
- verify_fix goklab-guardvibe-4eae3b7/src/index.ts :889
- security_workflow goklab-guardvibe-4eae3b7/src/index.ts :906
- auth_coverage goklab-guardvibe-4eae3b7/src/index.ts :1048
- deep_scan goklab-guardvibe-4eae3b7/src/index.ts :1106
- full_audit goklab-guardvibe-4eae3b7/src/index.ts :1140
- remediation_plan goklab-guardvibe-4eae3b7/src/index.ts :1157
- verify_remediation goklab-guardvibe-4eae3b7/src/index.ts :1173
- secure_prompt goklab-guardvibe-4eae3b7/src/index.ts :1275
install hooks 1
- prepare goklab-guardvibe-4eae3b7/package.json :33
npm run build
declared dependencies 8
- @modelcontextprotocol/sdk@^1.26.0
- typescript@^5.7.0
- zod@^3.25.0
- @types/node@^25.5.2
- c8@^11.0.0
- eslint@^10.2.0
- tsx@^4.22.4
- typescript-eslint@^8.58.0
perm:untrusted 3
- untrusted goklab-guardvibe-4eae3b7/src/data/rules/ai-security.ts :206
'// Sanitize external content before LLM context\nconst raw = await fetch(url).then(r => r.text());\nconst sanitized = raw.replace(/<[^>]*>/g, "").slice(0, 2000);\nconst result = await generateText({\ - untrusted goklab-guardvibe-4eae3b7/src/data/rules/ai-tool-runtime.ts :19
'// Sanitize external content in MCP tool response\nfunction sanitizeToolOutput(text: string): string {\n return text\n .replace(/<[^>]*>/g, "")\n .replace(/[\\x00-\\x08\\x0B-\\x1F]/g, "")\n - untrusted (weak) goklab-guardvibe-4eae3b7/tests/rules/ai-security.test.ts :185
const code = 'const html = await fetch(url).then(r => r.text());\nconst result = await generateText({ model, prompt: `Summarize: ${html}` });';