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-27610

Key Swap: How Parse Dashboard Handed Admin Keys to Guests via Cache Collision

Alon Barad
Alon Barad
Software Engineer

Feb 25, 2026·6 min read·57 visits

Executive Summary (TL;DR)

If you use dynamic master keys (functions) in Parse Dashboard, your cache is confused. If an admin logs in, the 'God Mode' key is cached. If a read-only user logs in immediately after, they get served that same God Mode key from the cache. Patch to 9.0.0-alpha.8 immediately.

A critical race condition and cache collision vulnerability exists in Parse Dashboard versions 7.3.0-alpha.42 through 9.0.0-alpha.7. The flaw lies within the configuration caching mechanism for dynamic master keys. When an application configures its `masterKey` as a function (for rotation or retrieval purposes), the dashboard caches the result. However, the cache key failed to differentiate between a full administrative session and a read-only session. This allows a read-only user to inherit the cached full master key if an administrator has recently accessed the dashboard, leading to immediate privilege escalation and potential data destruction.

The Hook: Who Guards the Guards?

Parse Server is the spiritual successor to the mobile backend-as-a-service throne, and Parse Dashboard is its cockpit. It allows developers to manage users, view analytics, and manipulate database entries with a nice GUI. To do this, the dashboard needs the Master Key—a cryptographic string that bypasses all Access Control Lists (ACLs) and Class Level Permissions (CLPs). It is the "sudo" of the Parse ecosystem.

Usually, this key is a static string in a config file. But enterprise environments are complex; they need key rotation, dynamic retrieval from vaults, or environment-specific logic. So, Parse Dashboard allows the masterKey to be defined as a function rather than a string. This function runs, fetches the key, and returns it.

Here is the problem: Running a function every single time a request hits the dashboard is expensive. Latency kills the user experience. So, naturally, the developers decided to cache the result. And therein lies the tragedy. They cached the result of the permission check, but they forgot to include the context of who asked for it.

The Flaw: A Tale of One Cache Key

The vulnerability is a classic case of CWE-1289: Improper Validation of Unsafe Equivalence. In computer science, naming things is one of the two hardest problems (alongside cache invalidation and off-by-one errors). In this case, the developers failed at both naming and cache validation.

When the dashboard initializes a session for a specific App ID, it checks if the masterKey is a function. If it is, it calls ConfigKeyCache.get. The fatal flaw was hardcoding the identifier for this cache entry to the string literal 'masterKey'.

This means the cache looked like this: "my-app-id" + "masterKey" = "ACTUAL_SECRET_KEY"

The code did not care if the person requesting the key was the CTO with full write access or an intern with a read-only account. It simply asked: "Do I have a cached value for 'masterKey'? Yes? Here you go."

If an Admin logs in, the masterKey function resolves to the Full Access Key, and it gets cached. If a Read-Only user logs in five seconds later, the system sees the valid cache entry and hands them the Full Access Key. Suddenly, the intern is the CTO.

The Code: The Smoking Gun

Let's look at the diff. It’s painful in its simplicity. The vulnerable code blindly trusted that if a key was cached, it was the right key for the current user.

Vulnerable Code (Before):

// Inside app.js logic
if (typeof app.masterKey === 'function') {
  // The second argument 'masterKey' is the cache identifier
  app.masterKey = await ConfigKeyCache.get(
    app.appId, 
    'masterKey', // <--- THE BUG. Static string.
    app.masterKeyTtl, 
    app.masterKey
  );
}

When the patch landed in 9.0.0-alpha.8, the fix was to split the cache universe into two parallel dimensions: one for the gods (admins) and one for the mortals (read-only users).

Fixed Code (After):

// The fix introduces context awareness
const cacheKey = matchingAccess.readOnly ? 'readOnlyMasterKey' : 'masterKey';
 
if (typeof app.masterKey === 'function') {
  app.masterKey = await ConfigKeyCache.get(
    app.appId, 
    cacheKey, // <--- Dynamic string based on privilege
    app.masterKeyTtl, 
    app.masterKey
  );
}

By simply checking matchingAccess.readOnly and changing the cache key string, the collision is impossible. The Admin gets a value from the masterKey slot, and the Read-Only user gets a value from the readOnlyMasterKey slot.

The Exploit: Waiting for the Admin

This is a Passive-Aggressive Exploit. You don't hammer the server with buffer overflows; you just wait. The attack vector requires a Read-Only account, which is common in larger organizations (e.g., support staff, auditors, or junior devs).

