Skip to main content

node-opcua-client EUVDEUVD-2026-80867

| CVE-2026-69200 LOW
Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution) (CWE-1321)
2026-09-16 GitHub_M
3.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Attacker controls or compromises OPC UA server
  2. Delivery
    Craft event with __proto__.pollutedKey field name
  3. Exploit
    Client passes fields to fieldsToJson
  4. Execution
    Unsanitized assignment pollutes Object.prototype
  5. Impact
    Denial 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

node-opcua < 2.145.0

Affected Packages

euvd node_opcua fix: 2.145.0

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

Vendor (GitHub_M) PRIMARY 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 4.8 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

1
Patch available
Sep 16, 2026 - 17:04 EUVD

DescriptionCVE.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

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Medium
leading Node.js OPC UA library, common in industrial/IoT integrations but domain-specific
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

18
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +18
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy