Reference
Security rules
Every finding links back to one of these rules. Your AI tools can fetch the same list with the list_rules MCP tool.
Source code (41)#
Checked in every local and GitHub scan.
- criticalServer secret referenced in a client component
A server-only environment variable is read in a file that ships to the browser, so the value is bundled into client JavaScript.
antipattern/server-secret-in-clientCWE-200
- criticalShell command built from untrusted input
exec()/execSync() runs a string through a shell, so interpolated values can run arbitrary commands.
injection/commandOWASP A03:2021 · CWE-78
- criticalShell command built from untrusted input (Python)
subprocess with shell=True (or os.system) runs an interpolated string through a shell.
injection/command-pythonOWASP A03:2021 · CWE-78
- criticalSQL built with Python string formatting
execute() receives an f-string or %-formatted query instead of parameters.
injection/sql-python-formatOWASP A03:2021 · CWE-89
- criticalSQL built from a template literal
A query is assembled by interpolating values into SQL text, so any tainted value can change the query.
injection/sql-string-buildingOWASP A03:2021 · CWE-89
- criticalHardcoded Anthropic API key
Detects a Anthropic API key committed in source. Anyone with repository access can use it.
secrets/anthropic-keyCWE-798
- criticalHardcoded AWS access key ID
Detects a AWS access key ID committed in source. Anyone with repository access can use it.
secrets/aws-access-keyCWE-798
- criticalHardcoded AWS secret access key
Detects a AWS secret access key committed in source. Anyone with repository access can use it.
secrets/aws-secret-keyCWE-798
- criticalHardcoded Database URL with embedded password
Detects a Database URL with embedded password committed in source. Anyone with repository access can use it.
secrets/database-url-passwordCWE-798
- criticalHardcoded GitHub fine-grained token
Detects a GitHub fine-grained token committed in source. Anyone with repository access can use it.
secrets/github-fine-grained-patCWE-798
- criticalHardcoded GitHub token
Detects a GitHub token committed in source. Anyone with repository access can use it.
secrets/github-tokenCWE-798
- criticalHardcoded OpenAI API key
Detects a OpenAI API key committed in source. Anyone with repository access can use it.
secrets/openai-keyCWE-798
- criticalHardcoded OpenAI API key
Detects a OpenAI API key committed in source. Anyone with repository access can use it.
secrets/openai-project-keyCWE-798
- criticalHardcoded Private key
Detects a Private key committed in source. Anyone with repository access can use it.
secrets/private-keyCWE-798
- criticalSecret exposed through a browser-visible variable
A secret-looking value uses a NEXT_PUBLIC_/VITE_ style prefix, so the bundler ships it to every visitor.
secrets/public-env-secretCWE-200
- criticalHardcoded Stripe secret key
Detects a Stripe secret key committed in source. Anyone with repository access can use it.
secrets/stripe-secret-keyCWE-798
- criticalHardcoded Supabase service_role key
Detects a Supabase service_role key committed in source. Anyone with repository access can use it.
secrets/supabase-service-roleCWE-798
- highBroken Object Level Authorization
A database read filters by a client-controlled id instead of the authenticated user, so one user can read another user's rows.
antipattern/bolaOWASP API1:2023
- highUse of eval()
eval() executes whatever string it is given, turning any tainted value into code execution.
antipattern/evalCWE-95
- highJWT verification weakened
The JWT check accepts unsigned or expired tokens.
antipattern/jwt-weak-verificationOWASP A07:2021 · CWE-347
- highMutating API route without authentication
A POST/PUT/PATCH/DELETE route handler with no authentication check anywhere in the file.
antipattern/missing-auth-mutating-routeOWASP API2:2023 · API5:2023
- highDynamic code via new Function()
new Function() compiles a string into code, with the same risk as eval().
antipattern/new-functionCWE-95
- highPlaintext password comparison
Passwords appear to be stored or compared in plain text.
antipattern/password-plain-compareOWASP A02:2021 · CWE-256
- highTLS certificate verification disabled
Certificate validation is turned off, so any network attacker can impersonate the server (MITM).
antipattern/tls-verification-disabledCWE-295
- highPostgREST filter built from user input
A Supabase .or()/.filter() string is built from input, which can widen the filter to other rows.
injection/postgrest-filterOWASP A03:2021 · CWE-89
- highHardcoded credential
A high-entropy value is assigned to a name like key/token/secret/password, which looks like a live credential.
secrets/generic-credentialCWE-798
- highHardcoded Google API key
Detects a Google API key committed in source. Anyone with repository access can use it.
secrets/google-api-keyCWE-798
- highHardcoded npm access token
Detects a npm access token committed in source. Anyone with repository access can use it.
secrets/npm-tokenCWE-798
- highHardcoded Resend API key
Detects a Resend API key committed in source. Anyone with repository access can use it.
secrets/resend-keyCWE-798
- highHardcoded SendGrid API key
Detects a SendGrid API key committed in source. Anyone with repository access can use it.
secrets/sendgrid-keyCWE-798
- highHardcoded Slack token
Detects a Slack token committed in source. Anyone with repository access can use it.
secrets/slack-tokenCWE-798
- highHardcoded Stripe webhook secret
Detects a Stripe webhook secret committed in source. Anyone with repository access can use it.
secrets/stripe-webhook-secretCWE-798
- highHardcoded Twilio API key
Detects a Twilio API key committed in source. Anyone with repository access can use it.
secrets/twilio-keyCWE-798
- mediumPermissive CORS policy
The API accepts cross-origin requests from any website.
antipattern/cors-wildcard-credentialsOWASP A05:2021 · CWE-942
- mediumUnsanitized HTML rendered with dangerouslySetInnerHTML
React renders the HTML verbatim, so any user-supplied markup becomes script in the page.
antipattern/dangerously-set-inner-htmlOWASP A03:2021 · CWE-79
- mediumDebug mode enabled
Debug mode exposes stack traces and, for Flask/Werkzeug, an interactive console.
antipattern/debug-enabledOWASP A05:2021
- mediumDynamic innerHTML assignment
Assigning untrusted values to innerHTML/outerHTML is a DOM XSS sink.
antipattern/inner-htmlCWE-79
- mediumMath.random() used for a security value
Math.random() is predictable and must not generate tokens, codes or passwords.
antipattern/insecure-randomnessCWE-338
- mediumHardcoded Slack webhook URL
Detects a Slack webhook URL committed in source. Anyone with repository access can use it.
secrets/slack-webhookCWE-798
- lowAuth token stored in localStorage
Tokens in localStorage are readable by any script on the page, so a single XSS steals the session.
antipattern/token-in-localstorageCWE-922
- lowWeak hash algorithm
MD5/SHA-1 are broken for security use (passwords, signatures, integrity).
antipattern/weak-hashCWE-328
Supabase migrations (5)#
Checked when a scan finds SQL migration files.
- criticalRow Level Security disabled
A migration turns RLS off again on an exposed table.
rls/disabledOWASP API1:2023 · CWE-284
- criticalTable created without Row Level Security
A table in an API-exposed schema is never given `enable row level security` in any migration.
rls/table-without-rlsOWASP API1:2023 · CWE-284
- highPolicy allows every row
A policy uses `using (true)`, so RLS doesn't restrict the rows the API role can reach.
rls/permissive-policyOWASP API1:2023 · CWE-284
- highPolicy trusts user_metadata
user_metadata is user-editable, so a policy that reads it can be bypassed by the user.
rls/user-metadataCWE-807
- mediumSECURITY DEFINER function without a fixed search_path
The function runs as its owner and resolves names through the caller's search_path, which can be hijacked.
rls/security-definer-search-pathCWE-426
Live databases (18)#
Checked by Database audits.
- criticalMongoDB accepts connections without authentication
An unauthenticated client can list databases, so anyone who reaches the port can read or wipe them.
db/mongo-no-authOWASP A07:2021 · CWE-306
- criticalMySQL account without a password
An account can authenticate with no password.
db/mysql-empty-passwordOWASP A07:2021 · CWE-521
- criticalSuperuser can log in from any host
root/admin accepts connections from any address.
db/mysql-remote-rootCWE-250
- criticalTable exposed without Row Level Security
A live table in an exposed schema has RLS off; severity depends on what the anon/authenticated roles are granted.
db/rls-disabledOWASP API1:2023 · CWE-284
- highConnection user has administrative roles
The app or audit user holds root/dbOwner-style roles instead of readWrite on its own database.
db/mongo-overprivileged-userOWASP A01:2021 · CWE-250
- highNon-admin account holds server-level privileges
FILE/SUPER/SHUTDOWN/PROCESS on *.* turns one SQL injection into server compromise.
db/mysql-dangerous-privilegeOWASP A01:2021 · CWE-250
- highPolicy allows every row
A live policy uses `true` for its USING/WITH CHECK expression.
db/rls-permissive-policyOWASP API1:2023 · CWE-284
- highRLS policy trusts user_metadata
A live policy reads user-editable JWT metadata to decide access.
db/rls-user-metadataCWE-807
- highView bypasses Row Level Security
A view runs with its owner's rights, so readers see rows their own policies would hide.
db/security-definer-viewCWE-284
- mediumServer accepts unencrypted connections
require_secure_transport is OFF, so clients can send credentials in clear text.
db/mysql-insecure-transportOWASP A02:2021 · CWE-319
- mediumLOAD DATA LOCAL is enabled
local_infile lets a malicious server read files from connecting clients.
db/mysql-local-infileCWE-73
- mediumSECURITY DEFINER function without a fixed search_path
A live function runs as its owner without `set search_path = ''`.
db/security-definer-search-pathCWE-426
- lowCollection without schema validation
Without a $jsonSchema validator, injected operator objects and wrong types can be stored.
db/mongo-no-validatorOWASP A03:2021 · CWE-20
- lowTable without a primary key
Updates and deletes can hit unintended duplicate rows, and replication needs a key.
db/mysql-no-primary-key
- lowAccount accepts connections from any host
A wildcard host widens the blast radius of a leaked password.
db/mysql-wildcard-hostCWE-1188
- lowauth function re-evaluated per row
auth.uid()/auth.jwt() called directly in a policy runs once per row; wrapping it in a sub-select makes it an init-plan.
db/rls-initplan
- lowForeign key without an index
Joins and cascading deletes scan the whole table, which is also a cheap denial-of-service lever.
db/unindexed-foreign-key
- infoRLS enabled with no policies
RLS denies everything until a policy allows it, which is safe but usually means the feature is broken.
db/rls-no-policies