Here is the attack chain:

  1. Reconnaissance: The attacker identifies that the target Parse Dashboard is likely using dynamic key configuration (often hinted at by custom login flows or specific enterprise deployment signatures).
  2. The Trap: The attacker scripts a loop that attempts to access a protected endpoint, or simply reloads the dashboard, immediately after business hours begin (9:00 AM).
  3. The Trigger: A legitimate Administrator logs in to check analytics. The server runs the masterKey function, resolves the Full Key, and caches it under appId:masterKey for the duration of the TTL (Time-To-Live).
  4. The Snatch: Milliseconds later, the attacker's script sends a request. The server checks the cache. "Oh, I have the key right here!" It loads the Full Key into the attacker's session context.
  5. The Payload: The attacker now has a session initialized with the Master Key. They can target the /apps/:appId/agent endpoint or use the dashboard's API to delete classes, drop database tables, or exfiltrate the entire _User table.

The Impact: Why Panic?

This isn't just an information leak; it is a total compromise of the application's integrity. In the Parse ecosystem, the Master Key is absolute. It ignores all security rules.

  • Data Exfiltration: An attacker can dump the entire database, including sensitive user PII, hashed passwords, and proprietary business data.
  • Data Destruction: The attacker can send a DELETE request to the _Schema endpoint, wiping out entire collections.
  • RCE Potential: If the Parse Server has Cloud Code enabled (which is standard), the attacker might be able to modify triggers or jobs if the dashboard exposes those controls, potentially leading to Remote Code Execution on the server logic.
  • AI Agent Abuse: The CVE specifically highlights the AI Agent endpoint. An attacker could instruct the AI to "Delete all users who haven't logged in today," and the AI, holding the cached Master Key, would dutifully obey.

The Fix: Split the Cache

The remediation is straightforward but urgent. You must upgrade to parse-community/parse-dashboard@9.0.0-alpha.8 or later.

If you are stuck on an older version and cannot upgrade (perhaps due to breaking changes in the alpha branch), you have two mitigation options:

  1. Stop using Functions: Change your masterKey configuration in parse-dashboard-config.json to a static string. If it's a string, the caching logic is bypassed entirely.
  2. Disable the Agent: If the AI Agent is the primary worry, remove the agent object from your configuration. However, this does not fix the underlying privilege escalation, it just removes one convenient gun from the attacker's hand.

The official patch not only fixes the cache key name but also hardcodes permissions for read-only users in the Agent endpoint to prevent them from authorizing write actions, adding a defense-in-depth layer.

Official Patches

Parse CommunityOfficial Release 9.0.0-alpha.8

Fix Analysis (1)

Technical Appendix

CVSS Score
7.0/ 10
CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
EPSS Probability
0.08%
Top 77% most exploited

Affected Systems

Parse Dashboard 7.3.0-alpha.42 through 9.0.0-alpha.7

Affected Versions Detail

Product
Affected Versions
Fixed Version
parse-dashboard
parse-community
>= 7.3.0-alpha.42 < 9.0.0-alpha.89.0.0-alpha.8
AttributeDetail
CWE IDCWE-1289 (Improper Validation of Unsafe Equivalence)
CVSS v4.07.0 (High)
Attack VectorNetwork (Remote)
Attack ComplexityHigh (Requires timing/race condition)
Privileges RequiredLow (Read-only account)
Exploit MaturityPoC / Functional

MITRE ATT&CK Mapping

T1550.002Use Alternate Authentication Material: Pass the Hash
Defense Evasion
T1068Exploitation for Privilege Escalation
Privilege Escalation
T1557Adversary-in-the-Middle
Credential Access
CWE-1289
Improper Validation of Unsafe Equivalence

The software compares two items to determine if they are equivalent, but the comparison is performed in a way that allows unsafe items to be treated as equivalent to safe items.

Known Exploits & Detection

GitHubIntegration tests demonstrating the vulnerability logic and fix.

Vulnerability Timeline

Fix committed to GitHub
2026-02-19
GHSA Advisory Published
2026-02-25
Patch v9.0.0-alpha.8 Released
2026-02-25

References & Sources

  • [1]GitHub Advisory GHSA-jhp4-jvq3-w5xr
  • [2]NVD Entry for CVE-2026-27610

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

•about 14 hours ago•CVE-2026-14669
8.8

CVE-2026-14669: PostgreSQL to_char() Timezone Abbreviation Heap-Based Buffer Overflow

CVE-2026-14669 is a critical heap-based buffer overflow vulnerability in PostgreSQL's date/time formatting function to_char(timestamptz). The flaw arises from unsafe copying of user-controlled timezone abbreviations into a fixed-size internal buffer. An authenticated database user can trigger this issue by setting a long POSIX timezone abbreviation containing custom formatting, allowing them to overwrite adjacent heap structures and hijack execution control to achieve remote code execution (RCE) with the privileges of the 'postgres' operating system user.

Alon Barad
Alon Barad
10 views•6 min read
•2 days ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
11 views•6 min read
•2 days ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
9 views•8 min read
•2 days ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•2 days ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
16 views•5 min read
•2 days ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
8 views•7 min read