{"id":"VND-nodejs-december-2025-security-releases","kind":"vulnerability","aliases":[],"related":["CVE-2025-55130","CVE-2025-55131","CVE-2025-55132","CVE-2025-59464","CVE-2025-59465","CVE-2025-59466","CVE-2026-21636","CVE-2026-21637"],"title":"Node.js: Tuesday, January 13, 2026 Security Releases","description":"Security releases available\nUpdates are now available for the 25.x, 24.x, 22.x, and 20.x Node.js release lines\nto address:\n3 high severity issues.\n4 medium severity issues.\n1 low severity issue.\nThis security release includes the following dependency updates to address public vulnerabilities:\nc-ares (1.34.6) on 20.x, 22.x, 24.x, 25.x\nundici (6.23.0, 7.18.0) on 20.x, 22.x, 24.x, 25.x\nTimeout-based race conditions make Uint8Array/Buffer.alloc non-zerofilled (CVE-2025-55131) - (High)\nA flaw in Node.js&#x27;s buffer allocation logic can expose uninitialized memory when allocations are interrupted,\nwhen using the vm module with the timeout option. Under specific timing conditions, buffers allocated\nwith Buffer.alloc and other TypedArray instances like Uint8Array may contain leftover data from previous\noperations, allowing in-process secrets like tokens or passwords to leak or causing data corruption.\nWhile exploitation typically requires precise timing or in-process code execution, it can become remotely\nexploitable when untrusted input influences workload and timeouts, leading to potential confidentiality and\nintegrity impact.\nImpact:\nThis vulnerability affects all users in active release lines: 20.x, 22.x, 24.x, 25.x\nThank you, to Nikita Skovoroda for reporting and fixing this vulnerability.\nBypass File System Permissions using crafted symlinks (CVE-2025-55130) - (High)\nA flaw in Node.js’s Permissions model allows attackers to bypass --allow-fs-read and --allow-fs-write\nrestrictions using crafted relative symlink paths. By chaining directories and symlinks, a script granted\naccess only to the current directory can escape the allowed path and read sensitive files. This breaks the\nexpected isolation guarantees and enables arbitrary file read/write, leading to potential system compromise.\nImpact:\nThis vulnerability affects users of the permission model on Node.js 20.x, 22.x, 24.x, and 25.x.\nThank you, to natann for reporting this vulnerability and thank you RafaelGSS for fixing it.\nNode.js HTTP/2 server crashes with unhandled error when receiving malformed HEADERS frame (CVE-2025-59465) - (High)\nA malformed HTTP/2 HEADERS frame with oversized, invalid HPACK data can cause Node.js to crash by\ntriggering an unhandled TLSSocket error ECONNRESET . Instead of safely closing the connection, the\nprocess crashes, enabling a remote denial of service. This primarily affects applications that do not\nattach explicit error handlers to secure sockets, for example:\nserver . on ( &#x27; secureConnection &#x27; , socket =&gt; {\nsocket . on ( &#x27; error &#x27; , err =&gt; {\nconsole . log ( err ) ;\n} ) ;\n} ) ; JavaScript Copy to clipboard\nImpact:\nThis vulnerability affects all users in active release lines: 20.x, 22.x, 24.x, and 25.x\nThank you, to dantt for reporting this vulnerability and thank you RafaelGSS for fixing it.\nUncatchable &quot;Maximum call stack size exceeded&quot; error on Node.js via async_hooks leads to process crashes bypassing error handlers (CVE-2025-59466) - (Medium)\nWe have identified a bug in Node.js error handling where &quot;Maximum call stack size exceeded&quot; errors\nbecome uncatchable when async_hooks.createHook() is enabled.\nInstead of reaching process.on(&#x27;uncaughtException&#x27;) , the process terminates, making the crash unrecoverable.\nApplications that rely on AsyncLocalStorage (v22, v20) or async_hooks.createHook() (v24, v22, v20) become\nvulnerable to denial-of-service crashes triggered by deep recursion under specific conditions.\nThis patch improves recoverability in one edge case, but it does not remove the broader risk.\nRecovery from space exhaustion is unspecified, best‑effort behavior and is not a reliable basis for\navailability or security. In availability‑critical paths where recursion depth may be influenced\nby untrusted input, prefer input validation and designs that bound or avoid recursion rather than\ndepending on stack space exhaustion behavior or the lack of tail‑call optimizations in\nthe runtime/engine. See this blog post\nfor details.\nImpact:\nThis vulnerability affects all users in active release lines: 20.x, 22.x, 24.x, and 25.x\nThank you, to Andrew MacPherson (AndrewMohawk) for identifying &amp; aaron_vercel for reporting this vulnerability and thank you mcollina for fixing it.\nMemory leak that enables remote Denial of Service against applications processing TLS client certificates (CVE-2025-59464) - (Medium)\nA memory leak in Node.js’s OpenSSL integration occurs when converting X.509 certificate fields to UTF-8\nwithout freeing the allocated buffer. When applications call socket.getPeerCertificate(true) ,\neach certificate field leaks memory, allowing remote clients to trigger steady memory growth through repeated\nTLS connections. Over time this can lead to resource exhaustion and denial of service.\nImpact:\nThis vulnerability was already fixed on Node.js 24.12.0. It has no impact on\nother active release lines.\nThis public CVE is only issued for the affected 24.x releases.\nThank you, to giant_anteater for reporting this vulnerability and thank you RafaelGSS for fixing it.\nNode.js permission model bypass via unchecked Unix Domain Socket connections (UDS) (CVE-2026-21636) - (Medium)\nA flaw in Node.js&#x27;s permission model allows Unix Domain Socket (UDS) connections to bypass network restrictions\nwhen --permission is enabled. Even without --allow-net , attacker-controlled inputs\n(such as URLs or socketPath options) can connect to arbitrary local sockets via net, tls, or undici/fetch.\nThis breaks the intended security boundary of the permission model and enables access to privileged local services,\npotentially leading to privilege escalation, data exposure, or local code execution.\nIn the moment of this vulnerability, network permissions ( --allow-net ) are still in the experimental phase.\nImpact:\nThe issue affects users of the Node.js permission model on Node.js 25.x.\nThank you, to mufeedvh for reporting this vulnerability and thank you RafaelGSS for fixing it.\nTLS PSK/ALPN Callback Exceptions Bypass Error Handlers, Causing DoS and FD Leak (CVE-2026-21637) - (Medium)\nA flaw in Node.js TLS error handling allows remote attackers to crash or exhaust resources of a TLS server when\npskCallback or ALPNCallback are in use. Synchronous exceptions thrown during these callbacks bypass standard\nTLS error handling paths (tlsClientError and error), causing either immediate process termination or silent file\ndescriptor leaks that eventually lead to denial of service. Because these callbacks process attacker-controlled\ninput during the TLS handshake, a remote client can repeatedly trigger the issue.\nImpact:\nThis vulnerability affects TLS servers using PSK or ALPN callbacks across Node.js versions where these callbacks\nthrow without being safely wrapped.\nThank you, to 0xmaxhax for reporting this vulnerability and thank you mcollina for fixing it.\nfs.futimes() Bypasses Read-Only Permission Model (CVE-2025-55132) - (Low)\nA flaw in Node.js&#x27;s permission model allows a file&#x27;s access and modification timestamps to be changed\nvia futimes() even when the process has only read permissions.\nUnlike utimes() , futimes() does not apply the expected write-permission checks, which means file\nmetadata can be modified in read-only directories. This behavior could be used to alter timestamps in\nways that obscure activity, reducing the reliability of logs.\nImpact:\nThis vulnerability affects users of the permission model on Node.js 20.x, 22.x, 24.x, and 25.x.\nThank you, to oriotie for reporting this vulnerability and thank you RafaelGSS for fixing it.\nDownloads and release details\nNode.js 20.20.0\nNode.js 22.22.0\nNode.js 24.13.0\nNode.js 25.3.0\nSummary\nThe Node.js project will release new versions of the 25.x, 24.x, 22.x, and 20.x\nreleases lines on or shortly after, Monday, December 15, 2025 in order to address:\n3 high severity issues.\n1 low severity issue.\n1 medium severity issue.\nImpact\nThe 25.x release line of Node.js is vulnerable to 3 high severity issues, 1 low severity issue.\nThe 24.x release line of Node.js is vulnerable to 3 high severity issues, 1 low severity issue, 1 medium severity issue.\nThe 22.x release line of Node.js is vulnerable to 3 high severity issues, 1 low severity issue, 1 medium severity issue.\nThe 20.x release line of Node.js is vulnerable to 3 high severity issues, 1 low severity issue, 1 medium severity issue.\nIt&#x27;s important to note that End-of-Life versions are always affected when a security release occurs.\nTo ensure your system&#x27;s security, please use an up-to-date version as outlined in our\nRelease Schedule .\nRelease timing\nReleases will be available on, or shortly after, Monday, December 15, 2025.\nContact and future updates\nThe current Node.js security policy can be found at https://nodejs.org/en/security/ .\nPlease follow the process outlined in https://github.com/nodejs/node/blob/master/SECURITY.md if you wish to report a vulnerability in Node.js.\nSubscribe to the low-volume announcement-only nodejs-sec mailing list at https://groups.google.com/forum/#!forum/nodejs-sec to stay up to date on security vulnerabilities and security-related releases of Node.js and the projects maintained in the nodejs GitHub organization. Previous Mitigating Denial-of-Service Vulnerability from Unrecoverable Stack Space Exhaustion for React, Next.js, and APM Users Next Tuesday, July 15, 2025 Security Releases","summary":"Node.js 20.x, 22.x, 24.x and 25.x receive patched releases covering several flaws, including a file system permission bypass via symlinks, an HTTP/2 crash from malformed HEADERS frames, and a buffer allocation issue that can expose uninitialized memory. An attacker can bypass permission restrictions, crash a server remotely, or read leftover in-process data depending on the flaw.","severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"node","fixed":[],"affected":"","ecosystem":"node"},{"name":"node","fixed":[],"affected":"20.x","ecosystem":"node"},{"name":"node","fixed":[],"affected":"22.x","ecosystem":"node"},{"name":"node","fixed":[],"affected":"24.x","ecosystem":"node"},{"name":"node","fixed":[],"affected":"25.x","ecosystem":"node"}],"ecosystems":["node"],"tags":["http2-servers","node","node.js","runtime","self-hosted","tls-servers"],"not_affected_if":["no-http2","no-tls-callbacks","permission-model-unused"],"how_to_check":"- Run `node --version` and compare against the fixed versions: `20.20.0`, `22.22.0`, `24.13.0`, `25.3.0`\n- Check whether the permission model is in use (`--permission`, `--allow-fs-read`, `--allow-fs-write`)\n- Check whether the app uses `http2` servers or `tls` with `pskCallback`/`ALPNCallback`, or `async_hooks`/`AsyncLocalStorage`","fix":"- Upgrade Node.js to `20.20.0`, `22.22.0`, `24.13.0` or `25.3.0` for your release line\n- Upgrade bundled undici to `6.23.0` or `7.18.0` and c-ares to `1.34.6` where you vendor them\n- End-of-life Node.js lines are affected and need moving to a supported release","status":"open","published_at":"2026-01-13T00:00:00+00:00","first_seen_at":"2026-10-23T19:13:00+00:00","triaged_at":"2026-10-25T05:37:33+00:00","updated_at":"2026-10-25T05:37:33+00:00","category":"runtime","confidence":0.8,"triage":{"at":"2026-10-25T05:37:33Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Node.js to `20.20.0`, `22.22.0`, `24.13.0` or `25.3.0` for your release line\n- Upgrade bundled undici to `6.23.0` or `7.18.0` and c-ares to `1.34.6` where you vendor them\n- End-of-life Node.js lines are affected and need moving to a supported release","reach":"internet","title":"Node.js: January 2026 security releases fix three high-severity flaws","impact":"high","summary":"Node.js 20.x, 22.x, 24.x and 25.x receive patched releases covering several flaws, including a file system permission bypass via symlinks, an HTTP/2 crash from malformed HEADERS frames, and a buffer allocation issue that can expose uninitialized memory. An attacker can bypass permission restrictions, crash a server remotely, or read leftover in-process data depending on the flaw.","category":"runtime","nicknames":[],"who_cares":["node.js","self-hosted","http2-servers","tls-servers"],"confidence":0.8,"needs_auth":"unknown","worst_case":"Remote crash of server processes; file reads outside permitted paths; leftover memory exposed","analyst_note":"Check nodejs.org advisory page for per-CVE affected version ranges and exploit status before publishing.","how_to_check":"- Run `node --version` and compare against the fixed versions: `20.20.0`, `22.22.0`, `24.13.0`, `25.3.0`\n- Check whether the permission model is in use (`--permission`, `--allow-fs-read`, `--allow-fs-write`)\n- Check whether the app uses `http2` servers or `tls` with `pskCallback`/`ALPNCallback`, or `async_hooks`/`AsyncLocalStorage`","needs_analyst":true,"not_affected_if":["permission-model-unused","no-http2","no-tls-callbacks"],"who_is_affected":"Any team running Node.js on the listed release lines is affected; the HTTP/2 crash and TLS callback issues matter most for servers accepting untrusted network connections. The file system and Unix socket permission bypasses matter only for applications that rely on the Node.js permission model as a security boundary. Teams on unlisted or already-patched releases, such as 24.12.0 for the 24.x TLS memory leak, can skip the matching entries.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.001103,"input_tokens":6812,"output_tokens":843,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2025':178C,310C,426C,551C '-55130':311C '-55131':179C '-59465':427C '-59466':552C '1':126C '1.34.6':145C '13':4A '20':34B,111C,147C,159C,283C,389C,507C '2025':12A '2026':5A '22':36B,108C,149C,161C,285C,391C,509C '24':38B,106C,151C,163C,287C,393C,511C '25':41B,104C,153C,165C,289C,396C,514C '3':118C '4':122C '6.23.0':156C '7.18.0':157C 'access':347C 'activ':280C,504C 'address':117C,139C 'affect':276C,381C,468C,500C 'alloc':67B,187C,194C,211C 'allow':227C,320C,325C,330C,356C 'allow-fs-read':324C 'allow-fs-writ':329C 'applic':469C,588C 'arbitrari':370C 'are':144C 'async':541C 'async_hooks.createhook':573C,596C 'asynclocalstorag':592C 'attach':473C 'attack':75B,321C 'avail':97C,101C,647C,651C 'avoid':671C 'base':169C 'basi':645C 'becom':256C,570C,600C 'behavior':639C,680C 'best':637C 'bound':669C 'break':363C 'broader':629C 'buffer':66B,186C,210C 'buffer.alloc':213C 'bug':558C 'bypass':54B,77B,302C,323C,547C 'c':143C 'c-are':142C 'call':533C,565C,686C 'case':622C 'caus':239C,440C 'chain':340C 'clipboard':496C 'close':454C 'code':252C 'compromis':377C 'condit':171C,209C,614C 'confidenti':269C 'connect':456C 'consol':490C 'contain':221C 'copi':494C 'corrupt':241C 'cover':46B 'craft':307C,335C 'crash':59B,80B,416C,443C,459C,546C,586C,607C 'critic':652C 'current':351C 'cve':177C,309C,425C,550C 'dantt':519C 'data':90B,223C,240C,438C 'december':11A 'deep':610C 'denial':463C,604C 'denial-of-servic':603C 'depend':91B,136C,675C 'depth':656C 'design':667C 'directori':341C,352C 'econnreset':450C 'edg':621C 'effort':638C 'enabl':369C,460C,575C 'err':489C,492C 'error':419C,449C,475C,488C,537C,548C,561C,569C 'escap':354C 'exampl':481C 'exceed':536C,568C 'execut':253C 'exhaust':634C,679C 'expect':365C 'explicit':474C 'exploit':243C,258C 'expos':71B,190C 'file':51B,303C,361C,371C 'fix':299C,411C,529C 'flaw':48B,94B,182C,314C 'follow':135C 'frame':63B,424C,433C 'fs':326C,331C 'grant':346C 'guarante':367C 'handl':562C 'handler':476C,549C 'header':62B,423C,432C 'high':119C,180C,312C,428C 'hook':542C 'host':29B 'hpack':437C 'http/2':58B,414C,431C 'http2':22B 'http2-servers':21B 'identifi':556C 'impact':272C,273C,378C,497C 'improv':617C 'in-process':87B,228C,249C 'includ':49B,133C 'influenc':262C,659C 'input':261C,662C,664C 'instanc':217C 'instead':451C,576C 'integr':271C 'interrupt':196C 'invalid':436C 'isol':366C 'issu':68B,121C,125C,129C 'januari':3A 'javascript':493C 'lack':683C 'lead':266C,373C,543C 'leak':237C 'leftov':86B,222C 'like':218C,232C 'line':115C,282C,506C 'log':491C 'logic':188C 'low':127C 'make':172C,584C 'malform':61B,422C,430C 'maximum':532C,564C 'may':220C,657C 'medium':123C,553C 'memori':73B,192C 'model':319C,386C 'modul':201C 'natann':401C 'nikita':294C 'node':16A,17A,18A,19A,20A,24B 'node.js':1A,25B,33B,113C,184C,316C,388C,413C,441C,539C,560C 'nodejs':10A 'non':175C 'non-zerofil':174C 'one':620C 'oper':226C 'optim':687C 'option':205C 'overs':435C 'password':235C 'patch':44B,616C 'path':338C,357C,653C 'permiss':53B,78B,305C,318C,385C 'potenti':268C,375C 'precis':246C 'prefer':663C 'previous':225C 'primarili':467C 'process':89B,230C,251C,458C,545C,582C 'process.on':579C 'public':140C 'race':170C 'rafaelgss':409C,527C 'rather':673C 'reach':578C 'read':85B,327C,359C 'read/write':372C 'receiv':43B,421C 'recover':618C 'recoveri':631C 'recurs':611C,655C,672C 'relat':336C 'releas':7A,45B,96C,114C,132C,281C,505C 'releases':15A 'reli':590C 'reliabl':644C 'remot':83B,257C,462C 'remov':627C 'report':297C,403C,521C 'requir':245C 'restrict':79B,333C 'risk':630C 'runtim':26B,690C 'safe':453C 'script':345C 'secret':231C 'secur':6A,95C,131C,478C,649C 'secureconnect':484C 'security':14A 'security-releases':13A 'self':28B 'self-host':27B 'sensit':360C 'server':23B,32B,82B,415C,482C 'servic':465C,606C 'sever':47B,120C,124C,128C 'size':535C,567C 'skovoroda':295C 'socket':479C,485C,486C 'space':633C,678C 'specif':207C,613C 'stack':534C,566C,677C 'symlink':56B,308C,337C,343C 'system':52B,304C,376C 'tail':685C 'termin':583C 'thank':291C,398C,407C,516C,525C 'time':208C,247C 'timeout':168C,204C,265C 'timeout-bas':167C 'tls':31B 'tls-server':30B 'tlssocket':448C 'token':233C 'trigger':445C,608C 'tuesday':2A 'typedarray':216C 'typic':244C 'uint8array':219C 'uint8array/buffer.alloc':173C 'uncatch':531C,571C 'uncaughtexcept':580C 'undici':155C 'unhandl':418C,447C 'uniniti':72B,191C 'unrecover':587C 'unspecifi':636C 'untrust':260C,661C 'updat':98C,137C 'use':198C,306C,334C 'user':278C,382C,502C 'v20':594C,599C 'v22':593C,598C 'v24':597C 'valid':665C 'via':55B,540C 'vm':200C 'vnd':9A 'vnd-nodejs-december':8A 'vulner':141C,275C,301C,380C,405C,499C,523C,601C 'workload':263C 'write':332C 'x':35B,37B,39B,42B,105C,107C,109C,112C,148C,150C,152C,154C,160C,162C,164C,166C,284C,286C,288C,290C,390C,392C,394C,397C,508C,510C,512C,515C 'zerofil':176C","nicknames":[],"mitigations":[],"who_affected":"Any team running Node.js on the listed release lines is affected; the HTTP/2 crash and TLS callback issues matter most for servers accepting untrusted network connections. The file system and Unix socket permission bypasses matter only for applications that rely on the Node.js permission model as a security boundary. Teams on unlisted or already-patched releases, such as 24.12.0 for the 24.x TLS memory leak, can skip the matching entries.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-01-13T00:00:00+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nodejs","external_id":"december-2025-security-releases","url":"https://nodejs.org/en/blog/vulnerability/december-2025-security-releases","severity":"critical","published_at":"2026-01-13T00:00:00+00:00","modified_at":null,"first_seen_at":"2026-10-23T19:13:00+00:00","fetched_at":"2026-10-25T12:13:10+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"}