Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconUnauthenticated GetEndpoints request
-
DeliveryRetrieve server RSA public key and token policy
-
ExploitOpen SecureChannel with SecurityMode=None
-
InstallCreate OPC UA session
-
C2Craft 4-byte length payload matching nonce length
-
ExecuteRSA-OAEP encrypt payload
-
ImpactSubmit forged UserNameIdentityToken in ActivateSession
-
Step 8Server authenticates with empty password
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
|
| Exploitation Conditions | Two distinct exploitation paths exist with different preconditions. For the forged-empty-password attack: the target OPC UA server must have at least one account configured to accept an empty password (or no password validation), and the attacker must know or guess a valid username - empty or default accounts in industrial deployments are the primary risk. For the replay attack: the attacker must have previously captured a valid UserNameIdentityToken ciphertext from a prior OPC UA session (e.g., via network interception). The compounding bypass (verifyClientSignature always returning true) applies specifically when the secure channel is negotiated with SecurityMode=None, which is a non-default but common misconfiguration in OPC UA deployments where client certificate management is avoided. Limiting factors: CVSS AC:H reflects that neither attack path is trivially universal - the empty-password variant is limited to servers with weak account policies, and the replay variant requires prior credential capture. Authentication is not required by the attacker (PR:N), and no user interaction is needed (UI:N). The OPC UA port must be reachable from the attacker's network position. |
| Impact | The CVSS vector AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:L yields a base score reported inconsistently as both 8.1 and 7.7 in the source data - both cite the same vector, suggesting a transcription or rounding discrepancy; the computed value is approximately 8.3. The AC:H rating is justified: the empty-password variant requires that at least one account on the target server accepts an empty password, while the replay variant requires prior capture of a valid session token - neither is a zero-effort precondition. However, the PoC attack sequence has been dynamically confirmed by the reporter, and the step-by-step logic requires only publicly available information (the server's own public key, obtained via unauthenticated GetEndpoints) and standard RSA-OAEP encryption, lowering the practical bar considerably. No KEV listing has been confirmed, and no EPSS score was provided in the source data, so exploitation breadth in the wild is unknown. For OPC UA deployments that expose the server port to untrusted networks or that use SecurityMode=None (a known anti-pattern in industrial environments), this is a real, high-priority issue. Deployments that enforce strong SecurityMode, disallow empty passwords, and restrict OPC UA port access to trusted subnets face substantially lower residual risk. No vendor-released patch exists at time of analysis, which elevates urgency for workarounds. |
| Exploit ScenarioDerived | An attacker with network access to an OPC UA server running node-opcua <= 2.165.0 first calls GetEndpoints without authentication to retrieve the server's RSA public key. The attacker then opens a secure channel with SecurityMode=None, creates a session, crafts a 4-byte payload where the length field equals the server nonce length (32), RSA-OAEP-encrypts it with the server's public key, and submits it as a UserNameIdentityToken in an ActivateSession call - causing the server to compute a password of empty string and invoke isValidUser with that value. A proof-of-concept attack sequence has been dynamically confirmed by the reporter, and the attack does not require the server private key or any prior credential. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 20, 2026
Authentication bypass and token replay in node-opcua's UserNameIdentityToken handler enables unauthenticated remote attackers to authenticate as any user whose account accepts an empty password, and to replay captured session tokens unconditionally across unrelated sessions. Versions up to and including 2.165.0 of the npm package are affected. The vulnerability is compounded when SecurityMode=None is configured, which causes the channel-level signature verification to return true unconditionally. A proof-of-concept attack sequence has been dynamically confirmed by the reporter; no vendor-released patch has been identified at time of analysis.
RemediationAI
No vendor-released patch has been identified at time of analysis; the fixed-in field in the advisory is listed as None. Upstream fix guidance calls for verifying that buff.slice(4 + passwordLength) equals session.nonce after decryption and rejecting the token on mismatch - downstream maintainers should track the node-opcua repository for a patched release. Until a patch is available, apply the following compensating controls: (1) Disable SecurityMode=None and enforce at minimum SecurityMode=Sign or SecurityMode=SignAndEncrypt on all secure channels - this prevents the compounding bypass in verifyClientSignature and raises the practical bar for credential forging; note this may require client-side certificate deployment. (2) Audit all OPC UA user accounts and disable or lock any account that accepts an empty password, directly blocking the forged-empty-password attack vector. (3) Restrict network access to OPC UA ports (default TCP 4840/4843) to known-trusted clients using firewall rules or network segmentation - this limits replay attack surface to already-trusted network segments. (4) Rotate session credentials and monitor OPC UA server logs for anomalous ActivateSession calls, particularly those from unexpected source addresses. Reference: https://github.com/node-opcua/node-opcua/security/advisories/GHSA-mq36-523m-x7vv
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
OPC UA (Open Platform Communications Unified Architecture) is an industrial automation messaging protocol; node-opcua (pkg:npm/node-opcua) is the dominant Node.js server implementation. When a client authenticates with a UserNameIdentityToken, the OPC UA specification requires the client to RSA-OAEP-encrypt the password concatenated with the server nonce, so that replay across sessions is cryptographically impossible. The vulnerable code in packages/node-opcua-server/source/opcua_server.ts (lines 1886-1887) decrypts the blob and reads a 4-byte little-endian length prefix to slice the password, but never verifies that the remaining bytes match session.nonce. This is a textbook instance of CWE-347 (Improper Verification of Cryptographic Signature): a cryptographic mechanism (nonce binding) is structurally absent rather than implemented incorrectly. A second, compounding defect in security_policy.ts (lines 697-700) makes verifyClientSignature return true unconditionally when SecurityMode=None, eliminating the channel-level guard entirely. Together, these two gaps mean that an attacker who knows a valid username and can reach the OPC UA port can forge or replay credentials without possessing the account password.
Know when Jwt Attack 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:H/I:H/A:L
AV:N and PR:N confirmed by unauthenticated network attack path; AC:H for preconditions (empty-password account or captured token); A:N as no availability impact is described.
Primary rating from Vendor (https://github.com/node-opcua/node-opcua).
CVSS VectorVendor: https://github.com/node-opcua/node-opcua
Lifecycle Timeline
2DescriptionCVE.org
Summary A missing nonce verification in the UserNameIdentityToken authentication handler allows an unauthenticated remote attacker to forge a password token that extracts as an empty string, and to replay captured authentication tokens across sessions.
Affected versions: <= 2.165.0 Tested version: 2.165.0 CVSS Score: 8.1 (High) CVSS Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:L CWE: CWE-347 Improper Verification of Cryptographic Signature
---
Root Cause
In packages/node-opcua-server/source/opcua_server.ts at line 1886-1887, after RSA-OAEP decrypting the UserNameIdentityToken password blob, the server reads a 4-byte little-endian length field and extracts buff[4 : 4+length] as the password. It never verifies that the trailing bytes equal session.nonce.
This has two consequences:
- Forged empty password: An attacker who retrieves the server's public key via an unauthenticated
GetEndpointscall can craft a token where the 4-byte length field equalsserverNonce.length(32). The server computeslength = 32 - 32 = 0and callsisValidUser(username, ""). Any account that accepts an empty password is compromised. - Unconditional replay attack: Because nonce binding is structurally absent, any captured UserNameIdentityToken ciphertext can be replayed in a different session unconditionally.
The impact is compounded by a second issue: when the channel uses SecurityMode=None, verifyClientSignature returns true unconditionally (security_policy.ts:697-700), bypassing the channel-level signature check entirely.
---
Proof of Concept (logic, no exploit code)
1. GetEndpoints (unauthenticated) → retrieve server public key and RSA token policy
2. OpenSecureChannel (SecurityMode=None)
3. CreateSession
4. Craft plaintext: [0x20, 0x00, 0x00, 0x00] (readUInt32LE = 32 = serverNonce.length)
5. RSA-OAEP encrypt with server public key → 256-byte ciphertext
6. ActivateSession with crafted UserNameIdentityToken
7. Server decrypts → length = 32 - 32 = 0 → password = ""
8. isValidUser(username, "") is calledDynamically confirmed: decryption produces password = "" with no error and no nonce verification.
---
Suggested Fix
After decrypting the password blob, verify that buff.slice(4 + passwordLength) equals session.nonce before extracting the password. Reject the token if verification fails.
---
I am following a 90-day responsible disclosure policy. I am happy to provide additional technical details under embargo. Please confirm receipt at your earliest convenience.
Reporter: Stanley Tobias Discovery date: 2026-03-23
Blast Radius
ecosystem impact- 2 npm packages depend on node-opcua (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 2.165.0.
Executive ViewAI
Organizations using node-opcua (≤v2.165.0) for OPC UA communications face critical risk of unauthorized access and account impersonation through an authentication bypass that requires no credentials and allows replay of hijacked session tokens across sessions. This directly exposes operational technology infrastructure-including industrial controls, building systems, and manufacturing environments-to compromise by remote attackers, with technical feasibility confirmed through proof-of-concept testing and no patch currently available.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Disable SecurityMode=None; mandate SecurityMode=SignAndEncrypt or SecurityMode=Sign for all OPC UA server configurations; (2) Implement strict network access controls via firewall, allowing OPC UA connections only from pre-approved client IP addresses; (3) Enforce strong, unique passwords on all user accounts and eliminate any accounts with empty password acceptance; (4) Deploy continuous monitoring of OPC UA session tokens to detect and alert on token replay or unauthorized reuse patterns; (5) Isolate systems running affected versions on restricted network segments with limited external connectivity until patch deployment is complete.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Jwt Attack
View allWhy is Microsoft republishing a CVE from 2013? We are republishing CVE-2013-3900 in the Security Update Guide to update
Authentication bypass in SimpleHelp 5.5.15 and prior (plus 6.0 pre-release builds) allows remote unauthenticated attacke
Authentication bypass in WSO2 API Manager and related components (Universal Gateway, Traffic Manager, API Control Plane,
Authentication bypass in Fortinet FortiOS, FortiProxy, and FortiSwitchManager allows unauthenticated remote attackers to
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS
Security feature bypass in Microsoft .NET (shipped via Visual Studio 2022 17.12/17.14 and Visual Studio 2026 18.7) lets
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS
The package jsrsasign before 10.5.25 are vulnerable to Improper Verification of Cryptographic Signature when JWS or JWT
Authentication and authorization bypass in fast-jwt 6.2.0 through 6.2.4 (npm, NearForm) lets a remote, unauthenticated a
A library injection vulnerability exists in Microsoft Teams (work or school) 24046.2813.2770.1094 for macOS. Rated criti
A library injection vulnerability exists in the WebView.app helper app of Microsoft Teams (work or school) 24046.2813.27
A library injection vulnerability exists in the com.microsoft.teams2.modulehost.app helper app of Microsoft Teams (work
EUVD-2026-77619
GHSA-mq36-523m-x7vv
NVD
CVE.org
EPSS
Exploit-DB