Skip to main content

node-forge EUVDEUVD-2026-113347

| CVE-2026-119190 HIGH
Improper Certificate Validation (CWE-295)
2026-10-29 GitHub_M GHSA-5x38-2vff-x55p
7.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit CSR with forged deprecated-OID basicConstraints
  2. Delivery
    Trusted CA copies extension into issued cert
  3. Exploit
    Chain verification reads forged cA TRUE
  4. Execution
    Cert accepted as CA by node-forge
  5. Persist
    Sign leaf certs for arbitrary names
  6. Impact
    Impersonate TLS peer and intercept traffic

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V12 - Secure Communication Certificate validation
Exploitation Conditions

Exploitation requires that the victim application verify certificate chains with forge.pki.verifyCertificateChain() (including TLS peer verification via forge.tls) on a vulnerable version (<= 1.4.0). The attacker must obtain, from a CA already trusted by that application, a certificate carrying an attacker-supplied deprecated-OID extension (2.5.29.10 or 2.5.29.13) encoding basicConstraints cA TRUE, placed before the genuine 2.5.29.19 cA:FALSE extension - in practice this means the CA copies extensions from certificate signing requests (e.g. openssl x509 -req -copy_extensions copy/copyall with basicConstraints=CA:FALSE and no keyUsage). Key limiting factors: the attack fails if the issuing CA adds a keyUsage extension without keyCertSign (node-forge then rejects the chain), and it depends entirely on the trusted CA's willingness to copy unrecognized/unvetted extensions, so CAs that strip or do not copy CSR extensions are not exploitable. No limitation from user interaction or victim-side authentication applies (PR:N/UI:N), but the CA-cooperation requirement is the dominant constraint.

Impact

This is a genuine but conditionally-gated certificate-validation flaw, not a trivially exploitable remote bug. The CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N, 7.4 High) correctly captures the tension: network-reachable and requiring no attacker privileges against the victim (PR:N), but high attack complexity (AC:H) because exploitation depends on a trusted CA being induced to issue the malicious certificate. The vendor's informational CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N, 9.1) scores higher only because 4.0 moves the precondition into the separate Attack Requirements metric (AT:P) rather than inflating complexity; the advisory explicitly states the official rating follows 3.1. No EPSS score and no KEV status were provided in the input, so there is no evidence of active exploitation - the vuln.today Decision label is 'this_week' (prioritized, but not act_now/emergency). A working proof-of-concept exists (the fix commit adds the reporter's PoC as tests/pocs/ghsa-5x38-2vff-x55p.js plus regression tests), which raises practical risk above a theoretical finding. Net: a real priority for anyone whose application verifies TLS/X.509 chains with node-forge, but the hard dependency on a cooperating/misconfigured CA that copies CSR extensions keeps real-world exploitation targeted rather than mass-scannable.

Exploit ScenarioDerived

An attacker submits a CSR to a CA trusted by the victim application that copies unrecognized extensions from requests (e.g. OpenSSL with -copy_extensions copy), embedding a deprecated-OID (2.5.29.10 or 2.5.29.13) basicConstraints extension with cA TRUE before the genuine cA:FALSE extension and omitting keyUsage. node-forge's verifyCertificateChain() reads the first 'basicConstraints'-named extension and accepts the end-entity cert as a CA, so the attacker uses its key to mint certificates for any hostname and impersonate TLS servers or clients to intercept traffic. A working PoC is published in the advisory and committed as a regression test, so the technique is fully documented.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 29, 2026

