Review ID: 384537ba79c8Generated: 2026-03-05T02:42:29.505Z
CHANGES REQUESTED
1678
Total Findings
68
Critical
392
High
897
Medium
288
Low
36 of 108 Agents Deployed
PlatinumGoldSilverBronzeCopper
Agent Tier: Gold
ToolJet/ToolJet →
main @ d987e4e
68 critical · 392 high · 897 medium · 288 low · 33 info
Showing top 1000 of 1678 findings (sorted by severity). Full data available via the review API.
HIGHOutdated isolated-vm package with sandbox escape risks
server/lib/utils.ts:1
[AGENTS: Tripwire]dependencies
The code imports isolated-vm without version specification. isolated-vm is a critical security component for sandboxing JavaScript execution. Older versions have had sandbox escape vulnerabilities. Unpinned version may pull in vulnerable versions.
Suggested Fix
Pin isolated-vm to latest secure version and regularly monitor for security updates: "isolated-vm": "^4.6.0" in package.json
HIGHMissing key derivation algorithm validation
server/src/modules/encryption/service.ts:7
[AGENTS: Egress - Passkey]credentials, data_exfiltration
**Perspective 1:** The encryption service uses HKDF with SHA-384 for key derivation but doesn't validate the LOCKBOX_MASTER_KEY environment variable. If this key is missing or weak, all encrypted data is compromised. **Perspective 2:** The encryption service uses hardcoded salt values ('´' character repeated) for key derivation. While this doesn't directly cause exfiltration, it could weaken encryption if the implementation details are exposed, potentially making encrypted data easier to decrypt if intercepted.
Suggested Fix
Add validation for LOCKBOX_MASTER_KEY on service initialization, ensure it's at least 32 bytes, and provide clear error messages if missing.
HIGHMissing tenant isolation in data migration
server/data-migrations/1639734070615-BackfillDataSourcesAndQueriesForAppVersions.ts:34
[AGENTS: Tenant]tenant_isolation
The migration processes all organizations without proper tenant isolation. It fetches all organizations and processes their apps, data sources, and queries in a shared context. This could lead to cross-tenant data leakage if the migration runs in a shared environment or if there are any bugs in the data transformation logic that could mix data between tenants.
Suggested Fix
Add explicit tenant isolation by processing each organization's data in separate transactions or with clear WHERE clauses that include organization_id in all queries.
HIGHSQL injection via string concatenation in UPDATE query
server/data-migrations/1667076251897-BackfillDataSources.ts:74
[AGENTS: Syringe]db_injection
The migration constructs an UPDATE query by directly interpolating the dataSourceId variable into the SQL string without parameterization. This creates a SQL injection vulnerability.
Suggested Fix
Use parameterized queries: await entityManager.createQueryBuilder().update(DataQuery).set({ dataSourceId }).where({ id: dataQuery.id }).execute();
HIGHSQL injection via string concatenation in DELETE query
server/data-migrations/1667076251897-BackfillDataSources.ts:84
[AGENTS: Syringe]db_injection
The migration constructs a DELETE query by concatenating IDs using map and join() without proper parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with IN clause: await entityManager.query(`DELETE FROM data_sources WHERE id IN (${defaultDataSources.map((_, i) => `$${i+1}`).join()})`, defaultDataSources.map(ds => ds.id));
HIGHSQL injection via string concatenation in DELETE query
server/data-migrations/1675844361117-CleanupDataSourceOptionData.ts:26
[AGENTS: Compliance - Siege - Syringe]data_integrity, db_injection, dos
**Perspective 1:** The migration constructs a DELETE query by concatenating IDs using map and join() without proper parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters. **Perspective 2:** The code concatenates IDs directly into SQL DELETE query without proper escaping, creating SQL injection vulnerability. **Perspective 3:** The migration deletes data source options without validating the impact on existing applications or creating audit trails of the deletions.
Suggested Fix
Use parameterized queries with IN clause: await entityManager.query(`DELETE FROM data_source_options WHERE id IN (${idsToDelete.map((_, i) => `$${i+1}`).join()})`, idsToDelete.map(id => id.id));
HIGHSQL injection via string concatenation in UPDATE query
server/data-migrations/1676545162064-BackfillRunpyDatasources.ts:44
[AGENTS: Syringe]db_injection
The migration constructs an UPDATE query by concatenating IDs using map and join() without proper parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with IN clause: await entityManager.query(`UPDATE data_queries SET data_source_id = $1 WHERE id IN (${wronglyAttachedRunpyQueries.map((_, i) => `$${i+2}`).join()})`, [runpyDS[0].id, ...wronglyAttachedRunpyQueries.map(({ id }) => id)]);
HIGHSQL injection via string concatenation in UPDATE query
server/data-migrations/1679604241777-ReplaceTooljetDbTableNamesWithId.ts:44
[AGENTS: Syringe]db_injection
The migration constructs an UPDATE query by concatenating IDs using map and join() without proper parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with IN clause: await entityManager.query(`UPDATE data_queries SET options = $1 WHERE id IN (${wronglyAttachedRunpyQueries.map((_, i) => `$${i+2}`).join()})`, [options, ...wronglyAttachedRunpyQueries.map(({ id }) => id)]);
HIGHCross-tenant data processing in migration
server/data-migrations/1681463532466-addMultipleEnvForCEcreatedApps.ts:19
[AGENTS: Tenant]tenant_isolation
The migration fetches all organizations and processes their app environments and data source options without proper tenant isolation. It creates new environments and copies data source options across organizations in a single migration run, which could potentially mix data between tenants if there are bugs in the logic.
Suggested Fix
Ensure each organization's data is processed in isolation with explicit WHERE clauses including organization_id in all queries and data transformations.
HIGHMissing tenant scoping in environment data source fix
server/data-migrations/1683022868045-environmentDataSourceMappingFix.ts:17
[AGENTS: Tenant]tenant_isolation
The migration processes all organizations and their data source options without proper tenant isolation. It copies data source options between environments within organizations but processes multiple organizations in the same migration run, creating potential for cross-tenant data mixing.
Suggested Fix
Add explicit tenant isolation by ensuring all data operations are scoped to individual organizations with proper WHERE clauses.
HIGHSQL injection via string interpolation in UPDATE query
server/data-migrations/1684145489093-AddUniqueConstraintToFolderName.ts:33
[AGENTS: Entropy - Syringe]db_injection, randomness
**Perspective 1:** The migration constructs an UPDATE query by directly interpolating the folder name and timestamp into the SQL string without parameterization. This creates a SQL injection vulnerability if the name contains malicious characters. **Perspective 2:** Similar to the workspace name migration, folder name duplicates are resolved by appending Date.now() with addWait(1) mitigation. This could still result in collisions in high-concurrency scenarios.
Suggested Fix
Use parameterized queries: await entityManager.update(Folder, { id: folderToChange.id }, { name: `${folderToChange.name} ${Date.now()}` });
HIGHCross-tenant app environment priority update
server/data-migrations/1686826460358-BackFillAppEnvironmentsPriorityColumn.ts:18
[AGENTS: Tenant]tenant_isolation
The migration fetches all organizations and updates their app environments' priority columns without proper tenant isolation. While it processes organizations in a loop, the update queries don't explicitly include organization_id in the WHERE clause, relying on the loop context.
Suggested Fix
UPDATE app_environments SET priority = $1 WHERE id = $2 AND organization_id = $3
HIGHSQL injection via string interpolation in DELETE query
server/data-migrations/1693288308041-organizationUsersRemoveDuplicates.ts:33
[AGENTS: Syringe]db_injection
The migration constructs a DELETE query by directly interpolating the idToKeep variable into the SQL string without parameterization. This creates a SQL injection vulnerability if the ID contains malicious characters.
Suggested Fix
Use parameterized queries: await entityManager.query('DELETE FROM organization_users WHERE id != $1 AND organization_id = $2 AND user_id = $3', [idToKeep, duplicate.organization_id, duplicate.user_id]);
HIGHCross-tenant app definition migration
server/data-migrations/1697473340856-MigrateAppsDefinitionSchemaTransition.ts:30
[AGENTS: Tenant]tenant_isolation
The migration processes all app versions across all tenants without proper tenant isolation. It transforms app definitions and creates new pages, components, layouts, and event handlers in a shared migration context, which could lead to cross-tenant data mixing if there are any bugs in the transformation logic.
Suggested Fix
Add tenant isolation by processing app versions within the context of their organizations, or add organization_id filtering to all queries.
HIGHSQL injection via string interpolation in ALTER TABLE query
server/data-migrations/1715105945504-ReplaceTjDbPrimaryKeyConstraintsForExistingTables.ts:68
[AGENTS: Syringe]db_injection
The migration constructs ALTER TABLE queries by directly interpolating table names into SQL strings without parameterization. This creates a SQL injection vulnerability if any table name contains malicious characters.
Suggested Fix
Use parameterized queries or validate table names before interpolation.
HIGHRaw SQL query with string concatenation
server/data-migrations/1718542399701-UpdateInternalTablesConfigurationsColumn.ts:27
[AGENTS: Syringe]db_injection
Migration uses raw SQL query with LIMIT $1 OFFSET $2 but table name (id) is used directly in query without validation.
Suggested Fix
Validate table names against allowed patterns or use parameterized table names.
HIGHSQL injection in information_schema query
server/data-migrations/1718542399701-UpdateInternalTablesConfigurationsColumn.ts:37
[AGENTS: Syringe]db_injection
Query uses WHERE table_name = $1 with table name from database. While this uses parameterization, the table name comes from untrusted source (database).
Suggested Fix
Validate table names exist in internal_tables before querying information_schema.
HIGHSQL injection in UPDATE query with string concatenation
server/data-migrations/1718542399701-UpdateInternalTablesConfigurationsColumn.ts:67
[AGENTS: Syringe]db_injection
Migration builds tableConfigJson string and uses it directly in UPDATE query without proper escaping.
Suggested Fix
Use parameterized query: UPDATE internal_tables SET configurations = $1 WHERE id = $2
HIGHSQL injection via string concatenation in INSERT query
server/data-migrations/1720365772516-AddingUsersToRespectiveRolesBuilderAndEndUsers.ts:121
[AGENTS: Siege - Syringe]db_injection, dos
**Perspective 1:** The migration constructs an INSERT query by concatenating user IDs and group IDs directly into the SQL string without parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters. **Perspective 2:** The code constructs SQL queries by directly interpolating user IDs without proper escaping, creating SQL injection vulnerabilities.
Suggested Fix
Use parameterized queries with multiple value sets or batch insert with entity manager.
HIGHSQL injection via string concatenation in INSERT query
server/data-migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts:305
[AGENTS: Syringe]db_injection
The migration constructs an INSERT query by concatenating user IDs and group IDs directly into the SQL string without parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with multiple value sets or batch insert with entity manager.
HIGHSQL injection via string concatenation in INSERT query
server/data-migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts:315
[AGENTS: Syringe]db_injection
The migration constructs an INSERT query by concatenating app IDs and permission IDs directly into the SQL string without parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with multiple value sets or batch insert with entity manager.
HIGHSQL injection via string concatenation in INSERT query
server/data-migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts:327
[AGENTS: Syringe]db_injection
The migration constructs an INSERT query by concatenating data source IDs and permission IDs directly into the SQL string without parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with multiple value sets or batch insert with entity manager.
HIGHSQL injection via string interpolation in ALTER TABLE query
server/data-migrations/1721236971725-MoveToolJetDatabaseTablesFromPublicToTenantSchema.ts:122
[AGENTS: Syringe]db_injection
The migration constructs ALTER TABLE queries by directly interpolating table IDs and schema names into SQL strings without parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries or validate that IDs are UUIDs before interpolation.
HIGHSQL injection via string interpolation in ALTER TABLE query
server/data-migrations/1721236971725-MoveToolJetDatabaseTablesFromPublicToTenantSchema.ts:218
[AGENTS: Syringe]db_injection
The migration constructs ALTER TABLE queries by directly interpolating table IDs and schema names into SQL strings without parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries or validate that IDs are UUIDs before interpolation.
HIGHSQL injection via string interpolation in DELETE query
server/data-migrations/1745318714733-DeprecateLocalStaticDataSources.ts:41
[AGENTS: Syringe]db_injection
The migration constructs a DELETE query by concatenating data source IDs using map and join() without proper parameterization. This creates a SQL injection vulnerability if any ID contains malicious characters.
Suggested Fix
Use parameterized queries with IN clause: await queryRunner.query(`DELETE FROM data_sources WHERE id IN (${duplicateDataSourceIds.map((_, i) => `$${i+1}`).join()})`, duplicateDataSourceIds);
HIGHRaw SQL query with string concatenation
server/data-migrations/1751258388314-UpdateRestApiClientAuthInOauth.ts:11
[AGENTS: Syringe]db_injection
The SQL query uses string concatenation with parameters passed via $1, $2 placeholders, but the query is constructed by concatenating strings for the WHERE clause conditions. This could lead to SQL injection if the parameters are not properly sanitized before being passed to the query.
Suggested Fix
Use parameterized queries with proper placeholders for all dynamic values, and avoid string concatenation for SQL conditions.
HIGHRaw SQL query with string concatenation in batch fetch
server/data-migrations/1751258388314-UpdateRestApiClientAuthInOauth.ts:32
[AGENTS: Syringe]db_injection
The fetchDataSourceOptionsInBatches function constructs a SQL query using string concatenation with $1, $2, $3, $4 placeholders. While placeholders are used, the query structure itself is built via string concatenation, which could be vulnerable if any of the dynamic parts (like column names or table names) are derived from user input.
Suggested Fix
Ensure all dynamic parts (like column names, table names) are validated or whitelisted, and use parameterized queries for all values.
HIGHRaw SQL UPDATE query with string concatenation
server/data-migrations/1751258388314-UpdateRestApiClientAuthInOauth.ts:58
[AGENTS: Syringe]db_injection
The UPDATE query is constructed using string concatenation with $1 and $2 placeholders. This could lead to SQL injection if the options or dataSourceOption.id values are not properly sanitized.
Suggested Fix
Use parameterized queries and ensure all inputs are validated before being used in the query.
HIGHSQL injection via string interpolation in UPDATE query
server/data-migrations/1754048735123-MigrateSSHBranchColumnData.ts:21
[AGENTS: Siege - Syringe]db_injection, dos
**Perspective 1:** The migration constructs SQL queries by directly interpolating the branch_name variable into the UPDATE statement without parameterization. This allows SQL injection if the environment variable contains malicious SQL. **Perspective 2:** The branch_name variable is directly interpolated into SQL query without parameterization, allowing SQL injection if the GITSYNC_TARGET_BRANCH environment variable contains malicious SQL.
Suggested Fix
Use parameterized queries: await queryRunner.query(`UPDATE organization_git_ssh SET git_branch = $1`, [branch_name]);
HIGHSQL injection via hardcoded SQL string
server/data-migrations/1754048735123-MigrateSSHBranchColumnData.ts:24
[AGENTS: Syringe]db_injection
The migration uses a hardcoded SQL string without parameterization for the UPDATE query when branch_name is 'master' or not set. While the value is constant, this pattern is unsafe and should use parameterized queries.
Suggested Fix
Use parameterized queries even for constant values: await queryRunner.query(`UPDATE organization_git_ssh SET git_branch = $1`, ['master']);
HIGHSQL injection in raw UPDATE query
server/data-migrations/1761556597329-AddGrantTypeKeyInSSOConfig.ts:45
[AGENTS: Syringe]db_injection
Migration uses raw SQL query with configs object passed directly as parameter. While this uses parameterization, the configs object is modified and could contain malicious content.
Suggested Fix
Validate configs structure before updating.
HIGHSQL injection vulnerability in data migration
server/data-migrations/1762517351039-PopulateOIDCCustomScopes.ts:24
[AGENTS: Tripwire]dependencies
The migration uses string interpolation to insert environment variable content into an SQL query, creating a direct SQL injection vulnerability.
Suggested Fix
Use queryRunner.query with parameters: `UPDATE sso_configs SET configs = jsonb_set(configs::jsonb, '{customScopes}', to_jsonb($1::text)) WHERE sso = 'openid'`, [oidcCustomScopes]
HIGHSQL injection in raw UPDATE query
server/data-migrations/1762770971766-RenameGrantTypeKeyInSSOConfig.ts:47
[AGENTS: Syringe]db_injection
Migration uses raw SQL query with configs object passed directly as parameter. Similar to previous migration, this could be vulnerable if configs contains malicious content.
Suggested Fix
Validate configs structure before updating.
HIGHSQL injection in raw UPDATE query with string concatenation
server/data-migrations/1762960587101-AddGroupSyncEnabledToSAMLConfigs.ts:28
[AGENTS: Syringe]db_injection
Migration uses raw SQL query with string concatenation for sqlBool value: '${sqlBool}'::jsonb. This is a direct SQL injection vulnerability.
Suggested Fix
Use parameterized query: SET configs = jsonb_set(configs::jsonb, '{groupSyncEnabled}', $1::jsonb, true) WHERE sso = 'saml'
HIGHJSON injection in UPDATE query with jsonb operations
server/data-migrations/1764047424500-BackfillMongoDBDatasourceNewFields.ts:4
[AGENTS: Chaos - Sentinel - Syringe]db_injection, edge_cases, input_validation
**Perspective 1:** The code uses jsonb operations to manipulate JSON fields in the database. Similar to other migrations, this could lead to injection if JSON structures contain malicious content. **Perspective 2:** The migration updates MongoDB data source options using JSONB operations without validating that the options field exists or has the expected structure. This could fail if options is null or malformed. **Perspective 3:** The migration assumes options column contains valid JSONB. If some rows have malformed JSON or NULL, the update could fail for those rows, leaving database inconsistent.
Suggested Fix
Add validation: `WHERE ds.id = dso.data_source_id AND ds.kind = 'mongodb' AND dso.options IS NOT NULL`
HIGHJSON injection in UPDATE query with jsonb operations
server/data-migrations/1770370074631-update-salesforce-queryoptions-soql_query-to-query.ts:4
[AGENTS: Chaos - Sentinel - Syringe]db_injection, edge_cases, input_validation
**Perspective 1:** The code uses jsonb operations to manipulate JSON fields in the database. While this is a data migration, improper handling of JSON structures could lead to injection if user data influences the JSON manipulation. **Perspective 2:** The migration updates Salesforce query options by renaming a key in JSON without validating that the JSON is properly formatted or that the 'query' key exists. **Perspective 3:** The migration updates 'query' field to 'soql_query' but uses jsonb_build_object which replaces the entire object. If there are other fields in options, they might be lost or corrupted.
Suggested Fix
Use jsonb_set to preserve other fields: jsonb_set(options::jsonb, '{soql_query}', options::jsonb->'query') - 'query'
HIGHSSL mode removed from database URL potentially disabling encryption
server/scripts/digitalocean-postbuild.sh:10
[AGENTS: Harbor]containers
The script removes '?sslmode=require' from the DATABASE_URL, potentially disabling SSL/TLS encryption for database connections. This could expose sensitive data in transit.
Suggested Fix
Maintain SSL/TLS encryption for database connections. If there are certificate issues, fix the certificate configuration instead of disabling encryption.
HIGHRemoving sslmode from DATABASE_URL could break SSL connections
server/scripts/digitalocean-postbuild.sh:11
[AGENTS: Chaos - Egress - Tripwire]data_exfiltration, dependencies, edge_cases
**Perspective 1:** The script removes '?sslmode=require' from DATABASE_URL to work around CA cert issues, but this disables SSL entirely, potentially exposing database connections to MITM attacks. **Perspective 2:** The script removes '?sslmode=require' from DATABASE_URL, potentially disabling SSL/TLS encryption for database connections. This could expose sensitive data in transit. **Perspective 3:** The script modifies the DATABASE_URL by removing SSL mode parameters, which could potentially expose database credentials if the URL is logged or transmitted insecurely. Database URLs often contain usernames and passwords that could be leaked through logs or error messages.
Suggested Fix
Use parameterized database configuration instead of manipulating connection strings, and ensure no database credentials are logged.
HIGHSSL mode removed from database URL in production
server/scripts/digitalocean-postbuild.sh:12
[AGENTS: Lockdown]configuration
The script removes '?sslmode=require' from DATABASE_URL, disabling SSL/TLS encryption for database connections. This exposes database traffic to potential interception and man-in-the-middle attacks.
Suggested Fix
Maintain SSL/TLS for database connections. If certificate issues exist, fix the CA certificate configuration instead of disabling SSL.
HIGHMultiple services run as root including Redis and PostgreSQL
server/scripts/preview.sh:1
[AGENTS: Compliance - Fuse - Gateway - Harbor - Supply]containers, edge_security, error_security, regulatory, supply_chain
**Perspective 1:** The script starts PostgreSQL and Redis services as root, fixes ownership permissions, and manages multiple services within a single container (violating single responsibility principle). Running multiple services in one container increases attack surface. **Perspective 2:** The preview script starts Redis and PostgreSQL without authentication or security configuration. Redis is started without password protection, and PostgreSQL uses default configurations that may not be secure. **Perspective 3:** The script starts Redis without configuring authentication or encryption. PCI-DSS 3.4 requires rendering cardholder data unreadable anywhere it is stored. SOC 2 CC6.8 requires protection against external threats. Redis without authentication exposes potential sensitive data. **Perspective 4:** The script hardcodes PostgreSQL 13 and Redis without version verification or integrity checks. Services are started with root privilege escalation (su commands) without validating the service binaries. **Perspective 5:** The preview.sh script starts multiple services (PostgreSQL, Redis) without proper error checking. If any service fails to start, the script continues and starts supervisor, leading to cascading failures.
Suggested Fix
Use Docker Compose to run separate containers for PostgreSQL, Redis, and the application. Each service should run in its own container with appropriate non-root users.
HIGHMaster key rotation script with insufficient validation
server/scripts/rotate-lockbox-key.ts:1
[AGENTS: Harbor - Lockdown - Passkey - Recon - Supply]configuration, containers, credentials, info_disclosure, supply_chain
**Perspective 1:** The key rotation script validates key format but doesn't verify that the new key can actually encrypt/decrypt data correctly before proceeding with the full rotation. The dry-run mode only tests decryption with the old key, not encryption with the new key. **Perspective 2:** The key rotation script prompts for and handles encryption master keys in plaintext. While necessary for rotation, the script should ensure keys are not logged, stored, or leaked in memory. The script also doesn't clear the old key from memory after use. **Perspective 3:** The key rotation script handles master encryption keys in build/development scripts. This could expose keys in CI/CD logs or build artifacts if not properly isolated and secured. **Perspective 4:** The lockbox key rotation script exposes detailed information about the encryption system: encryption algorithm (AES-256-GCM with HKDF-SHA384), key derivation process, encrypted tables and columns, and the entire rotation workflow. This information could help attackers understand the encryption implementation and potentially identify weaknesses. **Perspective 5:** While the script performs critical security operations (key rotation), it doesn't implement comprehensive audit logging of who performed the rotation, when, and what changes were made.
Suggested Fix
In dry-run mode, also test that the new key can encrypt and decrypt test data to ensure it's functional before proceeding with production rotation.
HIGHEncryption key validation and testing
server/scripts/rotate-lockbox-key.ts:78
[AGENTS: Egress - Trace]data_exfiltration, logging
**Perspective 1:** The key rotation script tests encryption keys by performing actual encryption/decryption operations and logging results. While necessary for validation, this could potentially expose information about the encryption system in logs if not properly controlled. **Perspective 2:** The script logs detailed progress information including table names and row counts which could expose database structure and data volumes.
Suggested Fix
Ensure test encryption operations don't log sensitive intermediate values. Use minimal logging for key validation.
HIGHManual key rotation script with potential for human error
server/scripts/rotate-lockbox-key.ts:90
[AGENTS: Entropy]randomness
The key rotation script requires manual entry of the old key and confirmation of database backup. While the script itself uses proper encryption (AES-256-GCM with HKDF-SHA384), the manual process introduces risk of human error, mistyped keys, or incomplete backups.
Suggested Fix
Implement automated key rotation with proper backup verification and key validation before proceeding.
HIGHKey rotation lacks rollback capability and emergency procedures
server/scripts/rotate-lockbox-key.ts:120
[AGENTS: Compliance]encryption
The key rotation script doesn't include proper rollback procedures or emergency stop mechanisms. If the rotation fails mid-process, data could be left in an inconsistent state.
Suggested Fix
Implement transaction-based rollback capabilities and emergency stop procedures.
HIGHPotential sensitive data exposure in error messages
server/scripts/rotate-lockbox-key.ts:320
[AGENTS: Trace]logging
The error handling in `rotateCredentials` function includes the credential ID in error messages: `throw new Error(`Failed to rotate credential ${cred.id}: ${error.message}`)`. If credential IDs are sensitive or could be used in correlation attacks, this could be problematic.
Suggested Fix
Use generic error messages without exposing specific IDs, or hash the IDs before logging.
HIGHInsecure key rotation script with plaintext key handling
server/scripts/rotate-lockbox-key.ts:650
[AGENTS: Deadbolt - Egress - Gateway - Harbor - Lockdown - Siege - Trace]configuration, containers, data_exfiltration, dos, edge_security, logging, sessions
**Perspective 1:** The key rotation script prompts for and handles encryption keys in plaintext via command line input, which could expose keys in process listings or shell history. This is particularly dangerous for master encryption keys. **Perspective 2:** The key rotation script prompts for and handles encryption master keys in plaintext through command-line prompts and environment variables. In container environments, these could be exposed through logs, process listings, or environment inspection. **Perspective 3:** The key rotation script contains detailed implementation of encryption/decryption logic and database access patterns that could aid attackers in understanding the security architecture and potentially finding weaknesses. **Perspective 4:** The key rotation uses dbTransactionWrap which will roll back on error, but if the script crashes mid-rotation, some tables may be updated while others are not, leaving the database in an inconsistent state. **Perspective 5:** While the script performs detailed logging during execution, it doesn't create a permanent audit trail in the database or structured logs for the key rotation operation. This security-critical operation should have a tamper-evident audit record. **Perspective 6:** The dry-run mode logs detailed information about encryption testing across multiple tables. While useful for debugging, this reveals system structure and could be captured in logs. **Perspective 7:** The key rotation script performs extensive database operations without any timeout mechanisms, which could cause the script to hang indefinitely if database operations stall.
Suggested Fix
Use secure key management systems, read keys from secure vaults or encrypted files, ensure keys are never logged or exposed in process memory longer than necessary.
HIGHEncryption service implementation details exposed
server/scripts/services/rotation.service.ts:1
[AGENTS: Recon]info_disclosure
The DualKeyEncryptionService class reveals detailed implementation of the encryption system: key format requirements (64 hex characters), encryption algorithm specifics (AES-256-GCM), key derivation using HKDF-SHA384, and table/column-specific encryption patterns. This level of detail could aid cryptographic analysis attacks.
Suggested Fix
Move encryption service implementation to a protected internal module and avoid exposing implementation details in migration scripts.
HIGHDual key encryption service lacks proper key validation and error handling
server/scripts/services/rotation.service.ts:37
[AGENTS: Compliance]encryption
The encryption service validates key format but doesn't validate key strength or implement proper error handling for decryption failures. This could lead to data loss or security breaches.
Suggested Fix
Add key strength validation and comprehensive error handling for decryption failures.
HIGHAI conversation messages may contain sensitive PII without proper safeguards
server/src/entities/ai_conversation_message.entity.ts:33
[AGENTS: Warden]privacy
AI conversation messages store user content and references in plain text fields. These could contain sensitive personal data, business information, or other confidential data without encryption or data classification.
Suggested Fix
Implement encryption for message content, add data classification tags, and ensure proper consent for AI processing of personal data.
HIGHAI artifacts store conversation content without encryption
server/src/entities/artifact.entity.ts:52
[AGENTS: Warden]privacy
Artifacts table stores AI conversation content in JSONB without encryption, potentially containing sensitive business logic or PII.
Suggested Fix
Encrypt the content field or implement field-level encryption for sensitive portions.
HIGHAudit logs may contain sensitive PII without encryption
server/src/entities/audit_log.entity.ts:23
[AGENTS: Trace - Warden]audit, privacy
**Perspective 1:** The audit_log entity stores resource_data and metadata as JSON fields which could contain sensitive user data. There's no encryption or data masking applied to these fields, potentially exposing PII in audit logs. **Perspective 2:** The audit log entity doesn't include a correlation ID field to link related audit events across services or requests.
Suggested Fix
Implement selective encryption or data masking for sensitive fields in audit logs, especially for resource_data containing user information.
HIGHMissing encryption for data source credentials
server/src/entities/data_source.entity.ts:54
[AGENTS: Compliance]regulatory
The DataSource entity doesn't show encryption for data source credentials/options. Storing database credentials and connection strings without encryption violates PCI-DSS requirement 3.4 and HIPAA encryption safeguards.
Suggested Fix
Implement encryption for all sensitive data source configuration fields. Use strong encryption with proper key management for credentials and connection strings.
HIGHSubscription entity stores customer email in plain text
server/src/entities/organization_subscription.entity.ts:31
[AGENTS: Warden]privacy
The OrganizationSubscription entity has an 'email' column that stores the customer's email address in plain text. This is PII and should be encrypted at rest.
Suggested Fix
Encrypt the email column using database encryption or application-level encryption.
HIGHSelf-hosted customer data includes sensitive fields without encryption
server/src/entities/selfhost_customers.entity.ts:21
[AGENTS: Warden]privacy
Self-hosted customer records store email, license key, AI API key, and other sensitive information. The AI API key field is particularly sensitive and should be encrypted at rest.
Suggested Fix
Encrypt sensitive fields like ai_api_key, implement proper key management, and add data classification for customer records.
HIGHSensitive authentication data stored in JSON column without field-level encryption
server/src/entities/sso_config.entity.ts:87
[AGENTS: Warden]privacy
The SSOConfigs entity stores all configuration data in a single JSON column. While there's encryption for specific fields, the JSON structure makes it difficult to implement consistent field-level encryption across all SSO types. Sensitive data like LDAP SSL certificates, SAML private keys, and OAuth secrets are stored together.
Suggested Fix
Consider restructuring to separate sensitive fields into encrypted columns or implement a more robust JSON field-level encryption strategy that covers all sensitive data types across all SSO providers.
HIGHWeak invitation token generation
server/src/entities/user.entity.ts:96
[AGENTS: Entropy]randomness
The User entity has invitationToken field but doesn't show how it's generated. Invitation tokens should be cryptographically secure to prevent account takeover attacks.
Suggested Fix
Use crypto.randomBytes() or uuid.v4() for generating invitation tokens with sufficient entropy (minimum 128 bits).
HIGHWeak forgot password token generation
server/src/entities/user.entity.ts:99
[AGENTS: Entropy]randomness
The User entity has forgotPasswordToken field but doesn't show how it's generated. Password reset tokens should be cryptographically secure to prevent account compromise.
Suggested Fix
Use crypto.randomBytes() or uuid.v4() for generating password reset tokens with sufficient entropy (minimum 128 bits).
HIGHGlobal connection instance without proper synchronization
server/src/helpers/database.helper.ts:16
[AGENTS: Chaos]edge_cases
CONNECTION_INSTANCE is a global variable that could be accessed concurrently during initialization. Race conditions could lead to undefined or multiple connections.
Suggested Fix
Use proper singleton pattern with locking or dependency injection container.
HIGHDynamic where condition construction with string concatenation
server/src/helpers/db-utility/db-search.helper.ts:3
[AGENTS: Syringe]db_injection
The createWhereConditions function builds a whereConditions object by iterating over searchParamObject. If any key or value is derived from user input and used in raw SQL without parameterization, it could lead to SQL injection. The function uses Like operator with string concatenation (`%${condItem.value}%`), which could be risky if condItem.value is not sanitized.
Suggested Fix
Use parameterized queries and avoid constructing SQL strings directly. Validate all keys and values before using them in queries.
HIGHAcorn parser for user input without sandboxing
server/src/helpers/import_export.helpers.ts:1
[AGENTS: Blacklist - Siege - Tripwire - Weights]dependencies, dos, model_supply_chain, output_encoding
**Perspective 1:** The code uses acorn to parse JavaScript expressions from user input. This is dangerous as it could lead to code injection if not properly sandboxed. **Perspective 2:** The extractAndReplaceReferencesFromString function parses and transforms JavaScript expressions using acorn. User-controlled expressions could potentially contain malicious code that gets executed during parsing or transformation. **Perspective 3:** The extractAndReplaceReferencesFromString function uses multiple regex patterns on user-controlled input. The uuidRegex pattern could be vulnerable to ReDoS attacks with carefully crafted input. **Perspective 4:** The parseExpression function uses acorn.parse to parse JavaScript expressions from user input. Malicious or extremely complex expressions could exhaust CPU or memory resources. **Perspective 5:** The template parsing system handles variables and constants that could be used in model configuration templates. This could allow injection of malicious model loading directives.
Suggested Fix
Sanitize template variables used in model configurations. Implement strict content security policies for model templates. Validate all template expansions.
HIGHUnsafe JavaScript expression parsing
server/src/helpers/import_export.helpers.ts:47
[AGENTS: Sentinel]input_validation
The extractAndReplaceReferencesFromString function parses JavaScript expressions using acorn without proper sandboxing. User-controlled input containing malicious JavaScript could be executed during parsing.
Suggested Fix
Implement a strict sandbox for expression parsing or use a safer alternative that doesn't evaluate JavaScript.
HIGHUnsafe acorn parsing of user input
server/src/helpers/import_export.helpers.ts:417
[AGENTS: Chaos - Compliance]edge_cases, regulatory
**Perspective 1:** The code parses user-provided expressions with acorn without sandboxing. Malicious expressions could potentially execute code or cause crashes. **Perspective 2:** Import/export helpers handle entity references and data transformations but don't maintain audit logs of data import/export operations. SOC 2 requires audit trails for data movement including: what data was moved, by whom, when, source/destination, and data classification.
Suggested Fix
Implement import/export audit logging with: user ID, operation type, entity types/counts, timestamp, source/destination identifiers, and data classification level.
HIGHSQL injection in filter method with operator concatenation
server/src/helpers/postgrest_query_builder.ts:158
[AGENTS: Syringe]db_injection
The `filter` method concatenates user-provided `operator` and `value` parameters directly into the SQL query string without validation or parameterization.
Suggested Fix
Validate operator against a whitelist of allowed operators and use parameterized queries for values.
HIGHDatabase password decryption without proper key rotation
server/src/helpers/tooljet_db.helper.ts:47
[AGENTS: Warden]privacy
Database passwords are decrypted using an encryption service, but there's no evidence of key rotation policies or encryption key management. Static encryption keys could lead to data exposure if compromised.
Suggested Fix
Implement key rotation policies, use hardware security modules or cloud KMS for key management, and audit encryption key usage.
HIGHSQL injection in schema creation and privilege granting
server/src/helpers/tooljet_db.helper.ts:122
[AGENTS: Gateway]edge_security
Multiple functions use string interpolation for SQL queries involving schema names and user privileges. This creates SQL injection vulnerabilities.
Suggested Fix
Implement parameterized queries for all database operations. Use database driver's built-in escaping mechanisms.
HIGHInsecure password generation with predictable randomness
server/src/helpers/tooljet_db.helper.ts:304
[AGENTS: Chaos - Compliance - Harbor - Passkey - Tripwire - Warden]credentials, dependencies, edge_cases, privacy, regulatory, secrets
**Perspective 1:** The generateTJDBPasswordForRole function uses Math.random() which is cryptographically insecure. This could lead to predictable passwords. **Perspective 2:** The TJDB password generation function uses crypto.randomBytes but doesn't verify entropy or log password creation events. PCI-DSS requires strong cryptographic key generation with audit trails. Missing: entropy verification, password creation logging, and rotation policy enforcement. **Perspective 3:** The generateTJDBPasswordForRole function logs the raw random bytes to console, which could expose password generation entropy. While the password generation itself uses crypto.randomBytes for entropy, logging the raw bytes could potentially leak information about the password generation process. **Perspective 4:** The createTooljetDatabaseConnection function creates connections but there's no guarantee they'll be destroyed. This could lead to connection pool exhaustion. **Perspective 5:** The password generation function logs Array.from(crypto.randomBytes(...)) which could expose random byte generation patterns or internal state if logs are not properly secured. **Perspective 6:** The generateTJDBPasswordForRole function logs the raw crypto random bytes to console, which could expose sensitive cryptographic material. Additionally, the password generation algorithm uses modulo bias (b % allChars.length) which can reduce entropy. **Perspective 7:** The password generation uses `b % allChars.length` which introduces modulo bias. While crypto.randomBytes provides cryptographically secure random numbers, the modulo operation creates a slight bias toward certain characters. **Perspective 8:** Using uuidv4() for database role names and identifiers. While not inherently insecure, v4 UUIDs don't provide collision resistance guarantees of v1 or v5.
Suggested Fix
Use rejection sampling to avoid modulo bias: `const allCharsLength = allChars.length; const max = 256 - (256 % allCharsLength); let b; do { b = crypto.randomBytes(1)[0]; } while (b >= max); const char = allChars[b % allCharsLength];`
HIGHMissing sanitizeInput implementation review
server/src/helpers/utils.helper:0
[AGENTS: Sanitizer]sanitization
The code references sanitizeInput() function multiple times but the implementation is not shown in the provided code. The effectiveness of all sanitization depends on this function's implementation. If it has weaknesses or bypasses, all DTO sanitization is compromised.
Suggested Fix
Review the sanitizeInput() implementation for completeness, ensure it handles all dangerous characters, encoding bypasses, and context-specific sanitization needs.
HIGHOutdated sanitize-html package with XSS vulnerabilities
server/src/helpers/utils.helper.ts:1
[AGENTS: Tripwire]dependencies
**Perspective 1:** The code imports sanitize-html without version specification. sanitize-html has had multiple XSS bypass vulnerabilities including CVE-2023-26136 and CVE-2022-24433 in older versions. The current version may be vulnerable if not properly pinned. **Perspective 2:** The code imports semver without version specification. semver has had vulnerabilities including CVE-2022-25883 (regular expression denial of service) in versions <7.5.2. Unpinned version may pull in vulnerable versions. **Perspective 3:** The code uses bcrypt for password hashing without version specification. bcrypt has had vulnerabilities including timing attacks in older versions. The current version may be vulnerable if not properly pinned.
Suggested Fix
Pin sanitize-html to latest secure version: "sanitize-html": "^2.12.0" in package.json
HIGHWeak password validation for CE edition
server/src/helpers/utils.helper.ts:17
[AGENTS: Passkey]credentials
CE edition password validation only requires 5 characters minimum and allows up to 100 characters. This is extremely weak and doesn't meet modern security standards. No complexity requirements are enforced.
Suggested Fix
Increase minimum password length to at least 12 characters for CE edition and add basic complexity requirements.
HIGHPassword validation regex allows potentially weak passwords
server/src/helpers/utils.helper.ts:21
[AGENTS: Chaos]edge_cases
The PASSWORD_REGEX allows passwords from 12-24 characters with letters, numbers, and special characters but doesn't enforce complexity requirements (mix of character types). Attackers could use 12-character lowercase-only passwords. Also, the regex doesn't handle Unicode characters properly.
Suggested Fix
Add complexity requirements: require at least one uppercase, one lowercase, one number, and one special character. Consider using a password strength library.
HIGHHTML sanitization function may be insufficient
server/src/helpers/utils.helper.ts:114
[AGENTS: Blacklist - Sanitizer]output_encoding, sanitization
**Perspective 1:** The sanitizeInput function uses sanitize-html with empty allowedTags and allowedAttributes, but uses 'recursiveEscape' mode. While this is generally safe, the sanitize-html library has had bypass vulnerabilities in the past. Additionally, there's no validation of the sanitize-html library version or configuration review. **Perspective 2:** The sanitizeInput function uses sanitize-html with allowedTags: [] and allowedAttributes: {}, but this may not be sufficient for all security contexts. The sanitizer uses 'recursiveEscape' mode which escapes disallowed tags, but this may not handle all XSS vectors in different contexts (e.g., JavaScript, CSS, URL contexts). Additionally, there's no validation of input length or character set restrictions. **Perspective 3:** The sanitizeInput function directly sanitizes the input without first validating or normalizing it. This could lead to issues with character encoding bypasses or unexpected behavior with malformed input. **Perspective 4:** The sanitizeHtml library with default settings may be vulnerable to mutation-based XSS attacks where browsers reinterpret sanitized content in unexpected ways. The configuration doesn't specify nonce or other advanced security features.
Suggested Fix
Consider implementing context-specific sanitization (HTML, JavaScript, URL) and adding input length limits. For HTML contexts, also consider using a more restrictive allowlist approach or a dedicated XSS library like DOMPurify.
HIGHDomain-based access control without audit logging
server/src/helpers/utils.helper.ts:470
[AGENTS: Compliance]regulatory
The isValidSSODomain and isValidPasswordDomain functions enforce domain restrictions but don't log access attempts. This violates PCI-DSS requirement 10.2 (Track all access to network resources) and HIPAA §164.312(b) (Audit controls) by not creating audit trails for access control decisions.
Suggested Fix
Add audit logging for domain validation failures, recording email, domain, and validation result.
HIGHEmail domain validation exposes organizational structure
server/src/helpers/utils.helper.ts:570
[AGENTS: Warden]privacy
Domain validation functions reveal whether specific domains are allowed or restricted, potentially exposing organizational structure or security policies.
Suggested Fix
Return generic error messages that don't reveal specific domain policies or organizational structure.
HIGHEarly import of otel/tracing module
server/src/main.ts:1
[AGENTS: Tripwire]dependencies
The comment states this MUST be first import to ensure OTEL patches modules before they load. This creates a critical dependency on the patching order and could cause issues if the module fails to load.
Suggested Fix
Add proper error handling and fallback if OTEL initialization fails.
HIGHCRM integration DTO includes extensive PII and tracking data
server/src/modules/CRM/dto/crm-integration-dto.ts:27
[AGENTS: Egress]data_exfiltration
The CrmIntegrationDto includes email, firstName, lastName, role, and utmParams with various tracking parameters. This data structure is designed for external transmission and could leak sensitive user information.
Suggested Fix
Implement data minimization and ensure proper consent mechanisms for data sharing with third-party services.
HIGHCRM integration sends PII without encryption guarantee
server/src/modules/CRM/dto/crm-integration-dto.ts:70
[AGENTS: Warden]privacy
The CrmIntegrationDto sends email, name, and tracking data to external CRM systems without explicit mention of encryption in transit or at rest in the external system.
Suggested Fix
Add documentation/validation that external CRM connections use TLS and the recipient system has adequate privacy controls.
HIGHCRM integration sends user data to external service
server/src/modules/CRM/service.ts:6
[AGENTS: Egress]data_exfiltration
The CRM service has a method to push data to HubSpot, which could include user email, name, role, and other PII. This is an outbound data flow to a third-party service that could leak sensitive information.
Suggested Fix
Ensure proper consent and data minimization principles are followed. Only send necessary fields and consider pseudonymization.
HIGHCRM data interface includes PII and sensitive fields
server/src/modules/CRM/types/index.ts:12
[AGENTS: Egress]data_exfiltration
The CRMData interface includes email, firstName, lastName, role, and utmParams which could contain PII. This data is designed to be sent to external CRM systems, creating an exfiltration channel.
Suggested Fix
Review data minimization and ensure only necessary fields are included in external integrations.
HIGHCRM data includes sensitive tracking parameters
server/src/modules/CRM/types/index.ts:24
[AGENTS: Warden]privacy
The CRMData interface includes utmParams and tracking flags (isSignedUpUsingGoogleSSO, isSignedUpUsingGithubSSO) which could be considered sensitive behavioral data under GDPR.
Suggested Fix
Add consent mechanism for marketing/tracking data collection and ensure proper data retention policies.
HIGHAccess control logic lacks comprehensive audit logging
server/src/modules/ability/util.service.ts:279
[AGENTS: Compliance]regulatory
The ability utility service manages user permissions and access controls but doesn't log permission changes for audit purposes. SOC 2 and HIPAA require audit trails for all access control changes including: who granted/revoked permissions, what permissions changed, when, and for which users/resources.
Suggested Fix
Add audit logging for all permission changes including: admin user ID, target user ID, permission type, old permissions, new permissions, timestamp, and reason for change.
HIGHShared cache without tenant isolation
server/src/modules/ai/ai-cache.ts:1
[AGENTS: Siege - Tenant - Tripwire]dependencies, dos, tenant_isolation
**Perspective 1:** AiCacheService implements a shared cache without tenant namespace prefixes. In a multi-tenant environment, this could lead to cache key collisions and cross-tenant data leakage. **Perspective 2:** The AiCacheService appears to implement caching but the actual cache implementation (InMemoryCacheService) stores promises without any size limits or eviction policy. This could lead to memory exhaustion if many cache entries are created. **Perspective 3:** AiCacheService implements basic in-memory cache without size limits, TTL, or eviction policies, risking memory exhaustion.
Suggested Fix
Add organizationId prefix to all cache keys (e.g., 'org:{organizationId}:{cacheKey}').
HIGHAI service dependencies not specified
server/src/modules/ai/controller.ts:1
[AGENTS: Tripwire]dependencies
The AI module interfaces suggest integration with external AI providers (OpenAI, Claude, etc.) but there's no visible dependency management or version control for these external API clients.
Suggested Fix
Define and pin versions for AI provider SDKs, implement API key rotation, and add rate limiting for external API calls.
HIGHAI endpoints without rate limiting or cost controls
server/src/modules/ai/controller.ts:17
[AGENTS: Siege]dos
Multiple AI endpoints (sendUserMessage, sendUserDocsMessage, approvePrd, etc.) can be abused to generate expensive AI API calls repeatedly, exhausting AI credits and causing financial DoS.
Suggested Fix
Implement strict rate limiting, quota management, and cost controls per user/organization.
HIGHAI agents service methods process potentially sensitive data
server/src/modules/ai/interfaces/IAgentsService.ts:3
[AGENTS: Egress]data_exfiltration
The IAgentsService interface includes methods for processing user prompts, documents, and other data that could contain PII. These methods likely send data to external AI services.
Suggested Fix
Ensure proper data sanitization and anonymization before external transmission.
HIGHMissing validation for AI gateway provider and operation
server/src/modules/ai/interfaces/IUtilService.ts:6
[AGENTS: Sentinel]input_validation
The AIGateway method accepts provider and operation_id parameters without validation, which could lead to calling unauthorized or non-existent AI providers/operations.
Suggested Fix
Add validation for allowed AI providers and operation IDs.
HIGHMissing validation for AI prompt body
server/src/modules/ai/interfaces/IUtilService.ts:8
[AGENTS: Sentinel - Weights]input_validation, model_supply_chain
**Perspective 1:** The prompt_body parameter in AIGateway method is not validated, potentially allowing malicious or excessively large prompts. **Perspective 2:** The AIGateway interface definition accepts provider and operation_id parameters for external AI calls but lacks security controls for model verification, checksum validation, or integrity checking. This creates a supply chain vulnerability where malicious models could be loaded.
Suggested Fix
Add model verification parameters to the interface, require checksum validation, and implement provider allowlisting with version pinning.
HIGHAI service methods could send user data to external AI providers
server/src/modules/ai/service.ts:6
[AGENTS: Egress]data_exfiltration
The AI service has methods for sending user messages, docs messages, and other interactions that could contain sensitive information. These methods likely interface with external AI providers, creating an exfiltration channel for PII.
Suggested Fix
Implement data anonymization and filtering before sending to external AI services. Review data processing agreements with AI providers.
HIGHAI services process prompts without data classification
server/src/modules/ai/services/agents.service.ts:28
[AGENTS: Warden]privacy
AI agents process user prompts and organizational data without visible data classification or filtering for PII before sending to AI models.
Suggested Fix
Implement PII detection and redaction before processing prompts through AI services.
HIGHMissing tenant isolation in GraphService methods
server/src/modules/ai/services/graph.service.ts:14
[AGENTS: Tenant]tenant_isolation
GraphService methods (getRelatedComponents, analyzeDependencies, getComponentGraph) don't accept organizationId parameter and don't have tenant isolation. In a multi-tenant environment, these methods could leak data across tenants.
Suggested Fix
Add organizationId parameter to all methods and implement proper tenant scoping for graph queries.
HIGHMissing integrity verification for AI-generated artifacts
server/src/modules/ai/util.service.ts:1
[AGENTS: Supply]supply_chain
AI service generates components, queries, and other artifacts without cryptographic verification. There's no mechanism to ensure AI-generated code hasn't been tampered with or to verify its origin.
Suggested Fix
Implement digital signatures for AI-generated artifacts and verify signatures before deployment.
HIGHUnverified AI model gateway with external provider calls
server/src/modules/ai/util.service.ts:15
[AGENTS: Weights]model_supply_chain
The AIGateway method accepts provider and operation_id parameters and makes external API calls to AI providers without verification of model integrity, checksum validation, or pinning to specific model versions. This allows loading models from untrusted sources without supply chain security controls.
Suggested Fix
Implement model registry verification, require specific model version hashes, add checksum validation for downloaded models, and implement allowlisting for approved model providers and versions.
HIGHApp Git controller endpoints return NotFoundException without implementation
server/src/modules/app-git/controller.ts:23
[AGENTS: Mirage]false_confidence
All endpoints in AppGitController (getAppsMetaFile, gitSyncApp, getAppMetaFile, getAppConfig, createGitApp, pullGitAppChanges, renameAppOrVersion, updateAppGitConfigs, getAppGitConfigs) throw NotFoundException without implementing any security controls or business logic. This creates false confidence in Git app synchronization security.
Suggested Fix
Implement proper authentication, authorization, and business logic for app Git operations.
HIGHMissing tenant isolation in app history streaming
server/src/modules/app-history/app-history-stream.service.ts:6
[AGENTS: Tenant]tenant_isolation
AppHistoryStreamService methods accept appVersionId without tenant context, potentially allowing users to access history streams from other tenants' apps.
Suggested Fix
Add organizationId parameter and validate user's access to the app before allowing history stream access.
HIGHMissing tenant isolation in app history lookup
server/src/modules/app-history/guards/validate-app-history.guard.ts:29
[AGENTS: Tenant]tenant_isolation
The ValidateAppHistoryGuard fetches app history without verifying the associated app belongs to the user's organization. This could allow cross-tenant history access.
Suggested Fix
Add organization filtering in the repository method getVersionAndAppIdForHistory.
HIGHMissing tenant context in background job processing
server/src/modules/app-history/queue/history-queue.processor.ts:11
[AGENTS: Siege - Tenant]dos, tenant_isolation
**Perspective 1:** HistoryQueueProcessor processes background jobs without tenant context validation. Jobs could contain data from any tenant without proper isolation. **Perspective 2:** The history queue processor processes jobs without any rate limiting or backpressure mechanism. A flood of history capture jobs could overwhelm the system.
Suggested Fix
Implement rate limiting on job processing or add backpressure by checking queue size before accepting new jobs.
HIGHMissing tenant isolation in component name resolution
server/src/modules/app-history/repositories/name-resolver.repository.ts:13
[AGENTS: Siege - Tenant]dos, tenant_isolation
**Perspective 1:** The getComponentNames method queries Component by ids without organization filtering. If component IDs are not globally unique, this could leak names across tenants. **Perspective 2:** Each get*Names method (getComponentNames, getPageNames, etc.) performs separate database queries. If called with large batches of IDs, this could lead to many parallel database queries exhausting connection pools.
Suggested Fix
Combine similar queries or implement batch fetching with pagination.
HIGHApp history queueing appears to be implemented but is actually disabled
server/src/modules/app-history/util.service.ts:84
[AGENTS: Compliance - Mirage]false_confidence, regulatory
**Perspective 1:** The queueHistoryCapture() method is completely commented out with a note 'App history temporarily disabled'. However, the method signature and calls throughout the code suggest it's functional. This creates a false sense that app history is being captured when it's actually doing nothing. **Perspective 2:** The app history capture functionality is commented out ('App history temporarily disabled'), removing change audit capabilities. This violates SOC 2 change management controls (CC8.1) and PCI-DSS requirement 10.2 for audit trails of system changes.
Suggested Fix
Either remove the method and all calls to it, or clearly document that app history is disabled, or implement it properly.
HIGHComplete controller with all endpoints returning NotImplementedException
server/src/modules/app-permissions/controller.ts:24
[AGENTS: Mirage]false_confidence
The entire AppPermissionsController has every endpoint throwing NotFoundException or similar. The controller is fully defined with routes, guards, and decorators, suggesting a complete permissions system, but all endpoints are non-functional. This is security theater - the appearance of a permissions system without implementation.
Suggested Fix
Either implement the endpoints or remove the controller until it can be properly implemented.
HIGHMissing tenant isolation in component permissions query
server/src/modules/app-permissions/repositories/component-permissions.repository.ts:14
[AGENTS: Tenant]tenant_isolation
The method getComponentPermissions queries ComponentPermission by componentId without filtering by organizationId or tenant context. If component IDs are not globally unique across tenants, this could leak data across tenants.
Suggested Fix
Add a join to the component's app or organization to filter by tenant (organizationId). Ensure the query includes a WHERE clause that scopes to the user's organization.
HIGHMissing tenant isolation in component permission creation validation
server/src/modules/app-permissions/repositories/component-permissions.repository.ts:37
[AGENTS: Tenant]tenant_isolation
The method createComponentPermissions checks for existing permission by componentId only, without tenant scope. This could allow a tenant to interfere with another tenant's component permissions if component IDs collide.
Suggested Fix
Include organizationId or appId in the WHERE clause to scope the check to the tenant.

