Skip to content

Clerk: SSRF in the opt-in clerkFrontendApiProxy feature may leak secret keys to unintended host

High severity GitHub Reviewed Published Mar 26, 2026 in clerk/javascript • Updated Mar 27, 2026

Package

npm @clerk/backend (npm)

Affected versions

>= 3.0.0, <= 3.2.2

Patched versions

3.2.3
npm @clerk/express (npm)
>= 2.0.0, <= 2.0.6
2.0.7
npm @clerk/fastify (npm)
>= 3.1.0, <= 3.1.4
3.1.5
npm @clerk/hono (npm)
>= 0.1.0, <= 0.1.4
0.1.5

Description

Summary

The clerkFrontendApiProxy function in @clerk/backend is vulnerable to Server-Side Request Forgery (SSRF). An unauthenticated attacker can craft a request path that causes the proxy to send the application's Clerk-Secret-Key to an attacker-controlled server.

Affected packages

Only applications that have opted into the frontendApiProxy feature are affected. This feature is not enabled by default. Users of @clerk/nextjs are not affected due to how the framework handles repeated / in request paths.

Package Affected versions Fixed version
@clerk/backend >= 3.0.0, <= 3.2.2 3.2.3
@clerk/express >= 2.0.0, <= 2.0.6 2.0.7
@clerk/hono >= 0.1.0, <= 0.1.4 0.1.5
@clerk/fastify >= 3.1.0, <= 3.1.4 3.1.5

Search your codebase for the frontendApiProxy option. If none of the patterns below appear in your code, you are not affected.

@clerk/express

app.use(clerkMiddleware({ frontendApiProxy: { enabled: true } }));

@clerk/hono

app.use('*', clerkMiddleware({ frontendApiProxy: { enabled: true } }));

@clerk/fastify

fastify.register(clerkPlugin, { frontendApiProxy: { enabled: true } });

@clerk/backend

import { clerkFrontendApiProxy } from '@clerk/backend/proxy';

A quick way to check across your entire project:

grep -r "frontendApiProxy\|clerkFrontendApiProxy" .

If there are no matches, you are not using this feature.

Recommended actions

Clerk's internal logs show no evidence of users utilizing the built-in proxy with the impacted versions. Despite that, if you are on an impacted version and use the built-in proxy we recommend upgrading and rotating your Clerk Secret Key immediately.

  1. Upgrade to the patched version of @clerk/backend (and @clerk/express, @clerk/hono, etc.)
  2. Rotate your Clerk Secret Key after upgrading - if an attacker exploited this vulnerability, they may have captured your key. Rotate it in the Clerk Dashboard under API Keys. You should deploy your application with the updated key before revoking the existing key.
  3. Audit access logs for requests to your proxy endpoint (/__clerk/ by default) containing double slashes in the path.

Credit

Discovered during an internal code audit.

References

@nikosdouvlis nikosdouvlis published to clerk/javascript Mar 26, 2026
Published to the GitHub Advisory Database Mar 27, 2026
Reviewed Mar 27, 2026
Last updated Mar 27, 2026

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
High
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

EPSS score

Weaknesses

Server-Side Request Forgery (SSRF)

The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination. Learn more on MITRE.

CVE ID

CVE-2026-34076

GHSA ID

GHSA-gjxx-92w9-8v8f

Source code

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.