MCP Scanner
ScanLeaderboardDocsSign in
Home/upstash/mcp-server/Results
33F

mcp-server

upstash/mcp-server

32 files · 15 findings

Share GitHub SARIF JSON
1 critical8 high6 medium
Tool Poisoningclean
Command Injectionclean
Path Traversalclean
SSRF3 issues
Credential Theft3 issues
Excessive Permissionsclean
Missing Auth4 issues
Supply Chain
Supply Chain3

GitHub Actions with unpinned actions

high

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

.github/workflows/release.yaml:18
uses: actions/checkout@v4
How to fix

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

SSRF3

HTTP request with unvalidated URL parameter

high

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

src/http.ts:149
const res = await fetch(url, init);
How to fix

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

Credential Theft3

Base64 encoding of sensitive data

high

Encoding environment variables or credential file contents to Base64 is a common exfiltration obfuscation technique.

src/http.ts:114
authHeader = `Basic ${Buffer.from(token).toString("base64")}`;
How to fix

Remove Base64 encoding of credentials. If encoding is needed, use a proper encryption library.

Missing Auth4

Missing OAuth scope validation

medium

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

src/http.ts:23
* Optional QStash token - if provided, will use Bearer auth instead of Basic auth
How to fix

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

Insecure Communication2

Missing HSTS headers on HTTP server

medium

An HTTP server is created without configuring Strict-Transport-Security (HSTS) headers. Without HSTS, browsers may allow downgrade attacks from HTTPS to HTTP.

src/index.ts:106
const httpServer = createServer(async (req: IncomingMessage, res: any) => {
How to fix

Add Strict-Transport-Security headers to your server responses. Use a middleware such as helmet to set HSTS automatically.

3 issues
Rug Pullclean
Data Exfiltrationclean
Insecure Communication2 issues
Excessive Data Exposureclean
Logging Deficiencyclean
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/release.yaml:24
uses: actions/setup-node@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/release.yaml:30
uses: oven-sh/setup-bun@v1
How to fix

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

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.

src/tools/qstash/utils.ts:56
url: `http://localhost:${local_mode_port}`,
How to fix

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

HTTP request with unvalidated URL parameter

high

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

src/tools/redis/command.ts:64
const req = await fetch(url, {
How to fix

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

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.

src/index.ts:82
const apiKey = cliOptions.apiKey || process.env.UPSTASH_API_KEY;
How to fix

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

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.

src/tools/qstash/utils.ts:5
"eyJVc2VySUQiOiJkZWZhdWx0VXNlciIsIlBhc3N3b3JkIjoiZGVmYXVsdFBhc3N3b3JkIn0=";
How to fix

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

Missing OAuth scope validation

medium

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

src/http.ts:31
* Optional QStash token for Bearer authentication
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.

src/http.ts:111
authHeader = `Bearer ${qstashToken}`;
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.

src/tools/redis/command.ts:69
Authorization: `Bearer ${restToken}`,
How to fix

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

Missing HSTS headers on HTTP server

medium

An HTTP server is created without configuring Strict-Transport-Security (HSTS) headers. Without HSTS, browsers may allow downgrade attacks from HTTPS to HTTP.

src/index.ts:164
httpServer.listen(port, () => {
How to fix

Add Strict-Transport-Security headers to your server responses. Use a middleware such as helmet to set HSTS automatically.