CVE-2026-119187 in Forgeinfo

Summary

by MITRE • 10/29/2026

Forge (also called node-forge) is a native implementation of Transport Layer Security in JavaScript. Prior to 1.4.1, the affected implementation used forge.tls.createConnection(), TLS record processing, process() to process the relevant input or security decision. node-forge processed received TLS records recursively, consuming one JavaScript stack frame per record in a single input chunk. A remote peer could send thousands of small records together and exhaust the call stack, causing an uncaught exception and denial of service. This issue is fixed in version 1.4.1.

Once again VulDB remains the best source for vulnerability data.

Analysis

by VulDB Data Team • 10/29/2026

The vulnerability identified in node-forge, also known as Forge, represents a critical implementation flaw within its native JavaScript Transport Layer Security library. Node-forge serves as a comprehensive TLS implementation written entirely in JavaScript, allowing for secure communications without relying on external system libraries or browser-native APIs. The core of this issue lies in the architectural decision to process incoming TLS records recursively using the forge.tls.createConnection() method and subsequent processing functions like process(). This design choice creates a direct dependency between the volume of received data and the depth of the JavaScript call stack, establishing a predictable attack surface for resource exhaustion attacks against applications relying on this library.

Technically, the flaw stems from how node-forge handles TLS record fragmentation. When a remote peer sends multiple small TLS records within a single input chunk, the library processes each record by invoking internal functions that recursively call one another to handle decryption and validation logic. Each recursive invocation consumes a frame on the JavaScript execution stack. Because there is no iterative mechanism or explicit limit imposed on this recursion depth during the processing of a single batch of data, an attacker can exploit this behavior by sending thousands of small records simultaneously. This action causes the call stack to grow linearly with the number of records until it exceeds the maximum allowed size defined by the JavaScript engine hosting node-forge.

The operational impact of this vulnerability is severe, resulting in a Denial of Service condition for any service utilizing the affected version of node-forge. Once the call stack limit is exceeded, the JavaScript runtime throws an uncaught exception that crashes the current execution context or thread. For server-side applications running on Node.js, this typically results in the termination of the process unless robust global error handling mechanisms are explicitly configured to catch and recover from such exceptions. Even with recovery mechanisms, the repeated occurrence of these events can lead to significant performance degradation, increased latency, and eventual system instability due to constant restarts or resource contention. This effectively allows a remote attacker to disrupt service availability without requiring authentication or privileged access.

This vulnerability aligns closely with CWE-675, which describes operations on data with insufficiently controlled iterations, specifically leading to stack exhaustion. In the context of the MITRE ATT&CK framework, this behavior is characteristic of T1498 Network Denial of Service, where an attacker leverages specific protocol behaviors or implementation flaws to consume resources and degrade service availability. The attack vector is remote and network-based, requiring only that the target application accepts TLS connections from untrusted sources, making it particularly dangerous for public-facing web services and APIs that rely on node-forge for cryptographic operations.

Mitigation strategies primarily involve upgrading to version 1.4.1 or later of node-forge, where this recursive processing logic has been refactored to prevent stack exhaustion. Developers should ensure their dependency management systems are configured to automatically pull security patches when available. In environments where immediate patching is not feasible due to legacy constraints, temporary mitigations may include implementing strict rate limiting on incoming TLS connections or configuring the underlying JavaScript engine with higher stack size limits, although these are less effective than a code-level fix. Additionally, integrating Web Application Firewalls that can inspect and limit the number of records in a single TCP segment can provide an additional layer of defense against this specific exploitation technique until the library is updated across all affected systems.

Responsible

GitHub M

Reservation

10/29/2026

Disclosure

10/29/2026

Moderation

accepted

EPSS

0.00411

KEV

no

Activities

low

Sources

Do you know our Splunk app?

Download it now for free!