Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker controls or compromises OPC UA server
-
DeliveryCraft event with __proto__.pollutedKey field name
-
ExploitClient passes fields to fieldsToJson
-
ExecutionUnsanitized assignment pollutes Object.prototype
-
ImpactDenial of service or application logic corruption
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V3 - Web Frontend Security Prototype pollution prevention
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the host application built on node-opcua-client (< 2.145.0) to pass attacker-controlled OPC UA event/condition field names into the internal fieldsToJson method in packages/node-opcua-client/source/alarms_and_conditions/client_alarm.ts, where a field named to include a __proto__ path is assigned without sanitization. The limiting factors are significant: the attacker must control the OPC UA event source (a malicious or compromised server, or an untrusted publisher), and the application must not sanitize field names before serialization - this is not triggerable against a default configuration without that specific data flow, which is why the vendor assigns AC:H. Impact is bounded to denial of service or application logic corruption; there is no confidentiality exposure or confirmed remote code execution. |
| Impact | This is a genuinely low-priority issue despite being a real prototype-pollution flaw. The vendor CVSS of 3.7 (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L) correctly captures a narrow, hard-to-reach weakness: exploitation is not a default-path condition but depends on the host application deliberately routing attacker-controlled OPC UA event fields into the internal fieldsToJson method, which justifies AC:H. No EPSS score, KEV entry, or public POC was supplied, so all exploitation signals point to no active or automatable exploitation. The impact ceiling is low - the description limits outcomes to denial of service or application logic corruption via Object.prototype tampering, with no confidentiality impact (C:N) and no direct code execution claimed. One tension to note: the CVSS shows AV:N/PR:N (network, unauthenticated), but the description makes clear a specific application coding pattern must exist for the malicious event to reach the vulnerable sink - the 'unauthenticated network' framing overstates reachability, and in practice OPC UA event delivery typically occurs within an established session. Treat this as a defense-in-depth library patch, not an urgent response item. |
| Exploit ScenarioDerived | An OPC UA client application built on node-opcua subscribes to alarm/condition events from a server and passes the received event fields through fieldsToJson. A malicious or compromised OPC UA server sends an event containing a field named to traverse __proto__.pollutedKey, polluting Object.prototype and either crashing the client (DoS) or corrupting application logic that later reads the polluted property. No public exploit code has been identified at time of analysis, and success is gated on the application exposing attacker-controlled field names to the vulnerable method. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Prototype pollution in node-opcua-client versions prior to 2.145.0 lets an attacker who controls OPC UA event or condition field names corrupt Object.prototype through the internal fieldsToJson helper in packages/node-opcua-client/source/alarms_and_conditions/client_alarm.ts, which assigns unsanitized field names and permits a __proto__.pollutedKey assignment path. Only host applications that feed attacker-controlled event field names into that serialization helper are exposed; a malicious or compromised OPC UA server (or untrusted publisher) must supply the crafted field name AND the application must omit field-name sanitization, which is why the vendor rates attack complexity as high. There is no public exploit identified at time of analysis and no confirmed remote code execution - impact is bounded to denial of service or application logic corruption with no confidentiality exposure, making this a genuinely low-priority issue despite being a real prototype-pollution flaw. The issue is unauthenticated per the CVSS vector (PR:N) and is fixed in 2.145.0.
RemediationAI
Vendor-released patch: upgrade node-opcua / node-opcua-client to 2.145.0 or later per advisory GHSA-cv5q-7543-48q4 (https://github.com/node-opcua/node-opcua/security/advisories/GHSA-cv5q-7543-48q4); because the vulnerable code is transitive, update lockfiles and re-run dependency resolution rather than relying on a top-level version bump alone. Where the upgrade cannot be applied immediately, an effective compensating control is to sanitize or allow-list event/condition field names before they reach the alarms-and-conditions serialization path - reject or neutralize keys equal to __proto__, constructor, or prototype (and any path containing them), and build the intermediate field dictionaries with Object.create(null) or a Map so assignments cannot traverse into Object.prototype; the trade-off is that this requires the application to intercept the specific data flow and may diverge from upstream behavior on unusual field names. Trust-boundary hardening helps but does not fully compensate: enforce strict OPC UA server certificate validation and trusted-server lists so only vetted endpoints can push events, accepting that this does not protect against a legitimately trusted but compromised server. Object.freeze(Object.prototype) at process start blocks the pollution primitive outright but can break third-party libraries that legitimately extend prototypes and must be validated against the full dependency tree before deployment. Note that no vendor patch version exists beyond 2.145.0 as a workaround line, and there is no public exploit code identified, so emergency mitigations beyond the upgrade are optional rather than urgent.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
node-opcua is a pure TypeScript/Node.js implementation of the OPC UA industrial protocol, and this flaw lives in the client-side alarms-and-conditions code path. When a client subscribes to events or condition branches, the OPC UA server returns EventFieldList structures whose field names (QualifiedName text plus the requested/returned browse path components) are normally server- or publisher-supplied. The internal fieldsToJson method iterates those names and writes them directly as object keys without validating that they are safe identifiers, so a name containing a __proto__ path element causes a nested assignment such as obj['__proto__']['pollutedKey'] = value, which resolves up the prototype chain and mutates Object.prototype - the classic CWE-1321 (improperly controlled modification of object prototype attributes / prototype pollution) root cause. Because the polluted properties are inherited by every downstream object, the practical consequences are cross-cutting: unexpected truthy keys can flip application logic branches, break JSON serialization or schema validation, or induce resource exhaustion/denial of service, while integrity of application-data handling is also affected (reflected in our independent assessment raising I to Low alongside A:Low). The CPE cpe:2.3:a:node-opcua:node-opcua:*:*:*:*:*:*:*:* applies broadly across the monorepo's published packages, and EUVD records the affected range simply as node-opcua < 2.145.0, underscoring that any dependent application on an older client build carries the vulnerable code path.
Know when Node.js gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
AV:N as poisoned events arrive over the OPC UA network and AC:H because a specific app data-flow into fieldsToJson is required; I:L reflects Object.prototype logic corruption and A:L the DoS, with C:N since no data is disclosed.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
node-opcua is an OPC UA implementation for TypeScript and Node.js. Prior to node-opcua-client 2.145.0, the internal fieldsToJson method in packages/node-opcua-client/source/alarms_and_conditions/client_alarm.ts directly assigns unsanitized field names and allows a __proto__.pollutedKey path to modify Object.prototype. Successful exploitation requires an application to expose attacker-controlled event fields to fieldsToJson and may cause denial of service or application logic corruption. This vulnerability is fixed in 2.145.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-80867
NVD
CVE.org
EPSS
GitHub
Exploit-DB