Free AI Safety Workshop — in collaboration with explainx.aiSave your seat
AgentbeamBeta
Open-source package vulnerability · Node.js

CVE-2026-106074: Node.js crypto.randomUUID() and randomInt() entropy caches are saved into user-land startup snapshots and SEAs

medium

CVE-2026-106074 is a medium-severity Node.js crypto flaw that only matters if you ship a user-land startup snapshot or a single executable application (SEA). Unused entropy cached for crypto.randomUUID() and crypto.randomInt() was saved into the snapshot, so every process started from it produced the same first UUIDs and random integers. Fix it with Node.js 22.23.4, 24.22.1 or 26.12.1 and rebuild the snapshot or SEA.

Published Oct 21, 2026 · Analysis Oct 21, 2026

What an attacker can do

To make crypto.randomUUID() and crypto.randomInt() fast, Node.js fills a small cache of random bytes ahead of time and hands values out from it. A startup snapshot captures the JavaScript heap after your setup code runs, so processes start faster. If that setup code called randomUUID() or randomInt() even once, the partly used cache went into the snapshot. Every process deserialized from it started with the same leftover bytes and returned the same sequence of values until the cache ran out.

In practice, values that should be unique and unguessable repeat across machines and restarts: request IDs, idempotency keys, session or invitation tokens, temporary file names, or random choices used for security. An attacker who obtains one copy of the SEA binary or snapshot, or who observes the first values from one instance, can predict the values other instances will produce. Collisions also break logic that assumes UUIDs are unique. The fix clears the caches after user serialization callbacks and before user deserialization callbacks, which also covers caches refilled by microtasks, next ticks or exit handlers.

Who is affected

Affected: Node.js 22.x before 22.23.4, 24.x before 24.22.1 and 26.x before 26.12.1, but only for processes started from a user-land startup snapshot (built with --build-snapshot or the node:v8 startupSnapshot API) or an SEA built with a snapshot. Plain node app.js is not affected. To check:

node -v
grep -rn "build-snapshot\|startupSnapshot\|useSnapshot" --include=*.json --include=*.js --include=*.mjs .

The SEA configuration file shows useSnapshot when a snapshot is embedded.

How to fix it

Upgrade the build toolchain to Node.js 22.23.4, 24.22.1 or 26.12.1, then rebuild every snapshot blob and every SEA binary. Upgrading the runtime alone does not fix an SEA, because the snapshot is baked into the file you ship.

After rebuilding, rotate anything security-relevant that affected binaries generated with randomUUID() or randomInt() early in their life, such as long-lived tokens or keys.

How to tell if you were hit

Look for duplicate UUIDs or random IDs across instances in logs and databases, especially among the first values each process produced after start. Unique-constraint violations on UUID columns after deploys of an SEA build are a strong sign. Comparing the first few request IDs from two freshly started instances shows the problem directly.

Original advisory

From the National Vulnerability Database. This product uses the NVD API but is not endorsed or certified by the NVD.

Node.js keeps caches of pre-generated random data for crypto.randomUUID() and crypto.randomInt(). Unused cache entries were saved into user-land startup snapshots and single executable applications, so every process started from the same snapshot replayed the same random values. The fix clears the caches around snapshot serialization and deserialization. Affected: Node.js 22.x before 22.23.4, 24.x before 24.22.1 and 26.x before 26.12.1. Fixed in Node.js 22.23.4, 24.22.1 and 26.12.1, released October 21, 2026.

Credited to gesposito.

Questions

Am I affected by CVE-2026-106074 if I do not use snapshots?

No. The flaw only affects processes started from a user-land startup snapshot or a single executable application built with one. A normal node app.js process fills its random caches fresh at startup.

Is upgrading Node.js enough to fix CVE-2026-106074?

Not for SEAs or prebuilt snapshot blobs. The repeated values are stored inside the snapshot you built, so you must rebuild it with a fixed Node.js and redeploy. Rotate tokens that affected builds generated.

References

How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. The analysis is written by an AI model from the sources listed above and checked by automated rules before it is published. Check versions against the vendor's advisory before you act. Methodology

Coverage on the Beam blog

More Node.js vulnerabilities

All Node.js entries