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
**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.
**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.
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
**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.
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.
**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
**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
**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
**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.
**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
**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
**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.
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.
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.
**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.
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.
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
**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.
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()
**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).
INFOSQL injection in .eq() with template literal
src/rules/lovable/LOVABLE004.ts:24
[AGENTS: Syringe]db_injection
Pattern matches .eq() calls with template literals in the value parameter, which could allow SQL injection if user input is interpolated without validation.
Suggested Fix
Pass values directly: .eq('column', value) instead of .eq('column', `${value}`).
INFOSQL injection in .rpc() with template literal in function name
src/rules/lovable/LOVABLE004.ts:26
[AGENTS: Syringe]db_injection
Pattern matches .rpc() calls with template literals in the function name, which could allow injection of stored procedure/function names.
Suggested Fix
Use static function names or validate/whitelist function names before calling .rpc().
INFOSQL injection in .rpc() with template literal in params
src/rules/lovable/LOVABLE004.ts:28
[AGENTS: Syringe]db_injection
Pattern matches .rpc() calls with template literals in the parameters object, which could allow SQL injection in RPC function arguments.
Suggested Fix
Pass parameter values directly without template literals in the params object.
INFOPassword detection pattern may match non-sensitive assignments
**Perspective 1:** Pattern /password\s*[:=]\s*['"`][^'"`]+['"`]/gi matches any assignment to a variable containing 'password' in its name, including empty strings and placeholder values like 'password' or 'changeme'. This creates false positives and may miss variations like 'pwd', 'pass', 'secret'.
**Perspective 2:** The regex pattern /password\s*[:=]\s*['"`][^'"`]+['"`]/gi only detects passwords assigned with colon or equals sign, but may miss other patterns like 'password: process.env.PASSWORD || "default"' or template literals. This could allow hardcoded passwords to go undetected.
**Perspective 3:** The regex pattern for detecting hardcoded passwords (/password\s*[:=]\s*['"`][^'"`]+['"`]/gi) only looks for the literal string 'password' but misses other PII patterns like 'passwd', 'pwd', 'secret', 'token', 'api_key', or database connection strings containing credentials. This creates false negatives where sensitive authentication data remains undetected.
**Perspective 4:** Rule detects hardcoded passwords but doesn't enforce encryption requirements for stored passwords as required by PCI-DSS 3.2.1. The fix suggests environment variables but doesn't mandate encryption for stored credentials.
**Perspective 5:** The pattern /password\s*[:=]\s*['"`][^'"`]+['"`]/gi detects hardcoded passwords but doesn't distinguish between test passwords, placeholder values, or actual credentials. This could lead to false positives in test files or documentation.
Suggested Fix
Expand pattern to include common PII variable names: /(password|passwd|pwd|secret|token|api[_-]?key|credential|auth)\s*[:=]\s*['"`][^'"`]+['"`]/gi
INFOAWS key pattern may match non-AWS strings
src/rules/security/SEC009.ts:14
[AGENTS: Entropy - Vault]randomness, secrets
**Perspective 1:** Pattern /(['"`])(?:AKIA[0-9A-Z]{16})\1/gi matches any 20-character string starting with AKIA followed by 16 alphanumeric characters, but AWS keys have specific character set restrictions (only uppercase A-Z and 0-9, no lowercase). Current pattern allows lowercase letters.
**Perspective 2:** Pattern /(['"`])(?:AKIA[0-9A-Z]{16})\1/gi matches AWS Access Key IDs but doesn't validate the checksum digit (position 4 should be A-Z0-9 excluding I, O, U). This could miss some invalid keys.
Suggested Fix
Use stricter pattern: /(['"`])(?:AKIA[0-9A-Z]{16})\1/gi with case-sensitive flag or /(['"`])(?:AKIA[0-9A-Z]{16})\1/g
**Perspective 1:** Pattern /(['"`])(?:sk-[a-zA-Z0-9]{48})\1/gi requires exactly 48 characters after 'sk-', but OpenAI keys can vary in length. This may miss valid keys or match invalid patterns.
**Perspective 2:** The pattern /(['"`])(?:sk-[a-zA-Z0-9]{48})\1/gi assumes OpenAI keys are exactly 48 characters after 'sk-'. OpenAI key lengths may vary, and this fixed-length assumption could miss valid keys or match incorrect strings.
**Perspective 3:** Pattern /(['"`])(?:sk-[a-zA-Z0-9]{48})\1/gi matches 48-character keys but OpenAI keys are typically 51 characters (sk- followed by 48 alphanumeric). The pattern should be more precise.
**Perspective 4:** Rule detects OpenAI API keys (sk- prefix) but doesn't check for missing rate limiting or max_tokens enforcement on endpoints using these keys. Exposed keys can be used to make unlimited API calls, leading to unbounded LLM costs.
**Perspective 5:** Pattern /(['"`])(?:sk-[a-zA-Z0-9]{48})\1/gi assumes all OpenAI keys are exactly 48 characters after 'sk-', but OpenAI keys can vary in length. This will miss valid keys and potentially match non-keys.
Suggested Fix
Add companion rule checking for OpenAI API usage without rate limiting, max_tokens parameters, or budget caps.
INFOdangerouslySetInnerHTML detection rule
src/rules/security/SEC017.ts:1
[AGENTS: Blacklist]output_encoding
Rule detects usage of dangerouslySetInnerHTML which is a direct XSS vector when used with unsanitized content. This is a detection rule, not a vulnerability itself, but indicates the scanner is looking for this output encoding flaw.
Suggested Fix
This is a detection rule - ensure it properly identifies all dangerous React patterns
**Perspective 1:** Line 15 pattern '/import\\s*\\(\\s*`[^`]*\\$\\{[^}]+\\}[^`]*`\\s*\\)/gi' only detects template literals with ${} but misses string concatenation, variable assignment, or complex expressions. Also doesn't check for path traversal sequences like '../../../'.
**Perspective 2:** Pattern /import\s*\(\s*`[^`]*\$\{[^}]+\}[^`]*`\s*\)/gi flags all template literals in imports, even those with validated variables or allow-listed paths. Creates false positives for safe dynamic imports.
Suggested Fix
Add patterns for: /import\\s*\\(\\s*(?:`[^`]*\\$\\{[^}]+\\}[^`]*`|['"].*\\+.*['"])\\s*\\)/gi and check for '../' patterns in the matched content.
INFOGitHub Actions secrets echoed in logs
src/scanners/iac-scanner.ts:44
[AGENTS: Harbor - Supply]containers, supply_chain
**Perspective 1:** GitHub Actions workflow echoes secrets to logs, exposing them in workflow run output
**Perspective 2:** The scanner only detects 'echo ${{ secrets.NPM_TOKEN }}' pattern but doesn't check for other secret exposure patterns like printing env vars, logging sensitive data, or secrets in workflow configuration.
Suggested Fix
Expand detection to include all common secret exposure patterns in GitHub Actions, GitLab CI, and other CI/CD systems.
INFOSQL injection via string interpolation in where()
**Perspective 1:** The scanner detects string interpolation (#{}) in .where() calls which can lead to SQL injection if user input is directly interpolated without sanitization. This pattern matches Ruby on Rails code where developers might use raw SQL strings with interpolation instead of parameterized queries.
**Perspective 2:** Line 19 checks for SQL injection via string interpolation in where() method but only looks for '#{' pattern. This is insufficient as it misses other dangerous patterns like direct string concatenation or parameter injection without proper sanitization. The detection should also check for patterns like 'where("name = '" + params[:name] + "'")' or 'where("name = ?", unsafe_input)' where unsafe_input isn't validated.
**Perspective 3:** Pattern 'line.includes('.where(') && line.includes('#{')' detects string interpolation in where() but misses many SQL injection vectors (concatenation, .find_by, .select). Also produces false positives for safe interpolation in comments.
Suggested Fix
Expand pattern to include: /\\.where\\(\\s*['"`].*\\+.*params\\[/, /\\.where\\(\\s*['"`].*#\\{/, and check for parameterized queries without validation of the parameter values.
INFOSQL injection via string interpolation in where() - multi-line pattern
src/scanners/rails-security-scanner.ts:126
[AGENTS: Syringe]db_injection
The scanner uses a multi-line regex pattern to detect SQL injection via string interpolation in .where() calls across multiple lines. This can catch more complex injection patterns but still indicates unsafe query construction.
Suggested Fix
Replace string interpolation with parameterized queries using placeholders (? or named parameters).
INFOdangerouslySetInnerHTML usage (XSS risk)
src/scanners/security-scanner.ts:417
[AGENTS: Prompt]llm_security
The SEC017 rule detects dangerouslySetInnerHTML usage which can inject arbitrary HTML/scripts. This is a DOM injection vulnerability where LLM-generated HTML could execute malicious scripts.
Suggested Fix
Sanitize HTML content using DOMPurify or similar libraries before using dangerouslySetInnerHTML.
**Perspective 1:** The GUIDE.md file contains JSON output examples with hardcoded API key patterns 'sk-********' which could be copied by users into production code. Documentation examples should avoid showing actual secret patterns.
**Perspective 2:** The comprehensive integration guide (GUIDE.md) contains extensive documentation about security rules, but lacks specific guidance on session management best practices. While it mentions cookie flags (COOKIE001) in the rule catalog, there's no dedicated section on session security implementation, session timeout configuration, or CSRF protection patterns.
**Perspective 3:** The guide mentions external link validation but doesn't specify any request validation, size limits, or timeout configurations for HTTP(S) HEAD requests. This could lead to DoS attacks via slowloris or large response attacks when checking malicious URLs.
**Perspective 4:** The integration guide does not specify encryption requirements for data in transit or at rest when using the tool, which is a PCI-DSS (4.1) and HIPAA (164.312(e)(1)) requirement for protecting sensitive data.
**Perspective 5:** The integration guide describes capabilities that could lead to data exfiltration: external link checking (sending URLs to external services), OSV.dev advisory checking (sending dependency information to third-party), and internal crawling with Puppeteer (accessing and potentially transmitting DOM content). These features could inadvertently collect and transmit sensitive information.
**Perspective 1:** Rule SEC015 detects console.log/error/warn statements which can expose sensitive data in browser developer tools or server logs. This is an information disclosure vulnerability as debug information could be visible to end-users or attackers.
**Perspective 2:** Rule SEC015 flags all console statements with low severity, but console logging in development is normal and expected. The pattern may catch legitimate debugging code that should be allowed in development environments.
**Perspective 3:** Rule SEC015 detects console statements but only checks for console.log, debug, info, warn, error. It may miss other console methods like console.table, console.dir, console.trace, or console.group that could also leak sensitive data. The pattern also doesn't account for indirect console usage via aliases or dynamic property access.
Suggested Fix
Consider adding context-aware detection that distinguishes between development and production code, or exclude certain file patterns (e.g., test files, development utilities).
INFOPattern detection for incomplete implementations
src/rules/vibe/VIBE003.ts:56
[AGENTS: Blacklist]output_encoding
Rule detects patterns like 'throw new Error("Not implemented")' which could indicate incomplete security controls. This is detection code, not a vulnerability.
Suggested Fix
This is detection code - ensure it properly identifies security-relevant incomplete implementations
INFODynamic className with unvalidated input (CSS injection)
src/scanners/react-security-scanner.ts:18
[AGENTS: Prompt]llm_security
The TAILWIND001 rule detects dynamic className with unvalidated input, which could allow CSS injection. While less severe than code execution, this represents a UI manipulation vector where user/LLM input influences rendering.
Suggested Fix
Validate className input against a whitelist of allowed Tailwind classes.
INFOImage alt attribute detection
src/rules/accessibility/A11Y001.ts:44
[AGENTS: Blacklist]output_encoding
Rule detects missing alt attributes on images. While primarily an accessibility issue, proper alt text also prevents certain content injection attacks.
Suggested Fix
This is detection code - ensure it properly identifies missing alt attributes
INFONo logging configuration in environment variables check
src/scanners/env-scanner.ts:1
[AGENTS: Trace]logging
The env scanner checks for secrets in .env files but doesn't verify logging-related environment variables for security issues, such as: overly verbose logging levels in production, missing log aggregation configuration, or insecure log destinations.
Suggested Fix
Add ENV008 rule to check for insecure logging configurations in environment variables, like LOG_LEVEL=DEBUG in production or LOG_FILE with insecure permissions.
INFOMissing request timeout validation for crawler
src/scanners/internal-crawler.ts:22
[AGENTS: Gateway]edge_security
The internal crawler sets a default timeout but doesn't validate if the target application has proper request timeouts configured. Could miss detection of hanging endpoints that don't have server-side timeouts.
Suggested Fix
Add check for server-side timeout configurations: Express `timeout` middleware, Django `REQUEST_TIMEOUT`, etc.
INFOURL validation missing in crawler
src/scanners/internal-crawler.ts:31
[AGENTS: Sentinel]input_validation
Line 31 creates URLs with 'new URL(href, url)' without validating that 'href' is safe. Malicious 'href' values could cause unexpected behavior or SSRF if the crawler is used with user-supplied start URLs.
Suggested Fix
Validate href before creating URL: if (!/^https?:\\/\\//i.test(href) && !/^\\//.test(href)) return;
INFOTimeout check may have false positives
src/scanners/python-security-scanner.ts:32
[AGENTS: Passkey]credentials
The check for 'PYNET001' skips lines with 'timeout' parameter, but 'timeout' could be set to None or a very large value, effectively disabling timeout protection.
Suggested Fix
Check that timeout has a reasonable value: /timeout\s*=\s*(?:None|0|[1-9]\d{4,})/ for excessively large or disabled timeouts
INFOMultiple script entry points for package lifecycle
package.json:17
[AGENTS: Infiltrator]attack_surface
The package defines multiple npm scripts (build, rules:gen, dev, start, test, preversion, prepublishOnly, etc.) that create various entry points during development and publishing workflows.
Suggested Fix
Document security considerations for each script, especially those that run automatically during publishing.
INFOMissing data handling for version information
scripts/check-changelog.js:23
[AGENTS: Warden]privacy
The script reads package.json and CHANGELOG.md files but doesn't specify how version data should be handled or if it contains any sensitive information. While version data is typically public, the pattern of file reading without clear data classification could lead to privacy issues in other contexts.
Suggested Fix
Add comments clarifying that version information is public data and document any privacy considerations for file reading operations.