Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit small crafted malformed PEM to parser endpoint
-
ExploitTrigger polynomial-time regex in pem.decode()
-
ImpactBlock Node.js event loop, denying service to all requests
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the application pass attacker-controlled PEM text to any high-level node-forge parser, all of which route through pem.decode() - including pki.certificateFromPem(), pki.privateKeyFromPem(), pki.publicKeyFromPem(), pki.certificationRequestFromPem(), pki.encryptedPrivateKeyFromPem(), pki.decryptRsaPrivateKey(), and pkcs7.messageFromPem(). No special configuration or feature flag is needed and no authentication is required (PR:N); default behavior of these APIs is vulnerable on versions <= 1.4.0. The practical limiting factor is purely architectural: the attacker must reach a code path that feeds untrusted PEM to node-forge (e.g. certificate/key/CSR upload, SAML metadata, or certificates in user-supplied documents or config). The vendor notes that rejecting untrusted PEM larger than a few kilobytes reduces but does not eliminate the delay (about 7 KB still blocked ~0.4 s on 1.4.0), so size limits are not a complete mitigation; updating to 1.4.1 is the complete fix. |
| Impact | This is a genuine, actionable priority for affected deployments, but its ceiling is bounded by impact type. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5 High) describes a remote, unauthenticated, low-complexity attack requiring no user interaction, and the evidence confirms the mechanism: a polynomial-time (ReDoS) regular expression in pem.decode() that blocks the Node.js event loop for seconds to minutes on tens-of-kilobytes of crafted input. All impact is on availability only - C:N/I:N - so this is a denial-of-service issue, not a path to data exposure or code execution. No EPSS score and no KEV status were provided in the input, so exploitation probability and confirmed in-the-wild use cannot be assessed; absence of these signals is not evidence against risk, but it means urgency rests on the published advisory, a public PoC, and the vuln.today 'this_week' decision label rather than on observed attacks. The advisory and repository publish working proof-of-concept code with measured timings (about 24 s for 29 KB on 1.4.0), which lowers the barrier to opportunistic abuse. The main thing that narrows real-world exposure is architectural, not score-based: only applications that actually feed attacker-controlled PEM to a high-level node-forge parser are reachable (see exploitation_conditions). For those, treat it as a patch-this-week item consistent with the decision label; for deployments that never parse untrusted PEM, real risk is low despite the High rating. |
| Exploit ScenarioDerived | A service that accepts user-supplied PEM - for example an endpoint that parses uploaded certificates, keys, CSRs, or certificates embedded in SAML metadata or config - passes that text to a node-forge parser such as pki.certificateFromPem(). A remote, unauthenticated attacker submits a small (tens of KB) malformed PEM crafted to trigger the polynomial-time regex, blocking the single-threaded Node.js event loop for seconds to minutes per request and starving all other requests; repeated requests keep the process unavailable. A working proof-of-concept is published in the GHSA advisory and the project's tests/pocs directory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 29, 2026
Regular expression denial of service in node-forge's pem.decode() allows remote, unauthenticated attackers to block the Node.js event loop for seconds to minutes by supplying crafted PEM text of a few tens of kilobytes to any high-level parser, including pki.certificateFromPem(), pki.privateKeyFromPem(), pki.certificationRequestFromPem() and pkcs7.messageFromPem(). All versions up to and including 1.4.0 are affected, and the flaw is rated CVSS 3.1 7.5 with availability-only impact (C:N/I:N/A:H). A public proof-of-concept is documented in the vendor advisory GHSA-7wch-p9px-956x, which reports roughly 24 seconds of blockage from a 29 KB input on version 1.4.0; no CISA KEV entry is indicated in the supplied intelligence, and the vuln.today priority is this_week.
RemediationAI
Vendor-released patch: node-forge 1.4.1, available from the project's v1.4.1 release tag (https://github.com/digitalbazaar/forge/releases/tag/v1.4.1) and detailed in advisory GHSA-7wch-p9px-956x (https://github.com/digitalbazaar/forge/security/advisories/GHSA-7wch-p9px-956x), with the upstream change visible in commit 412345db583cd28a9d23636d0d93e9f751b935f3. Upgrading every dependency that resolves node-forge to 1.4.1 is the complete fix, because the underlying regular expressions in pem.decode() are replaced by a linear-time scanner. The vendor's documented workaround - rejecting untrusted PEM input larger than a few kilobytes before it reaches node-forge - narrows the attack window but does not eliminate it: on 1.4.0 about 7 KB of crafted input still blocked the event loop for roughly 0.4 seconds, while the 1.4.1 release rejects the same inputs in milliseconds. Node.js processes that accept uploaded certificates, keys or CSRs, or that parse certificates from configuration, SAML metadata or other user-supplied documents, should be treated as exposed until the 1.4.1 upgrade is deployed.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
node-forge is a JavaScript implementation of TLS and related cryptographic structures, and its lib/pem.js module underpins every API that accepts PEM-encoded certificates, keys, CSRs and PKCS#7 messages. The vulnerable version located PEM messages with a single regular expression whose optional encapsulated-header group and body group are adjacent, lazy, and draw from overlapping character classes (whitespace and the base64 alphabet), while the overall match must terminate in an END line whose label back-references the BEGIN label. When no matching END line exists, the regex engine explores every possible split between the two groups, for every candidate label split and at every BEGIN line, producing polynomial backtracking - roughly cubic with repeated mismatched BEGIN/END lines and quadratic with a BEGIN line followed by many newlines. Two additional quadratic cases existed in encapsulated-header parsing: per-line trimming with /\s+$/ and an unanchored header regex that retried at every position of a long colon-free line. These map to CWE-400 (Uncontrolled Resource Consumption), specifically CWE-1333 (Inefficient Regular Expression Complexity). The 1.4.1 fix replaces the message regex with a scanner that indexes END lines once and matches each BEGIN line in linear time, trims header lines with a loop, and anchors header matching to the start of a printable-character run; the only behavioral change is that a label containing '-----' now resolves to the shortest label, which is valid because RFC 7468 labels cannot contain '--'. The affected package is identified by CPE cpe:2.3:a:digitalbazaar:forge and by EUVD as forge < 1.4.1.
Know when Forge 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:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Remote unauthenticated input to any PEM parser with no user interaction gives AV:N/AC:L/PR:N/UI:N; event-loop exhaustion is availability-only, so C:N/I:N/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Forge (also called node-forge) is a native implementation of Transport Layer Security in JavaScript. Prior to 1.4.1, the affected implementation used pem.decode(), lib/pem.js, missing END line to process the relevant input or security decision. node-forge used polynomial-time regular expressions in pem.decode(), including when searching for a matching END line and parsing encapsulated headers. An unauthenticated attacker able to supply PEM input to any high-level parser could consume excessive CPU with a long malformed message and cause denial of service. This issue is fixed in version 1.4.1.
Blast Radius
ecosystem impact- 6 npm packages depend on node-forge (3 direct, 3 indirect)
Ecosystem-wide dependent count for version 1.4.1.
Technical POC Analysis
Bug class: CWE-400 (Uncontrolled Resource Consumption), specifically CWE-1333 (Inefficient Regular Expression Complexity) - catastrophic/polynomial backtracking in a regular expression.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-118779 is a high-severity availability vulnerability in the widely used node-forge library that can freeze Node.js applications for seconds to minutes when processing maliciously crafted PEM input. Any internet-facing service that parses certificates, keys, or PKCS#7 messages using node-forge is at risk, potentially causing service outages and disrupting customer-facing operations. Leadership should prioritize remediation this week given the public proof-of-concept.
Apply vendor patch.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
An interpretation-conflict (CWE-436) vulnerability in node-forge versions 1.3.1 and earlier enables unauthenticated atta
The package node-forge before 0.10.0 is vulnerable to Prototype Pollution via the util.setPath function. Rated high seve
RSA PKCS#1 v1.5 signature forgery in node-forge through v1.4.0 enables unauthenticated network attackers to craft signat
Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated high severi
Denial of service in node-forge (Forge) 1.3.2 through 1.4.0 lets remote, unauthenticated attackers exhaust CPU time and
Denial of service in node-forge's JavaScript TLS implementation: a connection created with forge.tls.createConnection()
Call stack exhaustion in node-forge's TLS record processing (all versions through 1.4.0) allows a remote peer to crash o
PKCS#12 MAC forgery and constant-key password-based decryption in node-forge 1.4.0 and earlier let anyone who does not k
Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated high severi
Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated high severi
Certificate chain validation in node-forge (Forge) through version 1.4.0 can be bypassed because the parser maps the dep
Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated medium seve
EUVD-2026-113337
GHSA-7wch-p9px-956x
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB