Skip to main content

node-forge CVE-2026-85393

| EUVDEUVD-2026-70670 HIGH
Improper Verification of Cryptographic Signature (CWE-347)
2026-09-03 VulnCheck GHSA-86w9-cpqp-85rv
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Identify target using node-forge JWT/signature verification with e=3 RSA key
  2. Delivery
    Craft forged DigestInfo block with garbage bytes inside DigestAlgorithm ASN.1 sequence
  3. Exploit
    Compute cube-root to produce valid-looking PKCS#1 v1.5 ciphertext
  4. Execution
    Submit forged signature in authentication request
  5. Persist
    node-forge accepts malformed structure, OpenSSL would reject
  6. Impact
    Bypass authentication or integrity check

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires two specific conditions: (1) the RSA key used for signature verification must have a low public exponent, specifically e=3 (or comparably small values); e=65537 keys are not exploitable via this cube-root path. (2) The verifying code must invoke key.verify() through node-forge with the default _parseAllDigestBytes: true setting and must accept the signature as authoritative for authentication or integrity decisions. The exploit is unauthenticated (PR:N) and requires no user interaction once a verification endpoint is reachable. Limiting factors: the e=3 key requirement substantially reduces the exposed population to legacy systems, embedded deployments, or scenarios where an attacker can influence key selection; modern tooling defaults to e=65537 which is not affected by the cube-root construction described.

Impact

The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H) rates this 8.7, and the integrity-only, unauthenticated, network-accessible framing is directionally correct. However, AC:L/AT:N understates the key configuration dependency: exploitation strictly requires a low public exponent (e=3) on the RSA key being verified. In practice, modern RSA keys overwhelmingly use e=65537, so the realistic exposed surface is narrower than the raw vector implies. That said, deployments using node-forge to verify JWTs, TLS certificates, or code signatures generated with legacy e=3 keys (or where an attacker controls key generation) are genuinely at risk of authentication bypass or privilege escalation. A working PoC demonstrating cube-root forgery on a 4096-bit e=3 keypair is documented in GHSA-ppp5-5v6c-4jwp, confirming the attack is reproducible. No KEV listing was identified; EPSS data was not supplied. The conflict between the GHSA's 'fixed in: 1.4.0' attribution and the CVE's explicit 'through 1.4.0' scope is a material uncertainty: if no post-1.4.0 fix exists, the entire installed base remains exposed.

Exploit ScenarioDerived

An attacker targeting a web application that uses node-forge to verify RSA-signed JWTs with an e=3 key constructs a forged signature by computing the cube root of a specially padded DigestInfo block containing garbage ASN.1 bytes inside the DigestAlgorithm sequence. The forged signature passes node-forge's key.verify() check (which accepts the extra bytes) while encoding an arbitrary digest value, allowing the attacker to produce a self-signed token claiming administrative privileges without possessing the private key. A working PoC demonstrating this against a fresh 4096-bit e=3 keypair is documented in GHSA-ppp5-5v6c-4jwp.

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 – Sep 03, 2026

RSA PKCS#1 v1.5 signature forgery in node-forge through v1.4.0 enables unauthenticated network attackers to craft signatures that pass verification against arbitrary messages when the verifying party uses low-exponent RSA keys (e=3). The root cause is missing element-count validation inside nested DigestAlgorithm ASN.1 sequences: forge's _parseAllDigestBytes mode confirms all bytes are consumed but does not enforce the canonical minimal DigestInfo shape required by RFC 8017, allowing garbage bytes inside the DigestAlgorithm container to survive verification while OpenSSL rejects the same structure. This is explicitly described as an incomplete fix for CVE-2026-33894; a working proof-of-concept is documented in the linked GHSA advisory; no public exploit identified in CISA KEV at time of analysis.

RemediationAI

