Centrifugo: SSRF via unverified JWT claims interpolated into dynamic JWKS endpoint URL
Description
Centrifugo is an open-source scalable real-time messaging server. Prior to 6.7.0, Centrifugo is vulnerable to Server-Side Request Forgery (SSRF) when configured with a dynamic JWKS endpoint URL using template variables (e.g. {{tenant}}). An unauthenticated attacker can craft a JWT with a malicious iss or aud claim value that gets interpolated into the JWKS fetch URL before the token signature is verified, causing Centrifugo to make an outbound HTTP request to an attacker-controlled destination. This vulnerability is fixed in 6.7.0.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Centrifugo before 6.7.0 is vulnerable to SSRF via unverified JWT claims that are interpolated into a dynamic JWKS endpoint URL before signature verification.
Vulnerability
Overview
CVE-2026-32301 is a Server-Side Request Forgery (SSRF) vulnerability in Centrifugo, an open-source real-time messaging server, affecting versions prior to 6.7.0. The flaw occurs when Centrifugo is configured with a dynamic JWKS endpoint URL that uses template variables (e.g., {{tenant}}). An unauthenticated attacker can craft a JWT with a malicious iss or aud claim value that gets interpolated into the JWKS fetch URL before the token signature is verified, causing Centrifugo to make an outbound HTTP request to an attacker-controlled destination [1][2].
Root
Cause and Exploitation
The root cause lies in the order of operations in the token verification process. In internal/jwtverify/token_verifier_jwt.go, the functions VerifyConnectToken and VerifySubscribeToken parse the token without verification using jwt.ParseNoVerify, decode the claims, and then call validateClaims() which extracts named regex capture groups from issuer_regex/audience_regex into a tokenVars map using attacker-controlled iss/aud claim values. This tokenVars map is then passed to verifySignatureByJWK, which in internal/jwks/manager.go interpolates the variables directly into the JWKS URL via m.url.ExecuteString(tokenVars). Centrifugo then makes an HTTP GET request to the attacker-controlled URL. Signature verification occurs only after the SSRF has already been triggered [2].
Impact
An unauthenticated attacker can exploit this vulnerability to force the Centrifugo server to make arbitrary outbound HTTP requests to destinations of their controlled destination. This can be used to probe internal network services, access cloud metadata endpoints (e.g., AWS/ GCP metadata endpoints), or interact with other internal systems, potentially leading to further compromise. The attack requires no authentication and can be executed remotely [1][2].
Mitigation
The vulnerability is fixed in Centrifugo version 6.7.0. Users are strongly advised to upgrade immediately. As a workaround, administrators should avoid using dynamic JWKS endpoint URLs with template variables derived from unverified JWT claims until the upgrade can be applied [1][2].
AI Insight generated on May 18, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/centrifugal/centrifugo/v6Go | < 6.7.0 | 6.7.0 |
github.com/centrifugal/centrifugoGo | <= 2.4.0 | — |
github.com/centrifugal/centrifugo/v3Go | <= 3.2.3 | — |
github.com/centrifugal/centrifugo/v4Go | <= 4.1.5 | — |
github.com/centrifugal/centrifugo/v5Go | <= 5.4.9 | — |
Affected products
2- Range: <6.7.0
- centrifugal/centrifugov5Range: < 6.7.0
Patches
0No patches discovered yet.
Vulnerability mechanics
AI mechanics synthesis has not run for this CVE yet.
References
4- github.com/advisories/GHSA-j77h-rr39-c552ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2026-32301ghsaADVISORY
- github.com/centrifugal/centrifugo/security/advisories/GHSA-j77h-rr39-c552ghsax_refsource_CONFIRMWEB
- pkg.go.dev/vuln/GO-2026-4702ghsaWEB
News mentions
0No linked articles in our index yet.