CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-27804

Trust Issues: How a JWT Header Toppled Parse Server Authentication

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 26, 2026·6 min read·53 visits

Executive Summary (TL;DR)

Parse Server trusted the JWT header to tell it which cryptographic algorithm to use for verification. Attackers can set this to "none" or "HS256" to bypass authentication, allowing them to log in as any user (including admins) simply by knowing their email or user ID. Patch immediately to version 8.6.3 or 9.3.1-alpha.4.

A critical vulnerability in Parse Server's authentication adapters allows for complete Account Takeover (ATO) via JWT algorithm confusion. By trusting the 'alg' header in user-provided tokens, attackers can bypass signature verification using the 'none' algorithm or exploit key confusion attacks to impersonate any user on the platform without credentials.

The Hook: Don't Roll Your Own Auth (Unless You Do It Wrong)

We all know the mantra: 'Don't roll your own crypto.' It's the first commandment of security engineering. Naturally, modern backend frameworks like Parse Server try to make this easy by offering plug-and-play adapters for the big guns: Google, Apple, and Facebook authentication. The idea is simple. You let the trillion-dollar companies handle the password storage and identity verification, and they hand you a cryptographically signed JSON Web Token (JWT) proving the user is who they say they are.

But here is where the tragedy begins. While Parse Server didn't try to invent a new encryption algorithm, it failed at the most fundamental step of consuming one: trusting the client. In a move that creates a massive logical hole in the authentication flow, the server didn't decide how to verify the ID token; it asked the token how it wanted to be verified.

This is the digital equivalent of a bouncer looking at an ID card drawn in crayon on a napkin, seeing a note on the back that says 'Trust me, I'm VIP,' and waving the person through. CVE-2026-27804 isn't a buffer overflow or a complex race condition; it is a design flaw in how the Adapters/Auth module handled JWT headers, turning a secure cryptographic exchange into a 'choose your own adventure' for attackers.

The Flaw: The 'alg' Header Trap

To understand this vulnerability, you have to understand the structure of a JWT. It consists of three parts: the Header, the Payload, and the Signature. The Header typically contains metadata, like the key ID (kid) and the algorithm (alg) used to sign the token. The standard behavior for a secure backend is to look at the provider (e.g., Google), look up Google's public keys, and verify the token using the algorithm we know Google uses (usually RS256).

Parse Server, however, got too helpful. In the affected versions of the Google, Apple, and Facebook adapters, the code extracted the alg property directly from the incoming token's header and passed it straight into the jsonwebtoken library's verify function.

This is a classic 'Algorithm Confusion' vulnerability. The verify function in the Node.js jsonwebtoken library is polymorphic. If you tell it the algorithm is asymmetric (like RS256), it expects the second argument to be a Public Key. If you tell it the algorithm is symmetric (like HS256), it expects the second argument to be a shared Secret. By letting the attacker control the alg parameter, Parse Server allowed the attacker to dictate how the library interpreted the keys.

The Code: The Smoking Gun

Let's look at the crime scene. The vulnerability lived primarily in src/Adapters/Auth/google.js (and similarly in Apple/Facebook adapters). Here is the code responsible for verifying a user's identity:

// VULNERABLE CODE
const { kid: keyId, alg: algorithm } = authUtils.getHeaderFromToken(token);
 
// ... logic to fetch the public key based on keyId ...
 
try {
  jwtClaims = jwt.verify(token, googleKey, {
    algorithms: algorithm, // <--- HERE IS THE BUG
    audience: clientId,
  });
} catch (e) {
  // ...
}

Notice the algorithms: algorithm line? It takes the alg value parsed directly from the attacker's string (getHeaderFromToken) and feeds it to the security check.

The fix involves removing this trust entirely. The patch hardcodes the allowed algorithm, ensuring that even if an attacker sends a header claiming alg: none, the server ignores it and enforces RSA validation:

