CVE-2026-95860
CriticalCVSS 9.1Summary
In node-opcua (an OPC UA implementation for TypeScript and Node.js), versions 2.42.0 through 2.180.0 do not honor namespace-level access control configured via setDefaultRolePermissions for nodes without explicit per-node permissions. SessionContext.getApplicableRolePermissions reads a missing or null value instead of the configured namespace field, and the null result is treated permissively. As a result, an anonymous network client can write variables or call bound methods when an operator relied on restrictive namespace defaults.
Risk Assessment
The flaw lets an unauthenticated network client bypass configured access control and modify data or invoke methods on an OPC UA server. This can lead to unauthorized changes in industrial or control systems.
Recommendation
Upgrade node-opcua to version 2.180.0 or later. Until patched, consider explicitly assigning per-node permissions for critical resources.
Other vulnerabilities in node-opcua
See all- CVE-2026-69200Low
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.
- CVE-2026-68904High
node-opcua is an OPC UA implementation for TypeScript and Node.js. From 2.0.0 until 2.170.0, node-opcua clients using the default keepSessionAlive setting can enter a repeated reconnection cycle when an OPC UA server's clock skew causes BadInvalidTimestamp responses, accumulating file descriptors and memory until resource exhaustion. This issue is fixed in version 2.170.0.
- CVE-2026-54156High
node-opcua before version 2.166.0 stores nonces in a global cache without expiration or size limit. An unauthenticated attacker can repeatedly create sessions with unique nonces, causing unbounded heap growth and crashing the server.
- CVE-2026-54155High
node-opcua before version 2.166.0 in UserNameIdentityToken handling does not verify that trailing bytes match the current serverNonce. This allows an attacker to forge a token with an empty password or replay a captured token in another session.
Original NVD description (English source)
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.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

