MCP Scanner
ScanLeaderboardDocsSign in
Home/supabase-community/supabase-mcp/Results
0F

supabase-mcp

supabase-community/supabase-mcp

87 files · 46 findings

Share GitHub SARIF JSON
1 critical21 high21 medium3 low
Tool Poisoning2 issues
Command Injectionclean
Path Traversalclean
SSRF7 issues
Credential Theft2 issues
Excessive Permissionsclean
Missing Auth19 issues
Supply Chain
Supply Chain12

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/biome.yml:13
uses: actions/checkout@v5
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

SSRF7

HTTP request with unvalidated URL parameter

high

Passing user-controlled variables directly to fetch, axios, or http.get without URL validation enables SSRF attacks.

packages/mcp-server-postgrest/src/server.ts:89
const response = await fetch(url, {
How to fix

Validate and sanitize all URLs before making HTTP requests. Use an allowlist of permitted domains.

Missing Auth19

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-postgrest/src/server.ts:41
headers.authorization = `Bearer ${apiKey}`;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Logging Deficiency4

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

packages/mcp-server-supabase/scripts/registry/update-version.ts:37
console.log(`Updated server.json version to ${version}`);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Credential Theft2

Hardcoded API key or token literal

critical

String literals matching known API key prefixes (sk-, ghp_, AKIA, xoxb-, etc.) or long base64-like strings may expose secrets in source code.

packages/mcp-server-supabase/src/management-api/types.ts:8372
"application/json": components["schemas"]["GetProjectAvailableRestoreVersionsResponse"];
How to fix
Tool Poisoning2

Cross-tool shadowing of system commands

high

Tool names mimicking built-in system tools (e.g., 'bash', 'shell', 'terminal') can trick the LLM into routing actions to a malicious handler.

supabase/config.toml:78
# sender_name = "Admin"
How to fix

Rename the tool to avoid colliding with system commands (bash, shell, exec, etc.).

12 issues
Rug Pullclean
Data Exfiltrationclean
Insecure Communicationclean
Excessive Data Exposureclean
Logging Deficiency4 issues
Runtime Tool Poisoningclean
Shadow MCP Serverclean

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/biome.yml:17
uses: biomejs/setup-biome@v2
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/check-management-api-types.yml:12
- uses: actions/checkout@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/check-management-api-types.yml:13
- uses: jdx/mise-action@v3
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/publish-preview.yml:19
uses: actions/checkout@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/publish-preview.yml:25
uses: jdx/mise-action@v3
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/tests.yml:14
- uses: actions/checkout@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/tests.yml:15
- uses: jdx/mise-action@v3
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/tests.yml:28
uses: actions/upload-artifact@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/tests.yml:39
- uses: actions/checkout@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/tests.yml:41
uses: actions/download-artifact@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/tests.yml:45
uses: coverallsapp/github-action@v2
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

HTTP request with unvalidated URL parameter

high

Passing user-controlled variables directly to fetch, axios, or http.get without URL validation enables SSRF attacks.

packages/mcp-server-postgrest/src/server.ts:100
'Converts SQL query to a PostgREST API request (method, path)',
How to fix

Validate and sanitize all URLs before making HTTP requests. Use an allowlist of permitted domains.

URL construction from user input

medium

Building URLs by concatenating or interpolating user input without an allowlist check enables SSRF via host manipulation.

packages/mcp-server-postgrest/src/server.ts:81
const url = new URL(`${apiUrl}${normalizedPath}`);
How to fix

Do not construct URLs from unvalidated user input. Use a URL allowlist or domain restriction.

HTTP request with unvalidated URL parameter

high

Passing user-controlled variables directly to fetch, axios, or http.get without URL validation enables SSRF attacks.

packages/mcp-server-supabase/src/content-api/graphql.ts:174
const response = await fetch(url, {
How to fix

Validate and sanitize all URLs before making HTTP requests. Use an allowlist of permitted domains.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

supabase/config.toml:64
api_url = "http://127.0.0.1"
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

supabase/config.toml:100
site_url = "http://127.0.0.1:3000"
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

supabase/config.toml:102
additional_redirect_urls = ["https://127.0.0.1:3000"]
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/management-api/index.ts:16
accessToken: string,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/management-api/index.ts:22
Authorization: `Bearer ${accessToken}`,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/management-api/index.ts:22
Authorization: `Bearer ${accessToken}`,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/management-api/index.ts:55
'Unauthorized. Please provide a valid access token to the MCP server via the --access-token flag or SUPABASE_ACCESS_TOKEN.'
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/platform/api-platform.ts:54
accessToken: string;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/platform/api-platform.ts:68
const { accessToken, apiUrl } = options;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/platform/api-platform.ts:74
accessToken
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/platform/api-platform.ts:788
accessToken,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:15
['access-token']: cliAccessToken,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:51
const accessToken = cliAccessToken ?? process.env.SUPABASE_ACCESS_TOKEN;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:51
const accessToken = cliAccessToken ?? process.env.SUPABASE_ACCESS_TOKEN;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:51
const accessToken = cliAccessToken ?? process.env.SUPABASE_ACCESS_TOKEN;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:53
if (!accessToken) {
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:55
'Please provide a personal access token (PAT) with the --access-token flag or set the SUPABASE_ACCESS_TOKEN environment variable'
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

packages/mcp-server-supabase/src/transports/stdio.ts:63
accessToken,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

supabase/config.toml:176
# [auth.hook.custom_access_token]
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

supabase/config.toml:211
# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`,
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

supabase/config.toml:217
# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead:
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Empty catch blocks swallowing errors

medium

Detected catch blocks with empty bodies. Empty catch blocks silently swallow errors, making it impossible to diagnose failures, detect attacks, or audit security-relevant events.

packages/mcp-server-supabase/src/platform/api-platform.ts:555
} catch (error) {}
How to fix

Always handle or log errors in catch blocks. At minimum, log the error for debugging and auditing purposes.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

packages/mcp-server-supabase/src/transports/stdio.ts:47
console.log(version);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

packages/mcp-server-supabase/src/util.ts:17
* console.log(result); // { key1: "value1", key2: "value2" }
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Remove hardcoded secrets from source code. Use environment variables or a secrets manager.

Dot-notation access to sensitive env vars

high

Accessing process.env properties like API_KEY, SECRET, TOKEN, or PASSWORD via dot notation may indicate credential harvesting.

packages/mcp-server-supabase/src/transports/stdio.ts:51
const accessToken = cliAccessToken ?? process.env.SUPABASE_ACCESS_TOKEN;
How to fix

Avoid accessing sensitive env vars directly. Use a configuration module that validates and restricts access.

Cross-tool shadowing of system commands

high

Tool names mimicking built-in system tools (e.g., 'bash', 'shell', 'terminal') can trick the LLM into routing actions to a malicious handler.

supabase/config.toml:147
# sender_name = "Admin"
How to fix

Rename the tool to avoid colliding with system commands (bash, shell, exec, etc.).