Skip to main content

node-opcua CVE-2026-95860

| EUVDEUVD-2026-116210 CRITICAL
Improper Authorization (CWE-285)
2026-11-03 GitHub_M
9.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Connect anonymously over OPC UA TCP
  2. Delivery
    Browse node relying on namespace default
  3. Exploit
    Namespace default resolves null, fails open
  4. Execution
    Write protected variable or call bound method
  5. Impact
    Manipulate industrial process state

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization verification
MITRE ATT&CK

1 technique across 1 tactic: Defense Evasion

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the server operator explicitly configured a restrictive namespace-level policy via Namespace.setDefaultRolePermissions() and relied on inheritance for nodes that have no explicit per-node RolePermissions; that configured default is silently ignored on the enforcement path and fails open to allPermissions for any role including Anonymous. The target node must lack its own per-node RolePermissions (explicit per-node permissions are still enforced) and have CurrentWrite in its access level or be a bound callable Method. Limiting factors: servers that declared no access-control policy at all are only the documented permissive default (not this bypass); nodes with explicit per-node permissions and namespaces whose metadata was correctly bound via setNamespaceMetaData() are not affected; and on NodeSet2-loaded namespaces setNamespaceMetaData() throws, so activating a working namespace default there is not possible at all. The only complete fix stated by the vendor is upgrading to 2.180.0.

Impact

Signals mostly align on high priority but with an important real-world caveat. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N, C:H/I:H) and 9.1 score describe a remote, unauthenticated authorization fail-open, and the vuln.today Decision label is act_now, so this should be treated as urgent rather than deferred. However, EPSS is not provided in the input and there is no CISA KEV entry or active-exploitation claim, so widespread opportunistic exploitation is not evidenced; the only exploitation artifact is the proof-of-concept code published inside the GHSA advisory. The critical nuance the raw CVSS hides is configuration-dependence: per the advisory this 9.1 bypass applies to case 2 only - a server where an operator actually called setDefaultRolePermissions() with a restrictive policy and relied on namespace inheritance. Servers that declared no access-control policy are the documented permissive default (not a bypass), and nodes with explicit per-node RolePermissions or correctly bound programmatic metadata are outside the affected case. So PR:N is accurate for the attacker (anonymous), but the exposure is gated by a specific vendor-side configuration pattern, which narrows the real-world population below what a bare 9.1 implies. Net: a genuine high-priority fix for OPC UA servers that configured namespace-level RBAC, not a universally exploitable flaw against every node-opcua deployment.

Exploit ScenarioDerived

An operator running node-opcua 2.42.0-2.179.x locks down a namespace with setDefaultRolePermissions([Operator]) and relies on inheritance for nodes that carry no per-node RolePermissions. Because the configured policy is written to a private field that the runtime enforcement path never reads, the namespace default resolves to null and fails open, so an anonymous network client can write CurrentWrite variables and call bound methods that should have returned Bad_UserAccessDenied. The advisory ships working reproduction code (passing address-space unit tests PoC-A and an end-to-end TCP PoC-B).

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available

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

Alert me

AnalysisAIv1 – Nov 03, 2026

Namespace-level access control configured with Namespace.setDefaultRolePermissions() is silently ignored on the runtime enforcement path in node-opcua 2.42.0 through 2.179.x, so an unauthenticated network client presenting the Anonymous role can write Variables whose access level includes CurrentWrite and invoke bound Methods that the operator believed were locked down by the inherited namespace default. The bypass only affects nodes that carry no explicit per-node RolePermissions; servers that declared no policy at all, nodes with explicit per-node permissions, and namespaces whose metadata was properly bound via setNamespaceMetaData() fall outside it. A public proof-of-concept reference exists (address-space unit tests plus an end-to-end TCP reproduction) and has not been independently verified as working exploit code; the vendor-released fix is version 2.180.0, and the priority label is act_now.

RemediationAI