// PATCHED CODE
try {
  jwtClaims = jwt.verify(token, signingKey, {
    algorithms: ['RS256'], // <--- HARDCODED SECURITY
    audience: clientId,
  });
} catch (e) {
  // ...
}

The Exploit: Becoming Admin

There are two ways to exploit this, ranging from 'lazy' to 'clever'.

Method 1: The 'None' Algorithm (The Lazy Way) The JWT specification historically included an algorithm called none, intended for debugging. It means 'this token is not signed.' If the library supports it and the server permits it, you can simply strip the signature off a token, change the header to {"alg": "none"}, and the server will accept the payload as truth. While many modern libraries disable none by default, passing it explicitly in the algorithms array (via the user-controlled variable) re-enables it in some configurations.

Method 2: Key Confusion (The Clever Way) This is the far more dangerous and likely vector. The server expects to verify a Google token using RS256 (RSA). To do this, it downloads Google's Public Key.

An attacker can:

  1. Create a malicious token for admin@example.com.
  2. Set the header to {"alg": "HS256"} (HMAC-SHA256).
  3. Sign the token using Google's Public Key as the HMAC shared secret.

When the Parse Server receives this, it sees alg: HS256. It passes googleKey (the public key string) to jwt.verify. The library sees 'HS256' and thinks, 'Okay, I need to verify a symmetric signature using this string as the secret.' Since the attacker signed the token using that exact same public key string as the secret, the math checks out. The server validates the signature, and you are logged in as Admin.

The Impact: Game Over

The impact here is maximum severity (Critical). This is a full authentication bypass for any deployment using third-party OAuth adapters.

  1. Account Takeover: An attacker can log in as any user if they know the user's email or ID associated with the OAuth provider.
  2. Privilege Escalation: If an administrator uses 'Login with Google', the attacker takes over the admin account.
  3. Data Exfiltration: With valid credentials, the attacker bypasses ACLs that restrict public read access. They can dump user databases, modify records, or trigger cloud code functions restricted to authenticated users.

This requires zero interaction from the victim. It is a silent, network-based attack that leaves very few traces in standard application logs other than a successful login event from an unusual IP.

The Fix: Hardcoding Reality

The remediation is straightforward but urgent. You must upgrade parse-server to version 8.6.3 or 9.3.1-alpha.4.

The fix introduces two major changes:

  1. Hardcoded Algorithms: The verify function now strictly enforces ['RS256'] (or ['ES256'] for Apple), ignoring the header provided by the client.
  2. Better Key Management: The patch replaces custom key-fetching logic with jwks-rsa, a battle-tested library designed to handle JSON Web Key Sets securely.

If you cannot patch immediately, you must disable the Google, Apple, and Facebook authentication adapters in your Parse Server configuration. There is no other configuration-based mitigation for the vulnerable code paths.

Official Patches

Parse CommunityParse Server 8.6.3 Release Notes
Parse CommunityParse Server 9.3.1-alpha.4 Release Notes

Fix Analysis (2)

Technical Appendix

CVSS Score
9.3/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Affected Systems

Parse Server (NPM package)Applications using Parse Server with Google Auth AdapterApplications using Parse Server with Apple Auth AdapterApplications using Parse Server with Facebook Auth Adapter

Affected Versions Detail

Product
Affected Versions
Fixed Version
parse-server
Parse Community
< 8.6.38.6.3
parse-server
Parse Community
>= 9.0.0, < 9.3.1-alpha.49.3.1-alpha.4
AttributeDetail
CWECWE-327 (Broken Crypto Algorithm)
CVSS v4.09.3 (Critical)
Attack VectorNetwork (API)
Privileges RequiredNone
ImpactAccount Takeover
Exploit StatusPoC Available

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1552Unsecured Credentials
Credential Access
T1078Valid Accounts
Defense Evasion
CWE-327
Use of a Broken or Risky Cryptographic Algorithm

