Review ID: e3e489d181e2Generated: 2026-03-04T23:12:16.194Z
CHANGES REQUESTED
123
Total Findings
46
Medium
49
Low
36 of 108 Agents Deployed
PlatinumGoldSilverBronzeCopper
Agent Tier: Gold
luisfer/ubon →
main @ 25f145b
46 medium · 49 low · 28 info
MEDIUMUnbounded web crawling without limits
src/scanners/internal-crawler.ts:20
[AGENTS: Siege]dos
The internal crawler follows links recursively with configurable depth but no limit on total pages crawled or time spent crawling. An attacker could create infinite redirect loops or massive page structures to exhaust resources.
Suggested Fix
Add maxPages limit, maxTime limit, and detect redirect loops.
MEDIUMUnbounded HTTP requests without rate limiting
src/scanners/link-scanner.ts:35
[AGENTS: Egress - Siege]data_exfiltration, dos
**Perspective 1:** The link scanner makes HTTP requests to all discovered URLs with concurrency of 8 but no overall rate limiting or timeout per domain. An attacker could inject many URLs pointing to slow or non-responsive servers, causing resource exhaustion. **Perspective 2:** The link scanner makes HTTP HEAD requests to external URLs found in the codebase, exposing which external services the application integrates with. This could reveal business relationships or third-party dependencies.
Suggested Fix
Add per-domain rate limiting, overall request limits, and circuit breaker pattern for failed domains.
MEDIUMSilent failure on API errors
src/scanners/osv-scanner.ts:89
[AGENTS: Fuse]error_security
When the OSV API call fails, the function returns empty results without logging the error. This creates a fail-open condition where vulnerability scanning silently fails.
Suggested Fix
Log API failures and consider returning a warning result instead of empty results.
MEDIUMPython API calls without timeout but missing cost controls
src/scanners/python-security-scanner.ts:66
[AGENTS: Egress - Wallet]data_exfiltration, denial_of_wallet
**Perspective 1:** Detects requests calls without timeout (PYNET001) but doesn't check for missing rate limiting, retry limits, or budget caps on paid API integrations. Unbounded retries against paid services can explode costs. **Perspective 2:** The scanner catches errors but doesn't log them (commented '// ignore'), but if verbose mode is enabled elsewhere, error details including file content could be exposed through error reporting systems.
Suggested Fix
Extend PYNET001 to also flag paid API calls (OpenAI, AWS, GCP) without explicit rate limits or circuit breakers.
MEDIUMNo dependency scanning for Ruby gems
src/scanners/rails-security-scanner.ts:1
[AGENTS: Supply - Trace - Tripwire]dependencies, logging, supply_chain
**Perspective 1:** The RailsSecurityScanner checks for security issues in Ruby code but doesn't scan Gemfile or Gemfile.lock for vulnerable dependencies, missing a critical attack surface. **Perspective 2:** The RailsSecurityScanner checks for SQL injection, command injection, etc., but doesn't include rules for Rails logging vulnerabilities such as: logger.debug with user params, sensitive data in Rails logs, log file permissions, or log injection via user input. **Perspective 3:** The Rails scanner doesn't verify the integrity of Gemfile.lock or check for mismatches between Gemfile and Gemfile.lock, which could lead to supply chain attacks.
Suggested Fix
Add Rails-specific logging rules: RAILS006 for logger.debug with sensitive data, RAILS007 for log file permission issues, RAILS008 for log injection vulnerabilities.
MEDIUMSQL injection detection doesn't check for sanitization methods
src/scanners/rails-security-scanner.ts:31
[AGENTS: Gatekeeper]auth
The SQL injection detection flags string interpolation in .where() but doesn't check if sanitization methods like sanitize_sql_array or sanitize_sql are used, which could lead to false positives for properly sanitized queries.
Suggested Fix
Add context checking for sanitization method calls near SQL queries.
MEDIUMBroad SQL injection heuristic may create false sense of security
src/scanners/rails-security-scanner.ts:150
[AGENTS: Mirage]false_confidence
The scanner pushes a generic SQL injection warning when it finds '.where(' and '#{' in the same file, regardless of context. This could miss actual injections (if interpolation is in a different file) or flag safe code that happens to have both patterns.
Suggested Fix
Improve detection to verify the interpolation is actually inside the where() call using more precise pattern matching or AST analysis.
MEDIUMReact scanner misses LLM UI component cost controls
src/scanners/react-security-scanner.ts:76
[AGENTS: Wallet]denial_of_wallet
React scanner checks for className injection but doesn't detect chat components or AI features that might trigger unbounded LLM calls. Frontend components can hide expensive operations.
Suggested Fix
Add patterns to detect AI/LLM related component imports (useChat, useCompletion) and check for missing maxTokens or rate limiting.
MEDIUMNo session fixation vulnerability detection
src/scanners/security-scanner.ts:1
[AGENTS: Deadbolt - Trace]logging, sessions
**Perspective 1:** The security scanner doesn't detect session fixation vulnerabilities where session IDs aren't regenerated after login. This allows attackers to fixate a session ID and hijack user sessions after authentication. **Perspective 2:** The scanner doesn't check for unlimited concurrent sessions per account. Without limits, attackers can maintain multiple active sessions or perform credential stuffing more effectively. **Perspective 3:** The scanner doesn't detect insecure token refresh mechanisms. Refresh tokens should have limited lifetime, be securely stored, and invalidate old tokens. **Perspective 4:** The secret logging detection in lines 516-552 only checks for console statements containing specific patterns (sk-, eyJ, AKIA). It misses many other secret patterns like GitHub tokens, Stripe keys, OpenAI keys, and other API keys that could be logged. The detection is also limited to console.log, debug, info, warn, error but not other logging methods. **Perspective 5:** The scanner doesn't detect log injection vulnerabilities where user input is directly written to logs without sanitization, which could allow attackers to forge log entries or inject malicious content. **Perspective 6:** The security scanner doesn't check for missing audit logging of critical security events such as authentication attempts, permission changes, admin actions, or data access. These are essential for security monitoring and incident response. **Perspective 7:** The scanner doesn't check for missing correlation/request IDs in HTTP request handling, which are essential for tracing requests across distributed systems and correlating logs for security investigations.
Suggested Fix
Expand secret pattern detection to include all patterns from SEC rules and check for all console methods. Consider integrating with the modular rule patterns for comprehensive coverage.
MEDIUMUnbounded glob pattern matching
src/scanners/security-scanner.ts:44
[AGENTS: Siege]dos
The scanner uses glob patterns without depth limits or file count limits. An attacker could create deeply nested directory structures or millions of files to exhaust system resources during scanning.
Suggested Fix
Add maxDepth and maxFiles options to glob patterns, or implement incremental scanning.
MEDIUMError handling may leak file paths and system information
src/scanners/security-scanner.ts:66
[AGENTS: Fuse]error_security
The catch block in the file scanning loop logs error messages that include the file path when verbose mode is enabled. This could leak internal file structure information to attackers if verbose logging is enabled in production.
Suggested Fix
Remove the file path from error messages or only log generic error messages without sensitive details.
MEDIUMOverly broad exception handling in rule detection
src/scanners/security-scanner.ts:120
[AGENTS: Fuse - Mirage]error_security, false_confidence
**Perspective 1:** The code catches all errors in rule detection with a generic catch block and continues execution. This could mask security-critical failures and create fail-open conditions where security checks silently fail. **Perspective 2:** The code skips console log detection only in files containing 'logger', but legitimate logging libraries or utility files may not have 'logger' in their name. This creates false confidence that console statements are only problematic in non-logger files.
Suggested Fix
Expand skip pattern or use a configurable allowlist: if (pattern.ruleId === 'SEC015' && (file.includes('logger') || file.includes('logging-utils') || file.includes('debug')))
MEDIUMPotential SQL injection via string interpolation in where() - Rails detection
src/scanners/security-scanner.ts:171
[AGENTS: Syringe]db_injection
The security scanner includes detection for Rails SQL injection patterns where string interpolation is used in .where() or .find_by_sql() methods. This is a detection rule rather than vulnerable code, but indicates the scanner is looking for these patterns.
Suggested Fix
This is detection code, not vulnerable code. Ensure the detection patterns are comprehensive for SQL injection vectors.
MEDIUMCookie security detection doesn't check for sensitive data in cookie values
src/scanners/security-scanner.ts:276
[AGENTS: Vault]secrets
The cookie scanner at line 276 checks for missing security attributes but doesn't inspect cookie values for embedded secrets like JWT tokens, session IDs, or API keys.
Suggested Fix
Add check for high-entropy cookie values or patterns matching common secret formats in Set-Cookie values.
MEDIUMOpen redirect detection incomplete
src/scanners/security-scanner.ts:287
[AGENTS: Sentinel]input_validation
Line 287 checks for 'res.redirect\\s*\\(\\s*(req\\.query\\.|req\\.body\\.|req\\.params\\.)' but misses: 1) Redirects from headers, 2) Redirects constructed from multiple sources, 3) Redirects via JavaScript, 4) Redirects with sanitization bypass (e.g., '//evil.com').
Suggested Fix
Also check for: /location\s*[=:]|window\\.location|Redirect\\(/i and validate redirect URLs against allowlist patterns.
MEDIUMEntropy-based secret detection with arbitrary threshold
src/scanners/security-scanner.ts:314
[AGENTS: Cipher]cryptography
The entropy threshold of 3.8 for detecting secrets is arbitrary and not based on cryptographic analysis. Different types of secrets have different entropy characteristics, and this threshold may miss low-entropy secrets or flag high-entropy non-secrets.
Suggested Fix
Use context-aware detection combined with entropy, or implement machine learning-based classification rather than fixed thresholds.
MEDIUMCORS wildcard detection too narrow
src/scanners/security-scanner.ts:316
[AGENTS: Sentinel]input_validation
Line 316 checks for 'Access-Control-Allow-Origin.*\\*' and 'cors\\s*\\(\\s*\\{\\s*origin:\\s*['"`]\\*['"`]' but misses: 1) Dynamic origins based on user input, 2) Regex patterns that are too permissive, 3) Multiple origins including wildcards, 4) Null origin values.
Suggested Fix
Check for patterns like: /origin\\s*[=:]\\s*(?:\\*|['"`].*\\$\\{.*\\}.*['"`]|req\\.headers\\.origin)/i
MEDIUMInsufficient entropy calculation for secret detection
src/scanners/security-scanner.ts:317
[AGENTS: Cipher]cryptography
The shannonEntropy function calculates character-level entropy which may not accurately represent the randomness of cryptographic material. Cryptographic keys should have high byte-level entropy, not just character diversity.
Suggested Fix
Implement byte-level entropy calculation for binary data and use different thresholds for different secret types.
MEDIUMEntropy threshold may allow some credentials through
src/scanners/security-scanner.ts:326
[AGENTS: Passkey]credentials
The entropy threshold is set to 3.8 (if (ent < 3.8 || !/[A-Za-z0-9]/.test(tok)) continue;). Some shorter but still sensitive credentials may have entropy below this threshold.
Suggested Fix
Combine entropy with pattern matching for common credential formats, lower threshold for shorter strings
MEDIUMMissing request size limits detection
src/scanners/security-scanner.ts:335
[AGENTS: Gateway]edge_security
The security scanner checks for various patterns but doesn't detect missing request size limits at the API gateway/edge layer. No validation for Express body-parser limits, Next.js API route size limits, or Django request size configurations. This could allow DoS attacks via large payloads.
Suggested Fix
Add detection for missing size limits: check for Express apps without `limit` option, Next.js without `config.api.bodyParser.sizeLimit`, Django without `DATA_UPLOAD_MAX_MEMORY_SIZE`.
MEDIUMMissing detection for secrets in inline scripts and templates
src/scanners/security-scanner.ts:341
[AGENTS: Vault]secrets
The scanner checks JavaScript/TypeScript files but may miss secrets in HTML script tags, Vue templates, or JSX expressions that are constructed at runtime.
Suggested Fix
Add scanning of .html, .vue, .jsx, .tsx files for script content and template expressions that may contain hardcoded secrets.
MEDIUMCookie security check only validates Set-Cookie headers, misses programmatic cookie setting
src/scanners/security-scanner.ts:387
[AGENTS: Gatekeeper]auth
The cookie security check only looks for Set-Cookie headers in HTTP responses (/setHeader\(\s*['"][Ss]et-[Cc]ookie['"],\s*['"][^'"]+['"]\s*\)/) but misses cookies set via document.cookie in client-side code or other programmatic methods. This creates a blind spot for XSS attacks via insecure cookies.
Suggested Fix
Add detection for document.cookie assignments and framework-specific cookie setting methods (Next.js cookies(), etc.)
MEDIUMIncomplete unsafe HTTP method detection
src/scanners/security-scanner.ts:395
[AGENTS: Phantom]api_security
The scanner checks for missing HTTP method validation but doesn't flag potentially dangerous methods like PUT, PATCH, DELETE on sensitive resources without proper authorization.
Suggested Fix
Add check for sensitive operations (user, payment, admin) with PUT/PATCH/DELETE methods without strong auth checks.
MEDIUMEntropy threshold may filter legitimate secrets
src/scanners/security-scanner.ts:397
[AGENTS: Entropy]randomness
Threshold ent < 3.8 may filter out some legitimate secrets with lower entropy. Some API keys or tokens might have structured formats with lower entropy.
Suggested Fix
Lower threshold to 3.5 or use adaptive thresholds based on context
MEDIUMCookie security fix may break existing code
src/scanners/security-scanner.ts:400
[AGENTS: Deadbolt]sessions
The auto-fix for insecure cookies at line 400 simply appends '; HttpOnly; Secure; SameSite=Lax' to the cookie string. This could break cookies that need different SameSite settings (e.g., 'None' for cross-site requests) or cookies that shouldn't have Secure flag in development.
Suggested Fix
Make the fix more intelligent: check context (development vs production), preserve existing valid attributes, and allow configuration of SameSite policy.
MEDIUMSecret logging detection limited to specific token patterns
src/scanners/security-scanner.ts:416
[AGENTS: Warden]privacy
The secret logging detection only looks for specific patterns (sk-, eyJ, AKIA) in console statements but misses other PII that could be logged, such as user emails, phone numbers, addresses, or other personal identifiers.
Suggested Fix
Expand secret logging detection to include PII patterns and common personal data formats
MEDIUMMissing HTTP method validation detection for REST APIs
src/scanners/security-scanner.ts:430
[AGENTS: Phantom]api_security
The scanner checks for missing method validation in Next.js API routes (NEXT209) but doesn't check for similar issues in Express.js, Fastify, or other Node.js frameworks where HTTP method validation is often missing.
Suggested Fix
Add pattern detection for Express.js routes without method validation: /app\.(get|post|put|delete)\(['"`][^'"`]+['"`],\s*\(req,\s*res\)\s*=>/ without checking req.method
MEDIUMSecret logging detection uses simple pattern matching without context
src/scanners/security-scanner.ts:447
[AGENTS: Mirage]false_confidence
The LOG001 rule detects console statements containing secret patterns, but doesn't verify if the secret is actually being logged vs. being part of a security warning message. This could flag security scanner's own warning messages about secrets.
Suggested Fix
Add context checking: ensure the secret pattern is not part of a warning message about that secret type.
MEDIUMMissing host header injection detection
src/scanners/security-scanner.ts:469
[AGENTS: Gateway]edge_security
The scanner doesn't check for host header injection vulnerabilities where the application uses `req.headers.host` or similar without validation. This could lead to cache poisoning, password reset poisoning, or SSRF via malformed host headers.
Suggested Fix
Add pattern to detect usage of `req.headers.host`, `req.get('Host')`, `request.host` without validation against allowed domains list.
MEDIUMMissing authentication check for Next.js API routes heuristic is incomplete
src/scanners/security-scanner.ts:514
[AGENTS: Gatekeeper]auth
The heuristic for unauthenticated API access checks for returnsSensitive && !hasAuthSignals but the auth signals check (/getServerSession|next-auth|Authorization|getToken|cookies\(|jwt/) may miss custom authentication implementations or token-based auth without these specific patterns.
Suggested Fix
Add more comprehensive auth pattern detection or make the rule more conservative to avoid false negatives.
MEDIUMIncomplete open redirect detection
src/scanners/security-scanner.ts:572
[AGENTS: Gateway]edge_security
Only checks for `res.redirect(req.query.|req.body.|req.params.)` but misses many variants: `window.location`, `document.location`, `Response.redirect()`, `redirect()` with user-controlled parameters, and redirects via meta refresh or JavaScript. Also doesn't check for redirect allowlist validation.
Suggested Fix
Add detection for: `window.location`, `document.location`, `Response.redirect()`, `meta http-equiv="refresh"`, and check if redirect URLs are validated against allowlist.
MEDIUMMissing check for JWT token exposure in localStorage/sessionStorage
src/scanners/security-scanner.ts:574
[AGENTS: Gatekeeper]auth
The scanner only checks for JWT tokens in cookies and API responses but doesn't detect JWT tokens stored in localStorage or sessionStorage, which are vulnerable to XSS attacks and don't have HttpOnly protection.
Suggested Fix
Add pattern detection for localStorage.setItem('token', ...) and sessionStorage.setItem('token', ...) calls.
MEDIUMSecret logging detection creates redacted version but original may still be logged
src/scanners/security-scanner.ts:584
[AGENTS: Egress]data_exfiltration
The LOG001 rule detection creates a redacted version of console statements containing secrets, but if the original console.log() call remains in the code, it will still leak secrets to browser developer tools or server logs.
Suggested Fix
Ensure the fixEdits actually replace the original line with the redacted version, not just create a suggestion.
MEDIUMHallucinated import detection has false positive risk
src/scanners/vibe-scanner.ts:177
[AGENTS: Mirage]false_confidence
The VIBE001 rule flags imports not in package.json dependencies, but misses scoped packages where only the scope is listed, transitive dependencies, and Node.js built-ins that might be available in certain environments.
Suggested Fix
Check devDependencies and peerDependencies, and verify against actual npm registry or use require.resolve to test importability.
MEDIUMHallucinated import detection with false positives
src/scanners/vibe-scanner.ts:180
[AGENTS: Provenance]ai_provenance
VIBE001 rule flags imports not in package.json but misses scoped packages, path aliases, and TypeScript ambient declarations. Common modules list is incomplete and static.
Suggested Fix
Check tsconfig.json paths, resolve actual imports via compiler, handle @types packages
MEDIUMUnbounded block comparison memory usage
src/scanners/vibe-scanner.ts:211
[AGENTS: Siege]dos
The vibe scanner stores 5-line blocks in a Map for copy-paste detection without limits. With large files, this could consume significant memory storing all block combinations.
Suggested Fix
Limit the number of blocks stored or use hashing instead of storing full content.
MEDIUMMissing dependency conflict detection
src/scanners/vite-scanner.ts:1
[AGENTS: Supply - Tripwire]dependencies, supply_chain
**Perspective 1:** The ViteScanner checks for Vite projects but doesn't detect conflicts between Vite and other build tools (e.g., Webpack, Next.js) that could cause build failures. **Perspective 2:** The scanner doesn't check for non-deterministic builds in Vite projects, such as timestamps in builds, non-reproducible asset hashes, or environment-specific builds.
Suggested Fix
Add checks for build reproducibility issues and recommend deterministic build configurations.
MEDIUMVite environment variable detection may miss build-time secret exposure
src/scanners/vite-scanner.ts:40
[AGENTS: Exploit - Gatekeeper]auth, business_logic
**Perspective 1:** The VITE001 rule checks for import.meta.env without VITE_ prefix but doesn't detect secrets exposed during build time through Vite's define config or other build-time injection methods that could leak to client bundles. **Perspective 2:** The Vite scanner focuses on environment variables and dynamic imports but doesn't detect client-side price calculations that should be validated server-side. Attackers could modify JavaScript to manipulate cart totals, taxes, or shipping costs.
Suggested Fix
Add detection for client-side calculations involving financial amounts: patterns like 'total = price * quantity' or 'final = subtotal + tax - discount' in client code.
MEDIUMimport.meta.glob with user input
src/scanners/vite-scanner.ts:63
[AGENTS: Prompt]llm_security
The VITE003 rule detects import.meta.glob() with template literals containing variables, allowing user input to influence which files are included in the build. This could be exploited to include malicious modules.
Suggested Fix
Use static glob patterns or validate user input against an allowlist.
MEDIUMCache integrity vulnerabilities
src/utils/cache.ts:1
[AGENTS: Supply]supply_chain
File-based caching system doesn't implement integrity checks, allowing potential cache poisoning attacks. Cache files are stored without verification of content integrity.
Suggested Fix
Add HMAC signatures or checksums to cache entries and validate on read. Consider using secure storage mechanisms.
MEDIUMCache file naming using SHA-256 of key without salt
src/utils/cache.ts:28
[AGENTS: Cipher]cryptography
Cache files are named using SHA-256 hash of the key, which could allow an attacker to predict cache file names and potentially perform cache poisoning if they can write to the cache directory.
Suggested Fix
Add application-specific salt to the hash input or use HMAC with a secret key for cache file naming.
MEDIUMUnbounded cache growth
src/utils/cache.ts:53
[AGENTS: Siege]dos
The file cache stores entries indefinitely until TTL expires, with no limit on total cache size or number of entries. An attacker could fill the cache with many entries to exhaust disk space.
Suggested Fix
Add max cache size limits and LRU eviction policy.
MEDIUMSOC 2 CC7.2: Logging utility without log integrity controls
src/utils/logger.ts:71
[AGENTS: Compliance]regulatory
Logger class provides colored output but lacks integrity controls (digital signatures, write-once storage) required by SOC 2 CC7.2 for audit logs.
Suggested Fix
Add log integrity features: hash chains, digital signatures, or write-once log storage options
MEDIUMSARIF output may contain redacted but still identifiable secret patterns
src/utils/sarif.ts:99
[AGENTS: Egress]data_exfiltration
The SARIF output redacts secrets but leaves patterns like 'sk-********' which could still indicate the presence of certain types of secrets in the codebase. This information could be valuable to attackers if SARIF reports are exposed.
Suggested Fix
Consider more aggressive redaction or option to exclude match fields entirely from SARIF output.
MEDIUMSuppression detection uses simple regex without full comment parsing
src/utils/suppressions.ts:28
[AGENTS: Mirage]false_confidence
The suppression detection uses regex patterns that might match strings inside code comments or strings, not just actual comments. It also doesn't handle multiline comments properly or different comment styles across file types.
Suggested Fix
Use proper comment parsing or AST analysis to accurately detect suppression comments.
MEDIUMExtension distribution without code signing
vscode-extension/package.json:1
[AGENTS: Supply]supply_chain
VS Code extension distribution doesn't mention code signing or integrity verification for the extension package, making it vulnerable to tampering.
Suggested Fix
Implement code signing for VS Code extension packages and verify signatures on installation.
LOWUnbounded command execution without timeout
src/scanners/git-history-scanner.ts:16
[AGENTS: Siege]dos
The git history scanner executes 'git show' commands without timeout limits. An attacker could create a commit with massive diff output that hangs the process.
Suggested Fix
Add timeout to child_process.execSync calls and limit output size.
LOWPersonal information and location data in project documentation
README.md:233
[AGENTS: Egress - Phantom - Provenance - Warden]ai_provenance, api_security, data_exfiltration, privacy
**Perspective 1:** The README contains personal information about the author including their name, personal background, and specific geographic location (Ubon Ratchathani province in Thailand). This creates privacy risks by linking the author to specific locations and personal relationships. **Perspective 2:** The README shows JSON output examples that include full API key matches like 'sk-********' and complete code snippets. While partially redacted, this could still expose sensitive patterns or partial data. The tool's output format needs careful design to avoid leaking sensitive information. **Perspective 3:** The tool scans source code files and could potentially transmit file contents or metadata to external services (like OSV.dev for vulnerability checking). While this is the core function of a security scanner, it represents an outbound data flow that could include sensitive code patterns, API keys, or other secrets if not properly filtered. **Perspective 4:** The README claims 'Test Coverage: 70%' with a badge link to './coverage' but there's no evidence of actual test coverage reporting in the codebase. This is typical AI-generated documentation that makes plausible claims without verification.
Suggested Fix
Implement stronger redaction for sensitive data in output, ensure no partial secrets are exposed, and provide configurable redaction levels for different security contexts.
LOWAuthor email address exposed in public package metadata
package.json:115
[AGENTS: Egress - Gatekeeper - Phantom - Razor - Warden]api_security, auth, data_exfiltration, privacy, security
**Perspective 1:** The package.json file contains the author's personal email address (luisfer.romero.calero@gmail.com) which is publicly exposed in npm registry. This is personal identifiable information (PII) that could be harvested for spam, phishing, or other privacy violations. **Perspective 2:** Puppeteer is included as an optional dependency but there's no documentation or code showing sandboxing, process isolation, or input validation for web crawling functionality. This could lead to SSRF attacks, local file disclosure, or remote code execution if user-controlled URLs are passed to Puppeteer without proper validation. **Perspective 3:** The package includes puppeteer as an optional dependency, which provides full browser automation capabilities. This could be used to scrape or exfiltrate data from web pages, including sensitive information displayed in the DOM. While puppeteer itself is legitimate, its presence in a security scanner raises concerns about potential misuse for data collection. **Perspective 4:** The tool's capabilities don't include checking for GraphQL introspection endpoints enabled in production. GraphQL introspection can expose API schemas and internal details to attackers if left enabled in production environments. **Perspective 5:** The funding configuration points to 'https://github.com/sponsors/luisfer' which could be used for social engineering. While this is standard practice for open source projects, it does expose a direct financial relationship path that could be exploited in targeted attacks.
Suggested Fix
Add input validation for URLs passed to Puppeteer, implement sandboxing, restrict allowed protocols (http/https only), and add timeout limits. Consider using a dedicated worker process with limited privileges.
LOWFile watcher without resource limits
src/cli/shared.ts:296
[AGENTS: Siege]dos
The watch mode uses chokidar to monitor file changes but doesn't limit the number of files watched or handle filesystem event storms.
Suggested Fix
Add debouncing, limit watched file types, or implement cooldown periods between scans.
LOWDockerfile apt-get cache not cleaned
src/scanners/iac-scanner.ts:10
[AGENTS: Harbor]containers
Dockerfile contains apt-get install without cleaning apt cache, increasing image size and potentially containing outdated package metadata
Suggested Fix
Add 'rm -rf /var/lib/apt/lists/*' after apt-get install commands
LOWMemory leak in URL collection
src/scanners/internal-crawler.ts:45
[AGENTS: Siege]dos
The crawler uses a Set to track seen URLs but never clears it. In long-running scans or with many pages, this could consume significant memory.
Suggested Fix
Implement LRU cache or periodic clearing of seen URLs.
LOWHTTP request timeout but no connection timeout
src/scanners/link-scanner.ts:39
[AGENTS: Siege]dos
The HTTP requests have a 7-second timeout but no connection timeout. An attacker could create URLs that accept connections but never respond, holding connections open indefinitely.
Suggested Fix
Add connection timeout in addition to request timeout.
LOWUnbounded HTTP POST request size
src/scanners/osv-scanner.ts:23
[AGENTS: Siege]dos
The OSV scanner sends all dependencies in a single POST request without size limits. With many dependencies, this could create very large requests that overwhelm the server or client.
Suggested Fix
Batch requests or implement size limits on request payloads.
LOWOSV API calls expose dependency information to third-party service
src/scanners/osv-scanner.ts:83
[AGENTS: Egress]data_exfiltration
The scanner makes HTTP POST requests to api.osv.dev with package names and versions, exposing dependency information to a third-party service. While this is for vulnerability checking, it reveals the project's dependency graph.
Suggested Fix
Make OSV scanning opt-in with clear disclosure about data sent to third parties.
LOWMissing security-focused ESLint rules
.eslintrc.json:1
[AGENTS: Lockdown]configuration
The ESLint configuration uses recommended rules but doesn't include security-specific rules that could catch common vulnerabilities like no-eval, no-implied-eval, or security/detect-* rules from security plugins.
Suggested Fix
Add security-focused ESLint plugins and rules: { "plugins": ["security"], "rules": { "no-eval": "error", "no-implied-eval": "error", "security/detect-object-injection": "warn" } }
LOWMissing batch endpoint authorization checks
CHANGELOG.md:380
[AGENTS: Phantom - Razor]api_security, security
**Perspective 1:** The changelog and feature descriptions don't mention checking for batch operations or bulk endpoints that might lack proper per-item authorization. Batch endpoints can bypass object-level authorization if not properly implemented. **Perspective 2:** The changelog contains detailed descriptions of security rules (SEC001-SEC019, VIBE001-004, etc.) including what they detect and confidence levels. This information could help attackers craft code that evades detection.
Suggested Fix
Add scanning for batch operations and bulk endpoints, checking if they implement proper authorization for each item in the batch rather than assuming blanket authorization.
LOWInsufficient security review requirements for contributions
CONTRIBUTING.md:1
[AGENTS: Compliance]regulatory
The contributing guidelines do not mandate security review or vulnerability assessment for new scanners or code changes, which is a PCI-DSS (6.3) and SOC 2 (CC6.1) gap for secure development practices.
Suggested Fix
Add a requirement for security review and vulnerability scanning for all contributions, especially new scanners.
LOWMissing privacy considerations in contribution guidelines
CONTRIBUTING.md:150
[AGENTS: Provenance - Warden]ai_provenance, privacy
**Perspective 1:** The contribution guidelines do not mention privacy considerations when adding new scanners or handling user data. Contributors may inadvertently add features that collect or process PII without proper safeguards. **Perspective 2:** The CONTRIBUTING.md contains generic sections like 'Code of Conduct' with platitudes ('Be respectful and constructive') that are typical of AI-generated contribution guidelines without project-specific guidance.
Suggested Fix
Add a section on privacy considerations for contributors, emphasizing data minimization, avoiding PII collection, and following privacy-by-design principles.
LOWHardcoded example data containing realistic PII patterns
GUIDE.md:573
[AGENTS: Infiltrator - Phantom - Provenance - Razor - Warden]ai_provenance, api_security, attack_surface, privacy, security
**Perspective 1:** The integration guide contains example JSON output with realistic-looking API keys (sk-********) and file paths that could be mistaken for actual sensitive data. While redacted, these patterns could lead to accidental exposure if users copy-paste without proper sanitization. **Perspective 2:** The integration guide and tool capabilities don't mention API versioning checks. When scanning APIs, checking for proper versioning headers, deprecated versions, or versioning strategies is important for API security. **Perspective 3:** The guide shows 'Last Updated: 2026-02-01' which is in the future relative to the current date. This suggests AI-generated timestamps without validation. **Perspective 4:** The guide includes extensive examples of security rules and detection patterns that could be used by attackers to understand how to bypass the scanner. While this is documentation, it reveals internal detection logic. **Perspective 5:** The extensive GUIDE.md document details all capabilities, rules, and integration patterns, which could help attackers understand the tool's attack surface and potential bypass techniques.
Suggested Fix
Add API versioning checks to the scanner, including checking for deprecated API versions, missing version headers, or inconsistent versioning across endpoints.
LOWAI agent integration without usage caps
README.md:0
[AGENTS: Wallet]denial_of_wallet
The tool promotes AI agent integration with '--ai-friendly' JSON output and Cursor integration. If integrated into automated AI coding workflows without usage limits, it could trigger continuous scanning operations on large codebases, consuming computational resources. The documentation mentions performance considerations but not cost controls for automated usage.
Suggested Fix
Add rate limiting for automated usage, maximum scan frequency controls, and resource usage caps for CI/CD integrations.
LOWNo maxWorkers configuration
jest.config.js:8
[AGENTS: Chaos]edge_cases
Without maxWorkers configuration, Jest may spawn too many workers on systems with many CPU cores, potentially causing memory issues or system slowdown.
Suggested Fix
Add maxWorkers configuration based on CI environment detection.
LOWPre-publish script executes arbitrary code generation
package.json:8
[AGENTS: Razor]security
The 'prepublishOnly' script runs 'npm run rules:gen' which executes generate-rules-md.js. This creates an attack vector during package publication where malicious code could be injected into the rules documentation.
Suggested Fix
Review the rules generation script for security issues, add integrity checks to generated content, or consider pre-generating documentation instead of dynamic generation during publish.
LOWOptional dependency creates inconsistent scanning capabilities
package.json:90
[AGENTS: Exploit]business_logic
Puppeteer is listed as optionalDependencies. If Puppeteer fails to install (common in CI/CD environments), the internal link crawler functionality (LINK003) won't work, but the tool may still report success. Users might believe they're getting comprehensive link checking when they're actually getting degraded functionality without clear indication.
Suggested Fix
Add runtime capability detection and clear warnings when optional dependencies are missing, or make Puppeteer a peer dependency with installation instructions for full functionality.
LOWNo validation for JSON parsing
scripts/check-changelog.js:7
[AGENTS: Sentinel]input_validation
The script parses package.json without validation, which could crash if the file contains malformed JSON.
Suggested Fix
Wrap JSON.parse in try-catch block and provide meaningful error messages.
LOWCase-sensitive version matching
scripts/check-changelog.js:9
[AGENTS: Chaos]edge_cases
The script checks for exact header match like '## 1.2.0'. If the changelog uses different formatting (e.g., '## v1.2.0', '## Version 1.2.0'), the check will fail even though the version is documented.
Suggested Fix
Use regex pattern matching or normalize the header format before comparison.
LOWMissing error handling for file read failures
scripts/check-changelog.js:19
[AGENTS: Fuse - Provenance]ai_provenance, error_security
**Perspective 1:** The script reads files synchronously without try-catch blocks. If package.json or CHANGELOG.md cannot be read (permissions, missing files), the script will crash with a stack trace that could leak system information. **Perspective 2:** The script logs success message even when everything is fine, which is unnecessary noise in automated workflows. AI often adds verbose logging without considering quiet/silent mode requirements.
Suggested Fix
Wrap file operations in try-catch blocks and handle errors gracefully with appropriate exit codes.
LOWBuild-time script without resource limits
scripts/generate-rules-md.js:0
[AGENTS: Wallet]denial_of_wallet
The 'rules:gen' script in package.json triggers the generate-rules-md.js script during prepublishOnly. While this is a build-time operation, if misconfigured or triggered frequently in CI/CD pipelines, it could consume unnecessary computational resources. The script reads and processes rule definitions without any resource constraints.
Suggested Fix
Add caching mechanisms to avoid redundant rule generation. Consider making this an optional step rather than mandatory during every build.
LOWMissing error context in build failure logging
scripts/generate-rules-md.js:9
[AGENTS: Trace]logging
When the script fails due to missing rules files, it logs a generic error message without providing actionable context about which files were checked and what the expected paths are. This makes debugging build issues more difficult.
Suggested Fix
Enhance error logging to include the specific file paths checked and suggestions for resolution. Example: console.error(`No rules found at ${modularRulesPath} or ${legacyRulesPath}. Run 'npm run build' to generate dist/ directory.`)
LOWInconsistent string replacement pattern
scripts/generate-rules-md.js:50
[AGENTS: Provenance]ai_provenance
Line 50 contains '.replace('Rails (experimental)','Next.js (experimental)')' which suggests AI-generated code that's trying to fix categorization but doing it in a fragile, string-replacement way rather than proper logic.
Suggested Fix
Use proper conditional logic instead of string replacement for categorization.
LOWIncorrect string replacement logic
scripts/generate-rules-md.js:54
[AGENTS: Pedant]correctness
The line 'groups['Rails (experimental)'].push(line.replace('Rails (experimental)','Next.js (experimental)'));' will replace 'Rails (experimental)' anywhere in the line string, not just in the group name. This could corrupt rule descriptions.
Suggested Fix
Push to correct group directly instead of string replacement: groups['Next.js (experimental)'].push(line);
LOWMissing error handling for file write operation
scripts/generate-rules-md.js:69
[AGENTS: Fuse - Trace]error_security, logging
**Perspective 1:** The script writes to docs/RULES.md without error handling. If the file is read-only, permissions are insufficient, or the directory doesn't exist, the script will crash with a stack trace. **Perspective 2:** After generating RULES.md, the script logs a simple success message but doesn't record metrics like number of rules processed, file size, or generation time. This makes it difficult to monitor documentation generation performance over time.
Suggested Fix
Add performance metrics: const startTime = Date.now(); ... const endTime = Date.now(); console.log(`RULES.md regenerated with ${Object.keys(RULES).length} rules in ${endTime-startTime}ms. Output: ${target} (${fs.statSync(target).size} bytes)`)
LOWBuild script reads and processes rule definitions that could include sensitive patterns
scripts/generate-rules-md.js:76
[AGENTS: Egress]data_exfiltration
The script loads rule definitions from compiled JavaScript files and generates documentation. While this is a build-time process, it demonstrates the tool's ability to read and process security rule patterns that could include sensitive detection logic or regex patterns.
Suggested Fix
Ensure build scripts don't inadvertently log or transmit sensitive rule patterns during execution.
LOWTest with overconfident validation assumption
src/__tests__/react-security-scanner.test.ts:127
[AGENTS: Provenance]ai_provenance
Test 'does not flag className with validation' assumes allowedVariants.includes() is sufficient validation, but doesn't test that allowedVariants is actually a safe allow-list (could be user-controlled).
Suggested Fix
Test with actual safe validation patterns
LOWTest suite doesn't validate business logic vulnerability detection
src/__tests__/security-rules.test.ts:144
[AGENTS: Exploit]business_logic
The security rules tests focus on credential detection but don't test for business logic flaws. This creates blind spots in the scanner's ability to detect payment flow bypasses, price manipulation, and entitlement abuse.
Suggested Fix
Add test cases for business logic vulnerabilities: client-side price calculations, coupon stacking patterns, race conditions in inventory updates, and payment state bypasses.
LOWOverconfident Lovable profile auto-detection
src/index.ts:93
[AGENTS: Provenance]ai_provenance
Auto-detection assumes Vite + Supabase + React + Tailwind = Lovable app, but many projects use this stack without being Lovable-generated. Detection logic is simplistic and heuristic.
Suggested Fix
Look for Lovable-specific patterns or configuration files
LOWInteractive mode displays code context with potential secrets
src/index.ts:850
[AGENTS: Egress]data_exfiltration
The interactive mode shows code context around findings, which could display sensitive code patterns or partial secrets if the user is walking through issues in a shared environment.
Suggested Fix
Redact sensitive patterns in interactive mode display or provide option to skip context display.
LOWConsole detection skips logger files without validation
src/rules/security/SEC015.ts:20
[AGENTS: Trace]logging
The skipPatterns includes /logger/i which skips console detection in files containing 'logger'. This could allow legitimate console statements in logger utility files to go undetected, potentially missing sensitive data exposure in logging infrastructure code.
Suggested Fix
Instead of blanket skipping, validate that the file actually contains proper logging infrastructure before skipping console detection. Or apply different confidence levels for logger files.
LOWMissing comprehensive logging security rule category
src/rules/security/index.ts:1
[AGENTS: Trace]logging
The security rules index includes many categories but lacks a dedicated logging security category. Logging-related rules are scattered (LOG001, SEC015) without a cohesive strategy for logging security.
Suggested Fix
Create a dedicated logging security category with rules for: sensitive data in logs, log injection, missing audit trails, insecure log configurations, and log file permissions.
LOWOptional TypeScript dependency without fallback
src/scanners/ast-security-scanner.ts:12
[AGENTS: Tripwire]dependencies
The AstSecurityScanner tries to require('typescript') but if it fails, returns an empty array. This silently disables AST-based security checks without notifying the user.
Suggested Fix
Log a warning when TypeScript is not available and document it as a required dependency for full scanning.
LOWMissing file integrity verification during scanning
src/scanners/base-scanner.ts:1
[AGENTS: Supply]supply_chain
Scanners read files directly without verifying file integrity or checking for tampering during the scanning process.
Suggested Fix
Add file checksum verification before processing sensitive files to detect tampering during scan execution.
LOWNo infrastructure logging configuration checks
src/scanners/iac-scanner.ts:1
[AGENTS: Trace]logging
The IaC scanner checks Docker and GitHub Actions but doesn't verify logging configurations in infrastructure code, such as: missing log rotation in Dockerfiles, insecure log file permissions, or missing audit logging in cloud configurations.
Suggested Fix
Add Docker and cloud-specific logging rules: DOCKER005 for missing log rotation in containers, DOCKER006 for insecure log file permissions, GHA002 for missing workflow audit logging.
LOWGeneric error catching in page navigation
src/scanners/internal-crawler.ts:54
[AGENTS: Fuse]error_security
The catch block swallows all navigation errors without differentiation, potentially hiding network issues, authentication failures, or other security-relevant errors.
Suggested Fix
Differentiate between expected timeouts and unexpected errors, logging appropriately.
LOWSilent file read failure
src/scanners/link-scanner.ts:19
[AGENTS: Fuse]error_security
Empty catch block when reading files could hide permission issues or corrupted files that might indicate security problems.
Suggested Fix
Add minimal error logging for file read failures.
LOWSilent error handling in file processing
src/scanners/lovable-supabase-scanner.ts:78
[AGENTS: Fuse]error_security
Empty catch block could mask file access or parsing errors that might indicate security issues.
Suggested Fix
Add minimal error logging for file processing failures.
LOWMissing provenance tracking for cached vulnerability data
src/scanners/osv-scanner.ts:84
[AGENTS: Supply]supply_chain
While caching OSV results for 24 hours, there's no provenance tracking for the cached data - no timestamps, source verification, or integrity checks on cached entries.
Suggested Fix
Add metadata to cache entries including fetch timestamp, response signature/checksum, and source verification data.
LOWMissing detection for model serving endpoint risks
src/scanners/python-security-scanner.ts:10
[AGENTS: Weights]model_supply_chain
The Python security scanner doesn't detect patterns where model paths or model names are accepted as user-supplied parameters without allowlisting, which could allow loading compromised models at runtime.
Suggested Fix
Add pattern detection for user-controlled model path parameters in model loading functions (e.g., load_model(user_input), from_pretrained(user_input)).
LOWSilent error swallowing in file processing
src/scanners/python-security-scanner.ts:54
[AGENTS: Fuse]error_security
The catch block swallows all exceptions with a comment 'ignore', which could hide file permission errors, parsing failures, or other security-relevant issues.
Suggested Fix
Log errors at appropriate severity levels and differentiate between expected and unexpected failures.
LOWSilent error handling in file processing
src/scanners/rails-security-scanner.ts:164
[AGENTS: Fuse]error_security
Empty catch block without any error handling could mask security-relevant file access issues or parsing errors.
Suggested Fix
Add basic error logging to detect file access or parsing issues.
LOWCSS context filtering may miss credentials in CSS comments
src/scanners/security-scanner.ts:329
[AGENTS: Passkey]credentials
The scanner skips CSS files entirely (if (isCssContext) continue;), but credentials could be accidentally committed in CSS comments or CSS-in-JS files.
Suggested Fix
Still scan CSS files but with adjusted patterns for comment detection
LOWCopy-paste artifact in console log redaction
src/scanners/security-scanner.ts:392
[AGENTS: Provenance]ai_provenance
Redaction code replaces 'sk-[A-Za-z0-9_-]{8,}' with 'sk-********' but doesn't handle other secret patterns consistently. Appears copied from generic examples without testing edge cases.
Suggested Fix
Use consistent redaction: same pattern as detection rules
LOWCopy-paste artifact detection with simplistic algorithm
src/scanners/vibe-scanner.ts:212
[AGENTS: Provenance]ai_provenance
VIBE002 uses fixed 5-line block comparison without normalization (whitespace, variable names). This detects trivial copy-paste but misses semantically identical code with renamed variables.
Suggested Fix
Use AST-based comparison or at least normalize whitespace and identifiers
LOWVibe scanner doesn't detect PII in AI-generated code
src/scanners/vibe-scanner.ts:330
[AGENTS: Warden]privacy
The vibe scanner detects AI-generated code patterns but doesn't specifically look for PII that might be hallucinated or incorrectly generated by AI, such as placeholder personal data that should be removed.
Suggested Fix
Add PII pattern detection to vibe scanner's incomplete implementation detection
LOWSilent error swallowing in file processing
src/scanners/vite-scanner.ts:104
[AGENTS: Fuse]error_security
Empty catch block when reading files could hide security-relevant file access issues.
Suggested Fix
Add basic error logging for file processing failures.
LOWTypeScript strict mode enabled without explicit security settings
tsconfig.json:1
[AGENTS: Compliance - Lockdown]configuration, regulatory
**Perspective 1:** While strict mode improves code quality, the configuration lacks explicit security-focused compiler options like 'noUncheckedIndexedAccess' or 'exactOptionalPropertyTypes' that could prevent certain security issues. **Perspective 2:** TypeScript configuration does not enable all strict type-checking options (e.g., strictNullChecks, strictFunctionTypes) which could lead to security vulnerabilities in sensitive code. This is a SOC 2 (CC6.1) gap for secure coding practices.
Suggested Fix
Consider adding security-focused compiler options: { "compilerOptions": { "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, "forceConsistentCasingInFileNames": true } }
INFOWeak RLS policy patterns detected
src/rules/lovable/LOVABLE005.ts:19
[AGENTS: Tenant]tenant_isolation
Rule detects weak RLS policy patterns like USING (true) or policies without auth.uid() checks. These patterns completely bypass tenant isolation, allowing any authenticated user to access all tenant data.
Suggested Fix
Replace weak RLS policies with tenant-scoped policies: CREATE POLICY "tenant_isolation" ON table_name FOR ALL USING (tenant_id = current_setting('app.current_tenant')::uuid)
INFOSQL injection via string interpolation in where()
src/scanners/rails-security-scanner.ts:20
[AGENTS: Prompt - Tenant]llm_security, tenant_isolation
**Perspective 1:** Rails scanner detects SQL injection via string interpolation. In multi-tenant applications, this can be exploited to bypass tenant WHERE clauses, allowing access to other tenants' data. **Perspective 2:** The RAILS001 rule detects SQL injection via string interpolation in ActiveRecord where() calls. This allows user input to directly influence SQL queries, similar to LLM-generated SQL manipulation.
Suggested Fix
Use parameterized queries with explicit tenant filtering: where("tenant_id = ? AND name = ?", current_tenant.id, params[:name])
INFOCommand injection via system/backticks
src/scanners/rails-security-scanner.ts:50
[AGENTS: Prompt - Vault]llm_security, secrets
**Perspective 1:** The scanner detects system() calls and backticks in Ruby code that could execute shell commands with user input. This is a direct code execution vulnerability where LLM responses or user input could be executed as shell commands. **Perspective 2:** The scanner focuses on SQL injection and command execution but doesn't check for hardcoded secrets in Rails configuration files like database.yml, credentials.yml.enc, or secrets.yml.
Suggested Fix
Add file patterns to scan .yml files for password:, secret:, key: patterns with non-empty values.
INFOSQL injection in .filter() with template literal (single parameter)
src/rules/lovable/LOVABLE004.ts:20
[AGENTS: Syringe]db_injection
Pattern matches .filter() calls with template literals containing ${variable} interpolation as a single parameter, which could allow SQL injection in filter conditions.
Suggested Fix
Use Supabase's parameterized filter methods: .filter('column', 'eq', value) instead of .filter(`column = '${value}'`).
INFOSQL injection in .filter() with string concatenation (three parameters)
src/rules/lovable/LOVABLE004.ts:22
[AGENTS: Syringe]db_injection
Pattern matches .filter() calls with string concatenation in the third parameter, where user input could be injected into the filter value.
Suggested Fix
Use direct value parameters instead of template literals: .filter('column', 'eq', value).

Summary

Consensus from 72 reviewer(s): Blacklist, Syringe, Sentinel, Sanitizer, Specter, Vault, Deadbolt, Gatekeeper, Razor, Pedant, Chaos, Cipher, Passkey, Warden, Lockdown, Entropy, Harbor, Compliance, Phantom, Tripwire, Siege, Gateway, Supply, Recon, Trace, Fuse, Infiltrator, Prompt, Wallet, Weights, Tenant, Vector, Egress, Provenance, Exploit, Mirage, Blacklist, Sanitizer, Specter, Passkey, Syringe, Vault, Deadbolt, Gatekeeper, Sentinel, Cipher, Entropy, Warden, Razor, Harbor, Gateway, Siege, Pedant, Phantom, Recon, Chaos, Vector, Lockdown, Trace, Compliance, Weights, Infiltrator, Fuse, Supply, Prompt, Wallet, Mirage, Tripwire, Egress, Provenance, Tenant, Exploit Total findings: 267 Severity breakdown: 11 critical, 99 high, 109 medium, 46 low, 2 info