Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L
Network-reachable client protocol (AV:N), trivial crafted path (AC:L), needs an authenticated writer (PR:L), no UI; prototype pollution leaves the record subsystem and taints the permission valve, so S:C with high C/I and low A.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
deepstream is a server that allows clients and backend services to sync data, send messages and make rpcs at scale. Versions prior to 10.0.5 are vulnerable to Prototype Pollution. Exploitation can lead to potential privilege escalation from any authenticated user with write permission to any record. This issue has been fixed in version 10.0.5.
AnalysisAI
Prototype pollution in deepstream.io versions prior to 10.0.5 allows an authenticated client with write permission to any record to corrupt the Node.js Object prototype by submitting record-update messages whose path contains tokens such as __proto__, constructor, or prototype. Because deepstream's permission valve and record-transition pipeline both invoke setValue with the attacker-controlled path, polluting the prototype can taint subsequent permission and transition logic and lead to privilege escalation across all connected clients. No public exploit identified at time of analysis, though the upstream commit (54b8e29) and patch tests publicly demonstrate the exact vulnerable path semantics.
Technical ContextAI
deepstream.io is a Node.js/TypeScript realtime server that synchronises JSON 'records' between clients and backend services, applying per-path updates via an internal JSON-pointer utility (src/utils/json-path.ts) whose setValue function walks an object by string-tokenised keys. The root cause is CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes): the pre-10.0.5 tokenizer accepted segments like __proto__, constructor, and prototype, so a record update at message.path = '__proto__.polluted' caused setValue(record, path, value) to write through Object.prototype rather than into the record. The same unsafe setValue is reached from two paths in the patch diff - RecordTransition (handlers/record/record-transition.ts), which now pre-validates paths with isValidPath, and the permission valve RuleApplication (services/permission/valve/rule-application.ts), which now wraps setValue in try/catch - confirming both the record-write surface and the permission-evaluation surface processed attacker paths. CPE cpe:2.3:a:deepstreamio:deepstream.io:*:*:*:*:*:*:*:* identifies the affected package on npm/GitHub.
RemediationAI
Vendor-released patch: deepstream.io 10.0.5 - upgrade the server package to 10.0.5 or later per GHSA-9v98-6g37-x9g6 (https://github.com/deepstreamIO/deepstream.io/security/advisories/GHSA-9v98-6g37-x9g6) and commit 54b8e2958a98df444b5b5d9a66e22872afd84e44, which introduces isValidPath rejecting __proto__/constructor/prototype tokens and wraps the permission-valve setValue in try/catch. If immediate upgrade is not possible, tighten Valve permission rules so that no client identity (especially anonymous/guest) holds write permission on any record, since exploitation requires write on at least one record; review and revoke broad 'write: true' rules. As a stopgap at the edge, inspect incoming record messages and drop any whose path contains the substrings '__proto__', 'constructor', or 'prototype' (matches the FORBIDDEN_KEYS set added in the fix) - note this can break legitimate keys that happen to contain those substrings if you do partial matching, so prefer segment-level checks. Restart the Node.js process after applying any mitigation to clear any prototype pollution that may already be present in memory.
More in Prototype Pollution
View allPrototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu
Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau
Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service
A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi
A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function
All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s
This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr
Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser
alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde
A vulnerability exists in the 'dagre-d3-es' Node.js package version 7.0.9, specifically within the 'bk' module's addConf
A Prototype Pollution vulnerability in the util-deps.addFileDepend function of magix-combine-ex versions thru 1.2.10 all
Chartist 1.x through 1.3.0 allows Prototype Pollution via the extend function. Rated critical severity (CVSS 9.8), this
Same technique Privilege Escalation
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37943
GHSA-9v98-6g37-x9g6