Skip to main content

node-forge EUVDEUVD-2026-113333

| CVE-2026-118776 LOW
Improper Input Validation (CWE-20)
2026-10-29 GitHub_M
3.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Submit or modify ciphertext input
  2. Delivery
    Supply malformed PKCS#7 padding block
  3. Exploit
    node-forge unpad accepts invalid padding
  4. Execution
    Up to four plaintext blocks silently removed
  5. Impact
    Application treats truncated data as valid

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Exploitation requires an application that (1) uses node-forge 1.4.0 or earlier to decrypt attacker-influenced data in CBC or ECB mode (including PKCS#7 EncryptedData/EnvelopedData, PKCS#12, and encrypted private keys) and (2) relies on a successful decipher.finish() as evidence that padding - and therefore the data - is valid. The attacker must be able to modify or supply the ciphertext. Limiting factors: impact is integrity-only (no confidentiality or availability), the vulnerable code path is PKCS#7 unpadding, and because CBC/ECB without a MAC are already malleable the extra capability gained is small; AC:H reflects that the attacker needs ciphertext control and the resulting effect is bounded to silently removing up to four plaintext blocks. The fix does not defend against padding-oracle attacks, so authenticating ciphertext (HMAC) or using AES-GCM remains necessary per the vendor.

Impact

This is a genuinely low-priority issue, and the multiple signals agree rather than conflict. The CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N = 3.7 Low) describes a network-reachable but high-complexity flaw with no confidentiality or availability impact and only Low integrity impact. The vuln.today decision label is 'monitor', the GitHub/vendor severity is LOW, and the vendor itself stresses that CBC and ECB without a MAC are already malleable, so the additional capability this bug grants an attacker is small. No EPSS score and no KEV listing were provided; the input gives no evidence of active exploitation. A proof-of-concept does exist in the vendor's GHSA advisory (a working node-forge snippet plus Wycheproof-derived test vectors), but PoC availability is a distinct signal from exploitation and should not be read as in-the-wild use. The one nuance worth flagging: the vendor also computed a CVSS 4.0 vector of 6.3 (Moderate) because 4.0 weights integrity more heavily, while the authoritative rating follows CVSS 3.1 at Low - so the apparent '3.7 vs 6.3' gap is a scoring-framework difference, not a dispute about impact. Net: a real correctness/integrity defect worth patching on a normal cadence, not an emergency.

Exploit ScenarioDerived

An application uses node-forge to decrypt attacker-supplied AES or DES data in CBC or ECB mode and treats a successful decipher.finish() as proof the data was well-formed. An attacker who can modify or submit ciphertext sends a block with malformed PKCS#7 padding (for example a zero count, an oversized count, or mismatched padding bytes); node-forge 1.4.0 accepts it and silently strips up to four trailing plaintext blocks, so the application processes truncated/malformed data as valid. A working proof-of-concept is published in the vendor's GHSA advisory; exploitation complexity is high (AC:H) and impact is limited to integrity.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 29, 2026

CBC and ECB decryption in node-forge 1.4.0 and earlier accepts malformed PKCS#7 padding, so an application that treats a successful decipher.finish() as proof of valid data can accept tampered ciphertext with up to four blocks of trailing plaintext silently removed. Affected are npm users of the digitalbazaar/forge package who decrypt attacker-influenced data in CBC or ECB mode, including PKCS#7 EncryptedData/EnvelopedData, PKCS#12 and encrypted private keys; impact is integrity-only (CVSS 3.1 3.7, AC:H, no confidentiality or availability effect) because CBC/ECB without a MAC are already malleable. The flaw is fixed in 1.4.1, and the vendor advisory publishes a short proof-of-concept decrypt snippet showing a Wycheproof invalid vector returning true on 1.4.0 and false on 1.4.1; it demonstrates the padding acceptance but gives no remote attack path, so no active exploitation is indicated by the available data.

RemediationAI

Vendor-released patch: node-forge 1.4.1 - upgrade to it, as the fix now requires a padding count between 1 and the block size and checks every padding byte (see https://github.com/digitalbazaar/forge/releases/tag/v1.4.1 and the GHSA at https://github.com/digitalbazaar/forge/security/advisories/GHSA-2vgq-wchc-25w7). Where upgrading cannot be done immediately, the advisory's 1.4.0 workaround is to set decipher.mode.unpad = false before finish() and validate the padding in application code yourself; the trade-off is that you take over all padding error handling and must not reintroduce the same last-byte-only check. Independently of the patch, authenticate CBC/ECB ciphertext (for example with an HMAC) before decrypting it or move to AES-GCM, since the vendor states this fix does not protect against padding-oracle attacks and unauthenticated CBC/ECB never provides integrity. Teams upgrading should also expect a compatibility break: data using ANSI X.923, ISO 10126 or XML Encryption padding no longer decrypts with default unpadding and must be handled with unpad = false plus application-side padding removal.

Affected VersionsENISA

forge < 1.4.1

Affected Packages

euvd forge fix: 1.4.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in 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 pure-JavaScript implementation of TLS and related crypto primitives. The bug lives in modes.cbc.prototype.unpad() and modes.ecb.prototype.unpad() in lib/cipherModes.js: the routines read the last decrypted byte as the PKCS#7 padding count, rejected it only when it exceeded blockSize << 2 (64 bytes for AES, 32 for DES), and then dropped that many bytes. They did not reject a count of zero or a count larger than one block, and did not verify that every padding byte equals the count as RFC 5652 section 6.3 requires - the root cause class is CWE-20 (improper input validation), which the advisory additionally maps to CWE-354 (improper validation of integrity check value). Against the Wycheproof AES-CBC-PKCS5 vectors, 69 of 144 invalid vectors decrypted successfully on 1.4.0. Because oversized counts were honoured, up to four blocks of plaintext could be truncated; the concrete accepted cases include a final block ending in 03 02 01 04 (four bytes removed), a zero count, and a 0x20 count on a 16-byte block (32 bytes removed). The vendor stresses that this fix does not address padding-oracle attacks: unauthenticated CBC/ECB remains malleable, so ciphertext must be MACed (e.g. HMAC) or AES-GCM used. A notable behavioural side effect is that ANSI X.923, ISO 10126 and XML Encryption padding, which previously 'worked' because only the last byte was read, now fail with default unpadding.

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 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 3.7 LOW

Network-delivered ciphertext (AV:N) with no auth (PR:N); AC:H because attacker needs ciphertext control and the malleability gain is small; integrity-only, so C:N/A:N and I:L.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/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
None
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Oct 29, 2026 - 19:18 EUVD
CVE Published
Oct 29, 2026 - 18:37 cve.org
LOW 3.7

DescriptionCVE.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 decipher.finish(), CBC and ECB modes, PKCS#7 padding to process the relevant input or security decision. node-forge validated only the final byte of PKCS#7 padding during CBC and ECB decryption and accepted zero, oversized, or mismatched padding bytes. Malformed ciphertext could consequently be accepted and up to four plaintext blocks could be silently removed, causing an integrity failure in applications that treated successful decryption as proof of valid padding. This issue is fixed in version 1.4.1.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
High
node-forge is an extremely popular npm crypto/TLS library, tens of millions of weekly downloads
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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 LOW
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
High

Priority Score

18
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +18
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-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-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

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