No confirmed patched release has been identified for CVE-2026-85393 specifically - the CVE text explicitly designates the v1.4.0 fix as incomplete, and no later tagged release is referenced. Monitor the upstream repository (https://github.com/digitalbazaar/forge) and the GitHub issue tracker (https://github.com/digitalbazaar/forge/issues/1149) for a post-1.4.0 release that addresses nested DigestAlgorithm element-count validation. In the interim, apply the following compensating controls: (1) Restrict RSA key generation and acceptance to e=65537 keys - reject or refuse to verify signatures produced under e=3 or other small exponents, which eliminates the cube-root forgery avenue; (2) If signature verification is used for authentication or authorization decisions, add an out-of-band cross-check using Node.js's native crypto.verify() (backed by OpenSSL), which correctly rejects the malformed ASN.1 structures that forge accepts - as demonstrated in the GHSA PoC; (3) Audit all call sites of key.verify() that use the default _parseAllDigestBytes: true setting and evaluate whether the verified signatures originate from untrusted or attacker-influenced sources; (4) For JWT verification specifically, prefer the jsonwebtoken library with its own ASN.1 path rather than routing through node-forge. Trade-off: cross-checking with OpenSSL adds a dependency on native Node.js crypto but is the strongest available compensating control until a patched version ships.

Affected VersionsENISA

forge 0 ≤1.4.0

Affected Packages

npm node-forge fix: 1.4.0
euvd forge no fix

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 (CPE: cpe:2.3:a:digitalbazaar:forge:*:*:*:*:*:*:*:*) is a pure-JavaScript cryptography library providing RSA, TLS, and related primitives for Node.js and browsers. CWE-347 (Improper Verification of Cryptographic Signature) captures the root cause: in lib/rsa.js, the key.verify() path decrypts the PKCS#1 v1.5 block via _decodePkcs1_v1_5, parses the resulting ASN.1 DigestInfo structure via lib/asn1.js, and compares the extracted capture.digest to the expected hash. Two defects allow forgery: (1) when _parseAllDigestBytes: true (the default), the parser confirms byte exhaustion but does not validate that the DigestAlgorithm sequence contains exactly the expected fields - attacker-controlled extra ASN.1 elements inside that sequence are silently accepted; (2) the padding string PS is not checked for the RFC 2313-mandated minimum of 8 bytes, granting the forger additional byte budget. Together these gaps enable a Bleichenbacher-style cube-root forgery attack on any key with a small public exponent, most commonly e=3, a configuration found in older RSA key generation defaults and some embedded/IoT certificate chains.

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 (VulnCheck) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

AC:H because exploitation strictly requires a low-exponent RSA key (e=3); I:H for complete signature forgery enabling authentication bypass; C:N and A:N as no data is exposed and service remains available.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

node-forge through 1.4.0 fails to validate element count in nested DigestAlgorithm sequences during RSA PKCS#1 v1.5 signature verification. Attackers can embed garbage bytes inside the DigestAlgorithm sequence to forge valid signatures for arbitrary messages using low-exponent RSA keys. This is an incomplete fix for CVE-2026-33894.

Blast Radius

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

Ecosystem-wide dependent count for version 1.4.0.

Executive ViewAI

Why It Matters

A cryptographic validation vulnerability in node-forge through version 1.4.0 allows attackers to forge RSA digital signatures that applications will accept as valid. Publicly available exploit code exists for this vulnerability, particularly affecting organizations that use low-exponent RSA keys for signature verification in authentication, API security, or payment processing. Organizations must immediately audit affected systems and implement compensating controls, as no vendor patch is currently available.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) migrate all production RSA key pairs to high exponents (e≥65537, standard e=65537); (2) implement external DigestInfo validation logic outside node-forge to reject non-canonical ASN.1 structures; (3) restrict node-forge-dependent services to trusted internal networks; (4) deploy monitoring for anomalous signature validation patterns that may indicate exploitation attempts; (5) consider temporary operational isolation of node-forge services until patching becomes available. Note: these compensating controls reduce risk but do not fully eliminate the threat-patch application remains the primary long-term remediation.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Medium
widely used JavaScript crypto library, npm downloads in millions
Threat Intel
1
1 sources
Social Media
2
Sightings
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC Vendor CIRCL GitHub VulDB

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
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

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

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-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-2026-119190 HIGH
7.4 Oct 29

Certificate chain validation in node-forge (Forge) through version 1.4.0 can be bypassed because the parser maps the dep

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

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 12 Not-Affected
SUSE Linux Enterprise Micro 5.3 Affected
SUSE Linux Enterprise Micro 5.4 Affected
SUSE Linux Enterprise Micro 5.5 Not-Affected

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