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·47 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

•2 days ago•CVE-2026-9354
6.9

CVE-2026-9354: Arbitrary Mass Mention Bypass in NousResearch hermes-agent Slack and Mattermost Adapters

A vulnerability in the Slack and Mattermost platform adapters for NousResearch hermes-agent permits an unauthenticated remote attacker to execute arbitrary mass mentions. By leveraging prompt injection, an attacker can bypass output sanitization logic and trigger workspace-wide notification exhaustion.

Alon Barad
Alon Barad
23 views•6 min read
•2 days ago•CVE-2026-9306
6.3

CVE-2026-9306: Unauthenticated Insecure Direct Object Reference (IDOR) in QuantumNous new-api Midjourney Relay

CVE-2026-9306 is a critical unauthenticated Insecure Direct Object Reference (IDOR) vulnerability located in the QuantumNous new-api application, affecting versions up to and including 0.12.1. The flaw is caused by improper middleware ordering combined with a lack of object-level authorization checks. This allows remote, unauthenticated attackers to retrieve sensitive Midjourney images belonging to other users by supplying a valid task identifier.

Amit Schendel
Amit Schendel
8 views•5 min read
•3 days ago•GHSA-GGXF-37HM-9WQF
6.5

GHSA-GGXF-37HM-9WQF: Session Leakage via Unsafe Challenge Path Parsing in instagrapi

The instagrapi library prior to version 2.6.9 contains an improper input validation vulnerability within its challenge handling mechanism. Maliciously crafted server responses can manipulate the client into forwarding session cookies and credentials to an external attacker-controlled domain.

Amit Schendel
Amit Schendel
20 views•6 min read
•3 days ago•GHSA-QQQM-5547-774X
9.1

GHSA-QQQM-5547-774X: Unauthenticated Path Traversal in FileBrowser Quantum PATCH Handler

GHSA-QQQM-5547-774X is a critical path traversal vulnerability in the FileBrowser Quantum application, specifically within the Go backend package. The vulnerability resides in the HTTP handler responsible for processing bulk file modifications via the public API. Unauthenticated attackers can exploit an order-of-operations flaw in the path sanitization logic to bypass intended directory restrictions. This allows adversaries to arbitrarily read, move, and overwrite files on the underlying filesystem by supplying specially crafted HTTP PATCH requests.

Alon Barad
Alon Barad
4 views•6 min read
•3 days ago•CVE-2026-8723
5.3

CVE-2026-8723: Synchronous Denial of Service in qs npm Package via TypeError

The qs query string parsing and serialization library for Node.js is vulnerable to a synchronous Denial of Service (DoS) attack. The vulnerability manifests as a process-terminating TypeError when processing arrays with null or undefined elements under specific configuration parameters.

Amit Schendel
Amit Schendel
33 views•7 min read
•3 days ago•GHSA-7M8F-HGJQ-8GC9
7.5

GHSA-7M8F-HGJQ-8GC9: Pre-Authentication Denial of Service via Insecure Deserialization Order in aiosend

The aiosend library prior to version 3.0.6 contains a pre-authentication Denial of Service (DoS) vulnerability in its webhook handling mechanism. The software processes and deserializes incoming JSON payloads before verifying the cryptographic signature, allowing unauthenticated attackers to exhaust server CPU and memory resources by sending large, complex payloads.

Amit Schendel
Amit Schendel
3 views•6 min read