{"id":"CVE-2026-119190","kind":"vulnerability","aliases":["CVE-2026-119190"],"related":[],"title":"node-forge: deprecated certificate extension lets a holder act as a CA","description":"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.","summary":"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.","severity":"high","cvss":7.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["certificates","javascript","node-forge","node.js","package","tls"],"not_affected_if":["no-chain-verification","no-node-forge","pinned-certificates"],"how_to_check":"- Find where `node-forge` appears in your lockfiles, for example `npm ls node-forge`\n- 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`\n- 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`","status":"open","published_at":"2026-10-29T20:17:30+00:00","first_seen_at":"2026-10-29T20:26:50+00:00","triaged_at":"2026-10-29T20:28:10+00:00","updated_at":"2026-10-29T20:28:10+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-29T20:28:10Z","model":"claude-haiku-5-5","output":{"fix":"- `node-forge` `1.4.1`","reach":"network","title":"node-forge: deprecated certificate extension lets a holder act as a CA","impact":"high","summary":"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.","audience":"developers","category":"package","nicknames":[],"who_cares":["node.js","javascript","tls","certificates","node-forge"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Attacker-issued certificates impersonate servers or clients for arbitrary names.","analyst_note":"","how_to_check":"- Find where `node-forge` appears in your lockfiles, for example `npm ls node-forge`\n- 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`\n- Look for calls to `pki.verifyCertificateChain()` in code that trusts certificates issued by a CA your application controls or does not fully trust","plain_action":"","needs_analyst":false,"not_affected_if":["no-chain-verification","pinned-certificates","no-node-forge"],"who_is_affected":"Applications that use node-forge's pki.verifyCertificateChain() to validate certificates from a CA they trust, and that could receive certificates from a CA that copies extensions from signing requests. The risk depends on a trusted CA issuing a certificate with an attacker-supplied deprecated-OID extension, so applications with a private, fully controlled CA are less exposed. Projects that do not use node-forge for certificate chain validation can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000781,"input_tokens":4327,"output_tokens":696,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-119190':16A,19A '-2026':15A,18A '1.4.1':103C,213C '2.5.29.10':35B,111C '2.5.29.13':37B,113C '2.5.29.19':166C 'accept':69B,176C 'act':10A 'add':195C 'ahead':60B 'also':86C 'applic':132C 'arbitrari':78B,184C 'attack':140C 'attacker-suppli':139C 'basicconstraint':39B,64B,115C,167C 'ca':13A,72B,128C,149C,179C,194C 'call':87C 'carri':137C 'certif':5A,20B,42B,52B,76B,136C,154C,170C,175C,182C 'chain':43B,67B,206C 'check':44B 'client':83B,189C 'common':146C 'copi':150C 'could':172C 'cve':14A,17A 'deprec':4A,32B,58B,108C,143C,161C 'deprecated-oid':142C 'enabl':80B,186C 'exploit':125C 'extens':6A,33B,59B,109C,121C,145C,151C,162C,168C,198C 'find':50B 'first':47B,120C 'fix':210C 'forg':3A,24B,30B,85C,90C,106C,203C 'genuin':165C 'holder':9A,53B,171C 'imperson':84B,190C 'implement':94C 'issu':75B,134C,181C,193C,208C 'javascript':21B,100C 'keycertsign':200C 'keyusag':197C 'layer':97C 'let':7A 'name':79B,124C,185C 'nativ':93C 'node':2A,23B,29B,89C,105C,202C 'node-forg':1A,22B,28B,88C,104C,201C 'node.js':25B 'oid':34B,110C,144C 'one':48B 'packag':26B 'pars':31B,107C 'permiss':57B,160C 'pki.verifycertificatechain':117C 'place':55B,158C 'prior':101C 'real':63B 'reject':204C 'request':156C 'requir':126C 'secur':98C 'server':81B,187C 'sign':155C 'suppli':141C 'tls':27B 'transport':96C 'trust':129C 'use':45B,118C 'version':212C 'without':199C","nicknames":[],"mitigations":[],"who_affected":"Applications that use node-forge's pki.verifyCertificateChain() to validate certificates from a CA they trust, and that could receive certificates from a CA that copies extensions from signing requests. The risk depends on a trusted CA issuing a certificate with an attacker-supplied deprecated-OID extension, so applications with a private, fully controlled CA are less exposed. Projects that do not use node-forge for certificate chain validation can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-10-29T20:17:30+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-119190","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119190","severity":null,"published_at":"2026-10-29T20:17:30+00:00","modified_at":"2026-10-29T20:17:30+00:00","first_seen_at":"2026-10-29T20:26:50+00:00","fetched_at":"2026-10-29T20:26:50+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}