{"id":"CVE-2026-118775","kind":"vulnerability","aliases":["CVE-2026-118775"],"related":[],"title":"node-forge: OID encoding can emit a different trusted OID","description":"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.","summary":"Forge is a JavaScript TLS and crypto library. Before 1.4.1, asn1.oidToDer() did not range-check the first two OID arcs, so an application that checked an untrusted OID string and then encoded it could produce DER for a different, trusted OID.","severity":"low","cvss":3.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["javascript","node-forge","nodejs","package"],"not_affected_if":["der-parsing-only","no-untrusted-oid-input"],"how_to_check":"- Check the installed version with `npm ls node-forge`.\n- Search your code for calls to `asn1.oidToDer(` and see whether the OID string comes from untrusted input before it is checked.\n- DER parsing is not affected, per the description.","fix":"- node-forge: `1.4.1`","status":"open","published_at":"2026-10-29T19:17:20+00:00","first_seen_at":"2026-10-29T19:26:47+00:00","triaged_at":"2026-10-29T19:27:36+00:00","updated_at":"2026-10-29T19:27:36+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-29T19:27:36Z","model":"claude-haiku-5-5","output":{"fix":"- node-forge: `1.4.1`","reach":"unknown","title":"node-forge: OID encoding can emit a different trusted OID","impact":"medium","summary":"Forge is a JavaScript TLS and crypto library. Before 1.4.1, asn1.oidToDer() did not range-check the first two OID arcs, so an application that checked an untrusted OID string and then encoded it could produce DER for a different, trusted OID.","audience":"developers","category":"package","nicknames":[],"who_cares":["node-forge","javascript","nodejs"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"encoded OID could authorize a different trusted identifier","analyst_note":"","how_to_check":"- Check the installed version with `npm ls node-forge`.\n- Search your code for calls to `asn1.oidToDer(` and see whether the OID string comes from untrusted input before it is checked.\n- DER parsing is not affected, per the description.","plain_action":"","needs_analyst":false,"not_affected_if":["der-parsing-only","no-untrusted-oid-input"],"who_is_affected":"Only applications that take an OID string from untrusted input, check or authorize it, and then encode it with asn1.oidToDer() are exposed, since the check happens on a different value than the one emitted. DER parsing is not affected. Projects that only parse certificates or do not call oidToDer() on external input can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000685,"input_tokens":4188,"output_tokens":532,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-118775':14A,17A '-2026':13A,16A '1.4.1':33B,84C,144C 'accept':103C 'affect':137C 'also':67C 'applic':47B,101C 'arc':44B,96C 'asn1.oidtoder':34B,85C,118C 'author':110C 'call':68C 'check':39B,49B,92C,108C,132C 'could':58B,119C 'crypto':30B 'cve':12A,15A 'der':60B,121C,133C 'differ':9A,63B,124C 'emit':7A,120C 'encod':5A,56B,115C 'first':41B,94C 'fix':141C 'forg':3A,21B,24B,66C,71C 'implement':75C 'issu':139C 'javascript':18B,27B,81C 'layer':78C 'lib/asn1.js':87C 'librari':31B 'nativ':74C 'node':2A,20B,70C 'node-forg':1A,19B,69C 'nodej':22B 'oid':4A,11A,43B,52B,65B,99C,106C,126C 'one':129C 'packag':23B 'pars':134C 'prior':82C 'produc':59B 'rang':38B,91C 'range-check':37B,90C 'repres':122C 'secur':79C 'string':53B,107C,112C 'tls':28B 'transport':77C 'trust':10A,64B,125C 'two':42B,95C 'untrust':51B,105C 'version':143C","nicknames":[],"mitigations":[],"who_affected":"Only applications that take an OID string from untrusted input, check or authorize it, and then encode it with asn1.oidToDer() are exposed, since the check happens on a different value than the one emitted. DER parsing is not affected. Projects that only parse certificates or do not call oidToDer() on external input can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-10-29T19:17:20+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-118775","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-118775","severity":null,"published_at":"2026-10-29T19:17:20+00:00","modified_at":"2026-10-29T19:17:20+00:00","first_seen_at":"2026-10-29T19:26:47+00:00","fetched_at":"2026-10-29T19:26:47+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"}