<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Node-Opcua-Transport (&gt;= 2.0.0, &lt; 2.170.0) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/node-opcua-transport--2.0.0--2.170.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 16 Sep 2026 19:07:28 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/node-opcua-transport--2.0.0--2.170.0/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Resource Exhaustion in node-opcua via TCP Socket Leak</title><link>https://feed.craftedsignal.io/briefs/2026-09-node-opcua-socket-leak/</link><pubDate>Wed, 16 Sep 2026 19:07:28 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-node-opcua-socket-leak/</guid><description>A vulnerability in node-opcua (CVE-2026-68904) causes TCP socket exhaustion and process crashes when clock skew triggers continuous reconnection cycles.</description><content:encoded><![CDATA[<p>CVE-2026-68904 is a resource exhaustion vulnerability in the node-opcua library affecting versions prior to 2.170.0. The vulnerability arises from an improper reconnection logic when the client environment has a clock skew relative to the connected OPC UA server. When the server returns a BadInvalidTimestamp error due to timestamp validation failure, the node-opcua keepalive manager incorrectly interprets this as a fatal transport-level network outage. This triggers an immediate reconnection attempt every keepAliveInterval (default 3 seconds).</p>
<p>Simultaneously, the library's transport layer uses socket.end() rather than socket.destroy() during failed handshakes. This sends a TCP FIN but does not forcefully close the connection, resulting in orphaned sockets remaining in a FIN-WAIT-2 state indefinitely. The cumulative effect of rapid, repeated reconnections caused by the misidentified error, combined with the failure to properly clean up sockets, leads to file descriptor exhaustion and memory depletion, eventually resulting in an OOM-kill or process crash.</p>
<h2 id="impact">Impact</h2>
<p>Successful exploitation (via natural clock drift or deliberate manipulation of the server timestamp) leads to a persistent denial-of-service condition for the node-opcua client process. Affected industrial automation systems relying on this library may experience total loss of connectivity to OPC UA servers, process interruptions, and unrecoverable service downtime. The bug has been confirmed in node-opcua versions 2.169.0 and below.</p>
<h2 id="recommendation">Recommendation</h2>
<p>Prioritized actions for development and security teams:</p>
<ul>
<li>Upgrade node-opcua, node-opcua-client, and node-opcua-transport to version 2.170.0 or later to patch the connection handling logic.</li>
<li>Until patching is possible, implement system-level monitoring for TCP socket counts on hosts running node-opcua services (e.g., ss -antp | grep FIN-WAIT-2).</li>
<li>Synchronize system clocks between OPC UA clients and servers using NTP or PTP to prevent the BadInvalidTimestamp error condition from triggering the flawed reconnection logic.</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>denial-of-service</category><category>nodejs</category><category>opcua</category><category>resource-exhaustion</category></item></channel></rss>