Certificate chain validation in node-forge (Forge) through version 1.4.0 can be bypassed because the parser maps the deprecated extension OIDs 2.5.29.10 and 2.5.29.13 to the same 'basicConstraints' name as the RFC 5280 OID 2.5.29.19, and forge.pki.verifyCertificateChain() looked the extension up by name, returning the first match. An attacker who obtains a certificate from a trusted CA that copies request extensions can prepend a forged deprecated-OID basicConstraints with cA TRUE ahead of the genuine cA FALSE extension, have the certificate treated as a CA, and then issue certificates for arbitrary names - enabling server or client impersonation in forge.tls and any application using the library's PKI verification. The flaw is remotely reachable without authentication or user interaction (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N, 7.4 High), with the high attack complexity reflecting the reliance on a cooperating trusted CA; no CISA KEV entry is present in the provided data, but a proof-of-concept is published in the upstream repository's test suite (tests/pocs/ghsa-5x38-2vff-x55p.js).

RemediationAI

Upgrade node-forge to 1.4.1 or later, which is the release where verifyCertificateChain() resolves basicConstraints strictly by OID 2.5.29.19 (commit 58c06bc251856b409c30ecb35a93f5f6c9bbc84a; release notes at https://github.com/digitalbazaar/forge/releases/tag/v1.4.1, advisory at https://github.com/digitalbazaar/forge/security/advisories/GHSA-5x38-2vff-x55p). The vendor states there are no workarounds inside node-forge itself; applications that pass an options.verify callback to pki.verifyCertificateChain() (or verify to forge.tls.createConnection()) can compensate by rejecting any chain in which a non-leaf certificate lacks a 2.5.29.19 extension with cA TRUE, for example via cert.getExtension({id: '2.5.29.19'}) - trade-off: this reimplements part of the validation logic and must be maintained until the library is upgraded, and callbacks that mis-handle errors or throw differently can change existing trust decisions. On the issuing side, CA operators can reduce exposure by not copying unrecognized extensions from certificate signing requests, and CAs that add a keyUsage extension without keyCertSign cause node-forge to reject such chains - trade-off: relying on CA-side behavior is outside the application's control and cannot be verified for every trust anchor in a store.

Affected VersionsENISA

forge < 1.4.1

Affected Packages

npm node-forge fix: 1.4.1
euvd forge fix: 1.4.1

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 implements X.509/TLS in JavaScript. In lib/oids.js the table maps the legacy extension OIDs 2.5.29.10 and 2.5.29.13 to the name 'basicConstraints', identical to the RFC 5280 extension id-ce 19 (2.5.29.19). Because certificateExtensionFromAsn1() in lib/x509.js decodes extensions by name, all three OIDs are decoded into the same cA and pathLenConstraint fields, and cert.getExtension('basicConstraints') returns the first extension whose name matches. The vulnerable verifyCertificateChain() used that name-based lookup, so a certificate carrying a deprecated-OID extension with cA TRUE ahead of the genuine 2.5.29.19 cA FALSE extension passed the CA check, and the same ordering could mask a CA certificate's pathLenConstraint; a deprecated-OID extension on its own also satisfied the presence check introduced for CVE-2026-33896 (GHSA-2328-f5f3-gj25, fixed in 1.4.0). This is a certificate validation failure (CWE-295) rooted in ambiguous interpretation of the same data (CWE-436): RFC 5280 section 4.2.1.9 defines basicConstraints only as OID 2.5.29.19, and the path validation steps in section 6.1.4 apply to that extension alone. The fix narrows the verification lookup to cert.getExtension({id: '2.5.29.19'}); certificate parsing, the OID table and name-based getExtension calls are deliberately left unchanged. Exploitability hinges on the issuing CA copying unrecognized extensions from a CSR (for example openssl x509 -req -copy_extensions copy with basicConstraints=CA:FALSE and no keyUsage); if the CA injects a keyUsage extension without keyCertSign, node-forge rejects the chain.

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

Vendor (GitHub_M) PRIMARY 7.4 HIGH
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 7.4 HIGH

Network-reachable chain verification with no victim privileges (PR:N), but AC:H because success depends on a trusted CA copying attacker extensions; impersonation breaks confidentiality and integrity, not availability.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 29, 2026 - 20:18 EUVD
CVE Published
Oct 29, 2026 - 19:25 cve.org
HIGH 7.4

DescriptionCVE.org

Forge (also called node-forge) is a native implementation of Transport Layer Security in JavaScript. Prior to 1.4.1, node-forge parsed deprecated extension OIDs 2.5.29.10 and 2.5.29.13 as basicConstraints, and pki.verifyCertificateChain() used the first extension with that name. Exploitation requires a CA trusted by the application to issue a certificate carrying an attacker-supplied deprecated-OID extension, commonly because the CA copies extensions from a certificate signing request. By placing a permissive deprecated extension before the genuine 2.5.29.19 basicConstraints extension, the certificate holder could have the certificate accepted as a CA and issue certificates for arbitrary names, enabling server or client impersonation. If the issuing CA adds a keyUsage extension without keyCertSign, node-forge rejects the chain. This issue is fixed in version 1.4.1.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 6 npm packages depend on node-forge (3 direct, 3 indirect)

Ecosystem-wide dependent count for version 1.4.1.

Technical POC Analysis

CWE-295 (Improper Certificate Validation), with a secondary interpretation conflict (CWE-436) between the OID table and the path validation logic.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A high-severity flaw in node-forge, a widely used JavaScript library for TLS and certificate handling, allows attackers to bypass certificate validation and impersonate trusted servers or clients. This puts any organization relying on node-forge for secure communications at risk of man-in-the-middle attacks, potentially leading to data breaches or unauthorized access to sensitive systems. Leadership should prioritize remediation because the vulnerability affects mission-critical encryption and trust mechanisms, and no vendor patch is currently available.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: implement certificate pinning or custom validation to ignore deprecated OIDs 2.5.29.10 and 2.5.29.13; enforce strict certificate policies; monitor for suspicious certificate chains; restrict use of node-forge in high-risk environments until a patch is available.

Threat Intelligence Overview

EPSS Score
0.2%
Top 84% exploitable
Prevalence
High
node-forge is a very widely used npm TLS/crypto library
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

37
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +37
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Forge

View all
CVE-2025-12816 HIGH POC
8.6 Nov 25

An interpretation-conflict (CWE-436) vulnerability in node-forge versions 1.3.1 and earlier enables unauthenticated atta

CVE-2020-7720 HIGH POC
7.3 Sep 01

The package node-forge before 0.10.0 is vulnerable to Prototype Pollution via the util.setPath function. Rated high seve

CVE-2026-85393 HIGH
8.7 Sep 03

RSA PKCS#1 v1.5 signature forgery in node-forge through v1.4.0 enables unauthenticated network attackers to craft signat

CVE-2025-66031 HIGH
8.7 Nov 26

Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated high severi

CVE-2026-118779 HIGH
7.5 Oct 29

Regular expression denial of service in node-forge's pem.decode() allows remote, unauthenticated attackers to block the

CVE-2026-119191 HIGH
7.5 Oct 29

Denial of service in node-forge (Forge) 1.3.2 through 1.4.0 lets remote, unauthenticated attackers exhaust CPU time and

CVE-2026-119188 HIGH
7.5 Oct 29

Denial of service in node-forge's JavaScript TLS implementation: a connection created with forge.tls.createConnection()

CVE-2026-119187 HIGH
7.5 Oct 29

Call stack exhaustion in node-forge's TLS record processing (all versions through 1.4.0) allows a remote peer to crash o

CVE-2026-118782 HIGH
7.5 Oct 29

PKCS#12 MAC forgery and constant-key password-based decryption in node-forge 1.4.0 and earlier let anyone who does not k

CVE-2022-24772 HIGH
7.5 Mar 18

Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated high severi

CVE-2022-24771 HIGH
7.5 Mar 18

Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated high severi

CVE-2025-66030 MEDIUM
6.3 Nov 26

Forge (also called `node-forge`) is a native implementation of Transport Layer Security in JavaScript. Rated medium seve

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy