---
id: "CVE-2026-119190"
kind: "vulnerability"
aliases: ["CVE-2026-119190"]
title: "node-forge: deprecated certificate extension lets a holder act as a CA"
severity: "high"
cvss: 7.4
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["certificates", "javascript", "node-forge", "node.js", "package", "tls"]
not_affected_if: ["no-chain-verification", "no-node-forge", "pinned-certificates"]
published_at: "2026-10-29T20:17:30+00:00"
first_seen_at: "2026-10-29T20:26:50+00:00"
updated_at: "2026-10-29T20:28:10+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-119190", "first_seen_at": "2026-10-29T20:26:50+00:00"}]
---

# node-forge: deprecated certificate extension lets a holder act as a CA

node-forge parses deprecated extension OIDs 2.5.29.10 and 2.5.29.13 as basicConstraints, and its certificate chain check uses the first one it finds. A certificate holder can place a permissive deprecated extension ahead of the real basicConstraints, so the chain is accepted as a CA and can issue certificates for arbitrary names, enabling server or client impersonation.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Find where `node-forge` appears in your lockfiles, for example `npm ls node-forge`
- Check the installed version, for example `npm ls node-forge` or `node -p "require('node-forge/package.json').version"`, and compare it to `1.4.1`
- Look for calls to `pki.verifyCertificateChain()` in code that trusts certificates issued by a CA your application controls or does not fully trust

## Fix

- `node-forge` `1.4.1`

## Timeline

- 2026-10-29T20:26:50+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-119190

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