The product uses a broken or risky cryptographic algorithm or implementation, allowing attackers to bypass security mechanisms.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory containing description of the JWT algorithm confusion attack vector.
Parse Server TestsUnit tests added in the fix demonstrate the 'alg: none' and key confusion logic.

Vulnerability Timeline

Fixes committed to Parse Server repository
2026-02-23
GHSA-4q3h-vp4r-prv2 Published
2026-02-25
CVE-2026-27804 Published
2026-02-25

References & Sources

  • [1]GHSA-4q3h-vp4r-prv2
  • [2]Understanding JWT Algorithm Confusion

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•27 minutes ago•CVE-2026-49993
5.7

CVE-2026-49993: Proprietary Source Code Exfiltration via Incomplete Same-Origin Verification in Nuxt Dev Servers

CVE-2026-49993 identifies an incomplete same-origin check validation mechanism in @nuxt/webpack-builder and @nuxt/rspack-builder dev server middleware. When the local development server is bound to a non-loopback address, cross-origin attackers can bypass verification checks by suppressing browser headers, leading to unauthorized retrieval and exfiltration of compiled source code chunks.

Amit Schendel
Amit Schendel
1 views•4 min read
•about 2 hours ago•GHSA-69QJ-PVH9-C5WG
7.5

GHSA-69QJ-PVH9-C5WG: Command Injection in yt-dlp `--exec` Option

An OS command injection vulnerability in yt-dlp before 2026.06.09 allows unauthenticated remote attackers to execute arbitrary shell commands via crafted media metadata when a user processes media using the --exec post-processing parameter with unsafe string interpolation conversions.

Alon Barad
Alon Barad
5 views•7 min read
•about 3 hours ago•GHSA-7CX2-G3H9-382P
8.1

GHSA-7CX2-G3H9-382P: Multiple Vulnerabilities in Crawl4AI Docker API (Arbitrary File Write, SSRF, CRLF Log Injection)

An in-depth technical analysis of multiple security vulnerabilities in the self-hosted Docker API server of Crawl4AI up to version 0.8.7. These flaws include a critical arbitrary file write via symlink traversal and TOCTOU weakness, CRLF log injection, webhook header injection, and SSRF filter gaps. These have been remediated in version 0.8.8.

Alon Barad
Alon Barad
3 views•6 min read
•about 3 hours ago•GHSA-F989-C77F-R2CQ
8.2

GHSA-f989-c77f-r2cq: LLM Credential Exfiltration and SSRF in Crawl4AI Docker Server

A technical evaluation of the Crawl4AI open-source web crawling and scraping library revealed a high-severity credential exfiltration vulnerability in its self-hosted Dockerized API server. The flaw arises from an unvalidated base_url parameter in request payloads and a dynamic prefix resolution mechanism that retrieves system environment variables. Unauthenticated remote attackers can leverage these features in tandem to extract host-level secrets or redirect configured LLM API keys to an external listener under their control.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 4 hours ago•GHSA-365W-HQF6-VXFG
9.8

GHSA-365w-hqf6-vxfg: Multiple Critical Vulnerabilities in Crawl4AI Docker API Server

The Crawl4AI Docker API server, in versions 0.8.6 and prior, contains multiple critical vulnerabilities including improper path sanitization, missing authentication on administration routes, hardcoded JWT secrets, and SSRF. These vulnerabilities allow remote, unauthenticated attackers to write arbitrary files, execute arbitrary code, and pivot into private cloud environments.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 7 hours ago•GHSA-534H-C3CW-V3H9
5.5

GHSA-534h-c3cw-v3h9: Local Information Disclosure via Abstract-Namespace Socket in Nuxt Dev Server

A local security vulnerability in the Nuxt development server (nuxt dev) allows local unprivileged users to access sensitive configuration files and source code. On Linux environments running Node.js 20+, Nuxt bound its internal vite-node IPC server to an abstract-namespace Unix socket without any peer authentication, enabling co-resident local users to connect and request module code directly.

Amit Schendel
Amit Schendel
5 views•5 min read