Vendor-released patch: upgrade to node-opcua 2.180.0 (https://github.com/node-opcua/node-opcua/releases/tag/v2.180.0), which makes the enforcement path fall back to the namespace policy configured through setDefaultRolePermissions(); the change is in PR https://github.com/node-opcua/node-opcua/pull/1580 with commit 0261e873900800983c622e01120f484dc6063698. Upgrading is the only complete fix stated by the vendor, and it is needed on all three packages (node-opcua, node-opcua-address-space, node-opcua-server). Until then, operators who cannot upgrade should stop relying on the inherited namespace default: set explicit per-node RolePermissions on every Variable with CurrentWrite and every bound Method that must be restricted, since per-node permissions are enforced even on vulnerable versions, at the cost of maintaining permissions per node instead of per namespace. Where the namespace metadata node can be bound at all, calling setNamespaceMetaData() after setDefaultRolePermissions() activates the policy on the enforcement path, but note that this call throws on NodeSet2-loaded namespaces, so no working namespace default can be activated there. Disabling anonymous sessions or restricting the endpoint to authenticated users is not a documented vendor mitigation and does not address the fail-open itself.

Affected VersionsENISA

node-opcua 2.42.0, < 2.180.0

Affected Packages

euvd node_opcua fix: 2.180.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 implements OPC UA (IEC 62541) server and client stacks in TypeScript for Node.js. OPC UA Part 3 §5.2.9 defines inheritance: a node without an explicit RolePermissions attribute falls back to the namespace DefaultRolePermissions, and OPC 10000-3 §4.8.3 mandates default-deny, returning Bad_UserAccessDenied when the required operation bits are absent. The flaw is CWE-285 Incorrect Authorization and, per the advisory, a combination of CWE-863, CWE-636 fail-open and CWE-1188 insecure default. Two defects interact: getPermissionForRole() in packages/node-opcua-address-space/source/session_context.ts returns allPermissions when the resolved policy is null, and the enforcement lookup reads the DefaultRolePermissions UAVariable under Server/Namespaces/<uri> rather than the JavaScript private field written by Namespace.setDefaultRolePermissions(); that node is Null-valued in NodeSet2-loaded namespaces and absent entirely for programmatically created namespaces, so the lookup yields null even when a policy was configured. The two paths only converge when setNamespaceMetaData() binds the field to the node, and that call throws on NodeSet2-loaded namespaces. The fix routes the enforcement lookup to namespace.getDefaultRolePermissions() as a fallback and stops treating a null variable value as an authoritative result.

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 9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 9.1 CRITICAL

Anonymous network client (PR:N, AV:N, UI:N) gains allPermissions including Read/Write/Call on affected nodes, so C:H and I:H; no availability impact and no scope change.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Nov 03, 2026 - 21:03 EUVD
CVE Published
Nov 03, 2026 - 20:11 cve.org
CRITICAL 9.1

DescriptionCVE.org

node-opcua is an OPC UA implementation for TypeScript and Node.js. From 2.42.0 until 2.180.0, namespace-level access control configured through setDefaultRolePermissions is not honored by the runtime enforcement path for nodes without explicit per-node RolePermissions. SessionContext.getApplicableRolePermissions reads a missing or null DefaultRolePermissions metadata value instead of the configured namespace field, and the null result is treated permissively. An anonymous network client can consequently write variables with CurrentWrite access or call bound methods when an operator configured a restrictive namespace default and relied on inheritance. Servers with no declared policy, nodes with explicit per-node permissions, and correctly bound programmatic namespace metadata are outside the authorization-bypass case. This issue is fixed in version 2.180.0.

Technical POC Analysis

Incorrect authorization with fail-open behavior.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A critical access-control flaw in the node-opcua library (versions 2.42.0 through 2.179.x) causes operator-configured namespace-level write and method permissions to be silently ignored, allowing an unauthenticated network client acting as Anonymous to modify protected process Variables and invoke locked-down Methods. This directly undermines the authorization assumptions relied upon by any production OPC UA server built on the affected versions, exposing OT/industrial control integrations and the business operations they support.

Business Impact: High
Compensating Controls

Vendor-released patch: 2.180.0

Threat Intelligence Overview

Prevalence
Medium
leading Node.js OPC UA library, industrial/OT niche deployments
Data Quality
4 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 CRITICAL
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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-2024-35286 CRITICAL POC
9.8 Oct 21

A vulnerability in NuPoint Messenger (NPM) of Mitel MiCollab through 9.8.0.33 allows an unauthenticated attacker to cond

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