Summary

Consensus from 1836 reviewer(s): Razor, Pedant, Specter, Vault, Gatekeeper, Blacklist, Chaos, Cipher, Deadbolt, Sentinel, Entropy, Phantom, Sanitizer, Syringe, Passkey, Warden, Gateway, Lockdown, Siege, Infiltrator, Compliance, Harbor, Vector, Provenance, Prompt, Wallet, Tripwire, Trace, Exploit, Supply, Fuse, Recon, Weights, Mirage, Egress, Tenant, Razor, Pedant, Specter, Vault, Gatekeeper, Syringe, Deadbolt, Cipher, Sanitizer, Sentinel, Blacklist, Phantom, Warden, Entropy, Chaos, Passkey, Compliance, Siege, Lockdown, Infiltrator, Gateway, Tripwire, Vector, Provenance, Prompt, Wallet, Recon, Harbor, Exploit, Supply, Trace, Fuse, Weights, Egress, Mirage, Tenant, Razor, Pedant, Specter, Vault, Gatekeeper, Blacklist, Sanitizer, Cipher, Deadbolt, Syringe, Passkey, Phantom, Entropy, Warden, Chaos, Lockdown, Sentinel, Harbor, Siege, Infiltrator, Compliance, Gateway, Vector, Provenance, Prompt, Wallet, Supply, Tripwire, Exploit, Trace, Weights, Recon, Fuse, Mirage, Tenant, Egress, Razor, Pedant, Specter, Vault, Gatekeeper, Blacklist, Syringe, Cipher, Chaos, Sentinel, Sanitizer, Phantom, Deadbolt, Passkey, Entropy, Warden, Siege, Compliance, Harbor, Infiltrator, Gateway, Tripwire, Vector, Provenance, Prompt, Wallet, Lockdown, Supply, Exploit, Fuse, Recon, Weights, Trace, Egress, Tenant, Mirage, Razor, Pedant, Specter, Vault, Gatekeeper, Deadbolt, Blacklist, Cipher, Sentinel, Sanitizer, Passkey, Phantom, Entropy, Syringe, Chaos, Harbor, Siege, Compliance, Warden, Infiltrator, Gateway, Lockdown, Vector, Provenance, Prompt, Wallet, Tripwire, Recon, Exploit, Supply, Trace, Fuse, Weights, Mirage, Egress, Tenant, Razor, Pedant, Specter, Vault, Gatekeeper, Deadbolt, Sanitizer, Cipher, Syringe, Warden, Chaos, Phantom, Blacklist, Sentinel, Passkey, Compliance, Entropy, Gateway, Lockdown, Infiltrator, Siege, Harbor, Vector, Provenance, Prompt, Wallet, Tripwire, Recon, Exploit, Trace, Supply, Egress, Weights, Mirage, Fuse, Tenant, Razor, Pedant, Specter, Vault, Gatekeeper, Blacklist, Deadbolt, Cipher, Sentinel, Passkey, Sanitizer, Phantom, Syringe, Chaos, Entropy, Warden, Lockdown, Siege, Harbor, Infiltrator, Gateway, Supply, Vector, Provenance, Prompt, Wallet, Recon, Compliance, Exploit, Tripwire, Fuse, Weights, Mirage, Tenant, Egress, Trace, Razor, Pedant, Specter, Vault, Gatekeeper, Deadbolt, Syringe, Cipher, Blacklist, Sanitizer, Chaos, Phantom, Entropy, Passkey, Sentinel, Warden, Siege, Compliance, Harbor, Infiltrator, Gateway, Tripwire, Vector, Provenance, Prompt, Wallet, Supply, Trace, Exploit, Lockdown, Recon, Weights, Mirage, Fuse, Egress, Tenant, Razor, Pedant, Specter, Vault, Gatekeeper, Deadbolt, Blacklist, Cipher, Sanitizer, Syringe, Entropy, Phantom, Siege, Sentinel, Passkey, Chaos, Warden, Lockdown, Gateway, Infiltrator, Harbor, Tripwire, Vector, Provenance, Prompt, Wallet, Compliance, Supply, Exploit, Trace, Fuse, Weights, Recon, Tenant, Egress, Mirage, Razor, Pedant, Chaos, Sentinel, Specter, Vault, Gatekeeper, Cipher, Warden, Blacklist, Sanitizer, Phantom, Entropy, Passkey, Deadbolt, Siege, Compliance, Syringe, Harbor, Infiltrator, Fuse, Gateway, Vector, Provenance, Prompt, Wallet, Mirage, Lockdown, Exploit, Tenant, Weights, Supply, Trace, Recon, Tripwire, Egress, Razor, Pedant, Chaos, Sentinel, Specter, Blacklist, Syringe, Sanitizer, Vault, Gatekeeper, Passkey, Cipher, Warden, Compliance, Entropy, Phantom, Siege, Lockdown, Gateway, Harbor, Tripwire, Trace, Supply, Infiltrator, Fuse, Recon, Vector, Provenance, Prompt, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Deadbolt, Supply, Provenance, Recon, Cipher, Warden, Harbor, Razor, Trace, Prompt, Tripwire, Vault, Fuse, Siege, Infiltrator, Gateway, Entropy, Blacklist, Pedant, Deadbolt, Lockdown, Syringe, Gatekeeper, Chaos, Phantom, Passkey, Vector, Specter, Compliance, Sentinel, Sanitizer, Mirage, Wallet, Exploit, Tenant, Weights, Egress, Gatekeeper, Phantom, Supply, Razor, Sentinel, Warden, Trace, Provenance, Syringe, Infiltrator, Cipher, Specter, Siege, Entropy, Recon, Passkey, Tripwire, Vault, Sanitizer, Gateway, Fuse, Chaos, Prompt, Harbor, Lockdown, Compliance, Pedant, Deadbolt, Vector, Blacklist, Wallet, Exploit, Weights, Tenant, Egress, Mirage, Trace, Prompt, Infiltrator, Provenance, Specter, Gatekeeper, Recon, Passkey, Vector, Entropy, Lockdown, Cipher, Supply, Sentinel, Chaos, Fuse, Pedant, Phantom, Tripwire, Sanitizer, Gateway, Deadbolt, Blacklist, Syringe, Compliance, Vault, Harbor, Razor, Warden, Siege, Exploit, Wallet, Mirage, Weights, Egress, Tenant, Vault, Tripwire, Specter, Harbor, Deadbolt, Fuse, Recon, Pedant, Lockdown, Phantom, Blacklist, Passkey, Sentinel, Razor, Syringe, Gateway, Infiltrator, Provenance, Vector, Entropy, Sanitizer, Compliance, Cipher, Supply, Chaos, Trace, Gatekeeper, Prompt, Siege, Warden, Exploit, Wallet, Mirage, Weights, Tenant, Egress, Phantom, Blacklist, Fuse, Compliance, Sanitizer, Provenance, Lockdown, Passkey, Cipher, Harbor, Gateway, Warden, Tripwire, Prompt, Sentinel, Vector, Gatekeeper, Pedant, Specter, Entropy, Syringe, Razor, Infiltrator, Chaos, Deadbolt, Vault, Supply, Recon, Trace, Siege, Weights, Wallet, Mirage, Tenant, Exploit, Egress, Tripwire, Provenance, Blacklist, Gatekeeper, Compliance, Deadbolt, Prompt, Infiltrator, Supply, Siege, Passkey, Pedant, Harbor, Sanitizer, Gateway, Warden, Lockdown, Recon, Specter, Vault, Trace, Razor, Fuse, Phantom, Sentinel, Cipher, Vector, Entropy, Syringe, Chaos, Wallet, Exploit, Mirage, Weights, Tenant, Egress, Gateway, Fuse, Phantom, Cipher, Vector, Lockdown, Prompt, Syringe, Chaos, Warden, Pedant, Provenance, Specter, Blacklist, Passkey, Infiltrator, Gatekeeper, Supply, Entropy, Recon, Siege, Deadbolt, Harbor, Razor, Trace, Sentinel, Compliance, Sanitizer, Tripwire, Vault, Wallet, Weights, Tenant, Egress, Mirage, Exploit, Prompt, Pedant, Vector, Provenance, Sentinel, Siege, Vault, Blacklist, Recon, Specter, Entropy, Tripwire, Supply, Phantom, Sanitizer, Lockdown, Deadbolt, Harbor, Chaos, Warden, Gatekeeper, Trace, Compliance, Cipher, Fuse, Passkey, Syringe, Infiltrator, Gateway, Razor, Wallet, Weights, Tenant, Mirage, Egress, Exploit, Recon, Passkey, Blacklist, Gatekeeper, Compliance, Syringe, Gateway, Chaos, Supply, Infiltrator, Cipher, Phantom, Sanitizer, Lockdown, Prompt, Trace, Entropy, Vector, Razor, Pedant, Warden, Provenance, Tripwire, Deadbolt, Sentinel, Specter, Vault, Harbor, Fuse, Siege, Weights, Wallet, Mirage, Tenant, Exploit, Egress, Fuse, Harbor, Specter, Sanitizer, Sentinel, Compliance, Supply, Gateway, Entropy, Passkey, Pedant, Syringe, Blacklist, Cipher, Phantom, Prompt, Vault, Deadbolt, Trace, Chaos, Vector, Provenance, Tripwire, Warden, Gatekeeper, Recon, Siege, Infiltrator, Lockdown, Razor, Wallet, Tenant, Weights, Exploit, Egress, Mirage, Sentinel, Vector, Siege, Fuse, Gateway, Specter, Phantom, Vault, Blacklist, Entropy, Compliance, Tripwire, Sanitizer, Gatekeeper, Chaos, Cipher, Pedant, Infiltrator, Lockdown, Recon, Harbor, Passkey, Provenance, Razor, Syringe, Warden, Prompt, Supply, Deadbolt, Trace, Wallet, Tenant, Weights, Exploit, Egress, Mirage, Passkey, Phantom, Compliance, Vault, Razor, Recon, Cipher, Sentinel, Gatekeeper, Warden, Fuse, Pedant, Infiltrator, Deadbolt, Gateway, Blacklist, Entropy, Specter, Tripwire, Provenance, Sanitizer, Syringe, Siege, Trace, Vector, Supply, Lockdown, Harbor, Chaos, Prompt, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Sentinel, Provenance, Fuse, Recon, Razor, Phantom, Sanitizer, Entropy, Siege, Vector, Lockdown, Compliance, Pedant, Prompt, Gatekeeper, Cipher, Supply, Gateway, Trace, Passkey, Harbor, Deadbolt, Warden, Specter, Vault, Syringe, Infiltrator, Tripwire, Chaos, Blacklist, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Siege, Specter, Lockdown, Pedant, Cipher, Fuse, Provenance, Harbor, Phantom, Tripwire, Chaos, Sanitizer, Syringe, Vector, Deadbolt, Infiltrator, Recon, Supply, Blacklist, Gateway, Passkey, Prompt, Compliance, Trace, Entropy, Gatekeeper, Vault, Sentinel, Razor, Warden, Exploit, Wallet, Mirage, Weights, Egress, Tenant, Warden, Razor, Trace, Blacklist, Tripwire, Lockdown, Passkey, Pedant, Fuse, Sanitizer, Specter, Siege, Gatekeeper, Harbor, Syringe, Deadbolt, Supply, Cipher, Prompt, Gateway, Compliance, Vector, Chaos, Recon, Infiltrator, Provenance, Entropy, Phantom, Vault, Sentinel, Mirage, Tenant, Exploit, Wallet, Weights, Egress, Gatekeeper, Vector, Sentinel, Tripwire, Entropy, Trace, Syringe, Fuse, Compliance, Chaos, Infiltrator, Cipher, Lockdown, Provenance, Gateway, Passkey, Deadbolt, Recon, Siege, Vault, Sanitizer, Warden, Prompt, Razor, Pedant, Harbor, Blacklist, Specter, Phantom, Supply, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Fuse, Chaos, Tripwire, Specter, Siege, Compliance, Lockdown, Syringe, Sanitizer, Prompt, Blacklist, Cipher, Passkey, Phantom, Gateway, Trace, Gatekeeper, Harbor, Deadbolt, Sentinel, Infiltrator, Razor, Provenance, Warden, Recon, Pedant, Vault, Supply, Vector, Entropy, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Harbor, Sanitizer, Phantom, Blacklist, Entropy, Gateway, Pedant, Lockdown, Cipher, Vector, Gatekeeper, Trace, Vault, Deadbolt, Sentinel, Passkey, Provenance, Compliance, Razor, Prompt, Specter, Recon, Infiltrator, Supply, Fuse, Siege, Syringe, Warden, Chaos, Tripwire, Mirage, Wallet, Exploit, Tenant, Weights, Egress, Vault, Lockdown, Sentinel, Supply, Passkey, Provenance, Tripwire, Blacklist, Entropy, Razor, Syringe, Infiltrator, Gateway, Siege, Harbor, Trace, Specter, Cipher, Chaos, Phantom, Prompt, Warden, Recon, Compliance, Deadbolt, Pedant, Sanitizer, Vector, Fuse, Gatekeeper, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Sanitizer, Siege, Passkey, Gateway, Cipher, Compliance, Syringe, Vault, Sentinel, Lockdown, Prompt, Chaos, Gatekeeper, Deadbolt, Fuse, Supply, Harbor, Phantom, Warden, Vector, Trace, Specter, Recon, Razor, Blacklist, Pedant, Entropy, Infiltrator, Provenance, Tripwire, Mirage, Exploit, Wallet, Weights, Egress, Tenant, Siege, Blacklist, Supply, Harbor, Pedant, Prompt, Syringe, Specter, Compliance, Sanitizer, Vault, Razor, Fuse, Tripwire, Gateway, Entropy, Trace, Cipher, Sentinel, Infiltrator, Chaos, Warden, Deadbolt, Phantom, Gatekeeper, Provenance, Passkey, Lockdown, Vector, Recon, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Specter, Sentinel, Trace, Fuse, Siege, Pedant, Syringe, Sanitizer, Infiltrator, Gateway, Entropy, Gatekeeper, Recon, Cipher, Vector, Vault, Razor, Warden, Supply, Provenance, Compliance, Deadbolt, Tripwire, Blacklist, Passkey, Chaos, Prompt, Phantom, Lockdown, Harbor, Weights, Wallet, Mirage, Egress, Exploit, Tenant, Passkey, Sentinel, Pedant, Fuse, Gatekeeper, Vault, Prompt, Warden, Chaos, Phantom, Compliance, Cipher, Siege, Supply, Razor, Infiltrator, Trace, Harbor, Sanitizer, Recon, Provenance, Vector, Tripwire, Gateway, Lockdown, Entropy, Syringe, Deadbolt, Blacklist, Specter, Wallet, Exploit, Weights, Tenant, Egress, Mirage, Deadbolt, Vault, Entropy, Siege, Sentinel, Vector, Recon, Harbor, Trace, Gatekeeper, Lockdown, Blacklist, Syringe, Compliance, Pedant, Provenance, Cipher, Supply, Specter, Gateway, Warden, Prompt, Fuse, Infiltrator, Tripwire, Passkey, Razor, Chaos, Phantom, Sanitizer, Wallet, Weights, Egress, Tenant, Mirage, Exploit, Recon, Siege, Provenance, Deadbolt, Phantom, Blacklist, Pedant, Warden, Compliance, Gateway, Razor, Chaos, Trace, Harbor, Tripwire, Entropy, Syringe, Lockdown, Vector, Gatekeeper, Cipher, Supply, Specter, Passkey, Vault, Fuse, Sanitizer, Sentinel, Infiltrator, Prompt, Mirage, Wallet, Exploit, Tenant, Egress, Weights, Vector, Warden, Syringe, Prompt, Vault, Trace, Pedant, Razor, Provenance, Deadbolt, Gateway, Lockdown, Gatekeeper, Cipher, Chaos, Entropy, Siege, Fuse, Recon, Supply, Infiltrator, Sentinel, Sanitizer, Harbor, Phantom, Tripwire, Specter, Compliance, Blacklist, Passkey, Tenant, Wallet, Mirage, Weights, Exploit, Egress, Passkey, Infiltrator, Compliance, Provenance, Phantom, Sentinel, Trace, Pedant, Fuse, Recon, Tripwire, Warden, Sanitizer, Vector, Gatekeeper, Supply, Gateway, Deadbolt, Lockdown, Cipher, Vault, Siege, Chaos, Razor, Blacklist, Specter, Syringe, Entropy, Harbor, Prompt, Wallet, Mirage, Weights, Exploit, Tenant, Egress, Sentinel, Siege, Prompt, Recon, Entropy, Pedant, Tripwire, Deadbolt, Gateway, Infiltrator, Phantom, Supply, Sanitizer, Trace, Harbor, Syringe, Vector, Vault, Chaos, Blacklist, Lockdown, Cipher, Fuse, Razor, Warden, Provenance, Gatekeeper, Passkey, Compliance, Specter, Egress, Mirage, Weights, Exploit, Tenant, Wallet, Harbor, Sanitizer, Razor, Trace, Lockdown, Recon, Supply, Gatekeeper, Deadbolt, Blacklist, Siege, Fuse, Specter, Vector, Infiltrator, Prompt, Cipher, Gateway, Passkey, Syringe, Provenance, Compliance, Entropy, Phantom, Pedant, Tripwire, Sentinel, Chaos, Vault, Warden, Tenant, Wallet, Mirage, Weights, Exploit, Egress, Vault, Vector, Cipher, Infiltrator, Gateway, Harbor, Pedant, Entropy, Phantom, Sanitizer, Fuse, Provenance, Razor, Siege, Trace, Chaos, Compliance, Syringe, Supply, Specter, Lockdown, Recon, Deadbolt, Sentinel, Warden, Gatekeeper, Prompt, Tripwire, Blacklist, Passkey, Mirage, Wallet, Exploit, Tenant, Egress, Weights, Chaos, Phantom, Deadbolt, Passkey, Lockdown, Gateway, Harbor, Tripwire, Sanitizer, Syringe, Infiltrator, Vault, Pedant, Vector, Provenance, Recon, Gatekeeper, Sentinel, Fuse, Supply, Prompt, Siege, Trace, Blacklist, Razor, Cipher, Warden, Compliance, Entropy, Specter, Exploit, Wallet, Mirage, Weights, Tenant, Egress, Compliance, Sentinel, Syringe, Trace, Chaos, Cipher, Prompt, Gateway, Pedant, Lockdown, Provenance, Siege, Sanitizer, Vault, Tripwire, Phantom, Harbor, Gatekeeper, Infiltrator, Supply, Fuse, Entropy, Recon, Deadbolt, Razor, Vector, Passkey, Warden, Blacklist, Specter, Wallet, Tenant, Weights, Exploit, Mirage, Egress, Passkey, Deadbolt, Phantom, Chaos, Vault, Infiltrator, Syringe, Harbor, Tripwire, Sentinel, Entropy, Specter, Pedant, Razor, Supply, Gatekeeper, Prompt, Fuse, Cipher, Lockdown, Blacklist, Vector, Sanitizer, Provenance, Recon, Gateway, Warden, Siege, Compliance, Trace, Weights, Egress, Mirage, Tenant, Wallet, Exploit, Warden, Infiltrator, Sanitizer, Sentinel, Cipher, Passkey, Gateway, Harbor, Prompt, Lockdown, Vector, Provenance, Deadbolt, Siege, Trace, Recon, Vault, Razor, Phantom, Syringe, Entropy, Tripwire, Pedant, Chaos, Compliance, Blacklist, Gatekeeper, Specter, Fuse, Supply, Tenant, Wallet, Mirage, Weights, Exploit, Egress, Siege, Deadbolt, Phantom, Cipher, Trace, Sanitizer, Compliance, Vector, Blacklist, Gatekeeper, Recon, Syringe, Infiltrator, Passkey, Razor, Pedant, Prompt, Lockdown, Entropy, Provenance, Gateway, Warden, Specter, Fuse, Vault, Chaos, Tripwire, Harbor, Supply, Sentinel, Weights, Tenant, Wallet, Mirage, Exploit, Egress, Fuse, Tripwire, Specter, Gatekeeper, Cipher, Vault, Pedant, Sanitizer, Harbor, Prompt, Passkey, Sentinel, Chaos, Deadbolt, Phantom, Compliance, Lockdown, Provenance, Blacklist, Infiltrator, Siege, Warden, Supply, Recon, Gateway, Vector, Trace, Entropy, Syringe, Razor, Mirage, Tenant, Wallet, Weights, Egress, Exploit, Siege, Provenance, Sentinel, Harbor, Pedant, Entropy, Passkey, Phantom, Sanitizer, Specter, Razor, Gateway, Tripwire, Warden, Blacklist, Vault, Supply, Infiltrator, Gatekeeper, Trace, Deadbolt, Recon, Chaos, Compliance, Fuse, Syringe, Lockdown, Cipher, Vector, Prompt, Mirage, Tenant, Wallet, Exploit, Egress, Weights, Prompt, Entropy, Supply, Provenance, Gateway, Specter, Passkey, Lockdown, Cipher, Siege, Trace, Chaos, Compliance, Phantom, Vector, Gatekeeper, Razor, Vault, Tripwire, Infiltrator, Sentinel, Harbor, Deadbolt, Sanitizer, Warden, Pedant, Recon, Syringe, Blacklist, Fuse, Mirage, Tenant, Wallet, Exploit, Weights, Egress, Phantom, Infiltrator, Sanitizer, Sentinel, Supply, Harbor, Warden, Fuse, Tripwire, Siege, Pedant, Gateway, Trace, Provenance, Chaos, Entropy, Specter, Compliance, Passkey, Deadbolt, Blacklist, Cipher, Prompt, Razor, Vector, Gatekeeper, Lockdown, Recon, Vault, Syringe, Wallet, Weights, Tenant, Mirage, Exploit, Egress, Prompt, Trace, Warden, Vector, Tripwire, Infiltrator, Recon, Provenance, Lockdown, Compliance, Specter, Sentinel, Chaos, Gateway, Gatekeeper, Pedant, Sanitizer, Fuse, Phantom, Razor, Vault, Passkey, Siege, Harbor, Blacklist, Deadbolt, Entropy, Supply, Syringe, Cipher, Weights, Wallet, Mirage, Exploit, Egress, Tenant Total findings: 1701 Severity breakdown: 85 critical, 427 high, 882 medium, 290 low, 17 info