node-opcua: TCP Socket Leak (FIN-WAIT-2) via keepalive reconnection cycle - Resource Exhaustion
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- High
- Impact type
- Denial of service
- Confidentiality · integrity · availability
- Low · Low · High
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-400.
Summary
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. ClientSessionKeepAliveManager._ping_server treated the server-originated ServiceFault as a network outage and forced a transport reconnect, while ClientTCP_transport._on_ACK_response used socket.end() after failed HEL/ACK negotiation and could leave the connection in FIN-WAIT-2 when the peer did not close. Repetition at the keepAliveInterval accumulates file descriptors and memory until the client process or container can be terminated by resource exhaustion. This issue is fixed in version 2.170.0.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| node-opcua | node-opcua | 2.0.0 to before 2.170.0 | 2.170.0 | Patch available | CNA |
| — | node-opcua-transport (npm) | 2.0.0 to before 2.170.0 | 2.170.0 | Patch available | GHSA-r2pf-9cw4-5j65 |
| — | node-opcua-client (npm) | 2.0.0 to before 2.170.0 | 2.170.0 | Patch available | GHSA-r2pf-9cw4-5j65 |
| — | node-opcua (npm) | 2.0.0 to before 2.170.0 | 2.170.0 | Patch available | GHSA-r2pf-9cw4-5j65 |
- node-opcua Vendornode-opcua Affected 2.0.0 to before 2.170.0 Fixed in 2.170.0 Patch available CNA
- node-opcua-transport (npm) Vendor— Affected 2.0.0 to before 2.170.0 Fixed in 2.170.0 Patch available GHSA-r2pf-9cw4-5j65
- node-opcua-client (npm) Vendor— Affected 2.0.0 to before 2.170.0 Fixed in 2.170.0 Patch available GHSA-r2pf-9cw4-5j65
- node-opcua (npm) Vendor— Affected 2.0.0 to before 2.170.0 Fixed in 2.170.0 Patch available GHSA-r2pf-9cw4-5j65
Remediation
- Fix · CNA node-opcua (node-opcua) Fixed in 2.170.0
- Fix · GHSA-r2pf-9cw4-5j65 node-opcua-transport (npm) Fixed in 2.170.0 Advisory →
- Fix · GHSA-r2pf-9cw4-5j65 node-opcua-client (npm) Fixed in 2.170.0 Advisory →
- Fix · GHSA-r2pf-9cw4-5j65 node-opcua (npm) Fixed in 2.170.0 Advisory →
Timeline
- 2026-10-02 Threatist record created from CVE-2026-68904
- 2026-10-03 Alias added: GHSA-r2pf-9cw4-5j65
References
Other 8
- https://github.com/node-opcua/node-opcua/security/advisories/GHSA-r2pf-9cw4-5j65
- https://github.com/node-opcua/node-opcua/pull/1497
- https://github.com/node-opcua/node-opcua/commit/1959cbb8946b386d2e24a1cce05b7148099d36e7
- https://github.com/node-opcua/node-opcua/commit/481664fa6ba8204737c5a92797ff68c3ae780c1c
- https://github.com/node-opcua/node-opcua/commit/4d59197e2dbd82791d7f36dad7da178715e0c27a
- https://github.com/node-opcua/node-opcua/commit/dc406fd2d364aa69dd173be21ed32a7ff425017a
- https://github.com/node-opcua/node-opcua/releases/tag/v2.170.0
- https://github.com/node-opcua/node-opcua
More node-opcua vulnerabilities
- TI-2026-84561 Authorization bypass in node-opcua lets anonymous clients write CVSS 3.1CRITICAL 9.1
- TI-2026-48544 node-opcua: Prototype Pollution via internal `fieldsToJson()` implementation (Related to CVE-2024-57086) CVSS 3.1LOW 3.7
- TI-2026-39066 node-opcua: Unbounded nonce cache enables unauthenticated heap exhaustion DoS CVSS 3.1HIGH 7.5
- TI-2026-39065 node-opcua: Missing nonce verification in UserNameIdentityToken authentication CVSS 3.1HIGH 7.7
Sources
- CVE-2026-68904 · CVE Program
- CVE-2026-68904 · NVD
- FIRST EPSS
- GHSA-r2pf-9cw4-5j65 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences