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