Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted out-of-range OID string
-
ExploitPass application's string-based OID authorization check
-
ExecutionoidToDer() truncates first arc to a trusted OID
-
ImpactEmit certificate/CSR/ASN.1 structure with substituted OID
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Integer overflow checks
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a specific application pattern on node-forge <= 1.4.0: the app must (1) accept an OID string from untrusted input, (2) check or authorize that string (e.g. against an OID allowlist), and (3) then encode it with asn1.oidToDer() when building certificates, CSRs, or other ASN.1 structures from user-supplied extension/attribute OIDs. The limiting factors that reduce real-world risk: the accept-check-then-encode flow must exist (applications that do not re-encode untrusted OIDs, or that validate the first two arcs, are unaffected); DER parsing is NOT affected; and there is no confidentiality or availability impact (integrity only). Per the advisory, the trigger is the specific out-of-range OID input (first arc not 0/1/2, or second arc >39 under arcs 0/1), which is precisely what the fix in 1.4.1 rejects. |
| Impact | This is a genuinely low-priority issue despite being worth patching. CVSS 3.1 scores it 3.7 (Low) with vector AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N - network-reachable and unauthenticated (PR:N) in principle, but AC:H reflects that exploitation depends on a specific application pattern rather than a default code path, and the only impact is Integrity Low (C:N/A:N). The vuln.today decision label is 'monitor', consistent with the low score. No EPSS probability was supplied and the CVE is not listed in CISA KEV, so there is no signal of active or widespread exploitation. A working proof-of-concept is published in the GHSA advisory (GHSA-4642-5mcj-2rqw), demonstrating that '0.42.840.113549.1.1.1' encodes to the DER of rsaEncryption; this confirms the bug is trivially reproducible but does not by itself indicate in-the-wild use. Note a signal discrepancy worth recording: the advisory's informational CVSS 4.0 vector (AV:N/AC:L/AT:P/.../VI:L, score 6.3, Moderate) rates higher than 3.1 purely because of 4.0's heavier integrity weighting - severity here follows the 3.1 Low rating. The practical risk hinges entirely on whether a given application accepts untrusted OID strings, authorizes them as strings, and then re-encodes them; most node-forge consumers do not, so for most deployments this is high-reach-in-theory but low-real-risk. It is also explicitly an incomplete-fix follow-up to CVE-2025-66030. |
| Exploit ScenarioDerived | An application accepts an OID string from an untrusted user (for example an extension or attribute OID when building a certificate or CSR), validates or authorizes that string against an allowlist, and then passes it to asn1.oidToDer() on node-forge <= 1.4.0. An attacker submits an out-of-range OID such as '0.42.840.113549.1.1.1' (or '4294977127.18.840.113549.1.1.1'), which passes the string check but wraps during encoding to the DER of a different, trusted OID (rsaEncryption, 1.2.840.113549.1.1.1), defeating the authorization decision. A runnable proof-of-concept is included in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 29, 2026
OID-based authorization bypass in node-forge through 1.4.0: asn1.oidToDer() fails to range-check the first two arcs of an OID string, so input such as 0.42.840.113549.1.1.1 is encoded as the DER of rsaEncryption (1.2.840.113549.1.1.1). This affects only applications that accept an OID string from untrusted input, check or authorize that string, and then re-encode it with node-forge when building certificates, CSRs or other ASN.1 structures; DER parsing is unaffected and there is no confidentiality or availability impact. node-forge 1.4.1 fixes the truncation, a public PoC reference exists in the GHSA (not verified as working exploit code), and this is a genuinely low-priority issue despite being worth patching (vuln.today: monitor).
RemediationAI
Upgrade to node-forge 1.4.1, which makes asn1.oidToDer() throw for OIDs with out-of-range first arcs and correctly encodes/decodes multi-byte first subidentifiers; see GHSA-4642-5mcj-2rqw and release v1.4.1. If upgrading is not immediately possible, the vendor's workaround is to validate OID strings from untrusted input before passing them to node-forge: the first arc must be 0, 1 or 2, and the second arc at most 39 when the first arc is 0 or 1. Applications that accept such OIDs will need to reject them rather than rely on node-forge's previous truncating behavior, and any OID authorization decision should be made on the validated string (and, where feasible, re-checked against the encoded DER). No other vendor workaround is listed.
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 ASN.1. Under X.690 section 8.19, the first two arcs of an object identifier are encoded as a single subidentifier, 40*arc1+arc2; the first arc must be 0, 1 or 2, and the second must be at most 39 when the first is 0 or 1. In lib/asn1.js, asn1.oidToDer() computed that value and wrote it with putByte(), which retains only the low 16 bits; an out-of-range first arc therefore wraps (CWE-190, integer overflow/wraparound) and emits the DER of a different, valid OID. The flaw is an incomplete fix for CVE-2025-66030 (GHSA-65ch-62r8-g69g, fixed in 1.3.2), which added a 32-bit check only for later arcs. The same code also encoded and decoded the first subidentifier as a single byte, so valid OIDs with a first subidentifier above 127 (e.g. 2.999) were incorrect; 1.4.1 rejects out-of-range first arcs and uses base-128 encoding for the first subidentifier, incorporating public PR #1148. Affected package is npm/node-forge <=1.4.0; CPE cpe:2.3:a:digitalbazaar:forge. The assessed CVSS 3.1 vector is AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N (3.7); the advisory notes CVSS 4.0 would rate it 6.3 but severity follows 3.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:H/PR:N/UI:N/S:U/C:N/I:L/A:N
AC:H because exploitation depends on the application's non-default accept-check-then-encode OID workflow; PR:N as the attacker only supplies an untrusted string; integrity-only impact (I:L), no C/A effect.
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, asn1.oidToDer() in lib/asn1.js did not range-check the first two arcs of an OID. An application that accepted an untrusted OID string, checked or authorized that string, and then encoded it with asn1.oidToDer() could emit DER representing a different, trusted OID from the one that was checked. DER parsing is not affected. 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.
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
Integer overflow occurs when an arithmetic operation produces a result that exceeds the maximum value a given integer type can store.
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
Regular expression denial of service in node-forge's pem.decode() allows remote, unauthenticated attackers to block the
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
EUVD-2026-113332
GHSA-4642-5mcj-2rqw
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB