Search

Find a vulnerability

Search criteria ⓘ Use this form to refine search results.
Full-text search supports keyword queries with ranking and filtering.
You can combine vendor, product, and sources to narrow results.
Enable “Apply ordering” to sort by date instead of relevance.

    2 vulnerabilities found for pbkdf2 by browserify

    CVE-2026-102414 (GCVE-0-2026-102414)

    Vulnerability from nvd – Published: 2026-09-29 03:42 – Updated: 2026-09-29 03:42
    VLAI
    Title
    pbkdf2 rehashes long passwords on every iteration, enabling denial of service
    Summary
    pbkdf2 through 3.1.6 re-hashes passwords longer than the digest's block size on every iteration in its JavaScript fallback (lib/sync.js). A password longer than the block size (64 bytes, or 128 bytes for sha384 and sha512) is passed to HMAC as the key on every iteration, and HMAC hashes such keys in full each time. Cost is therefore O(iterations × password length), and a long password can block the event loop. The fallback is used by pbkdf2Sync and pbkdf2 on Node.js before 0.12, on Bun (1.0.0 through 1.1.34, and 1.2.6 and later), and on Deno 2.9.0 and later, because their native pbkdf2Sync fails the library's feature check. It is also used when lib/sync.js is imported directly. Node.js 0.12 and later, and browser builds (which use lib/sync-browser.js), are not affected. Applications that enforce a reasonable maximum password length are not meaningfully affected.
    CWE
    • CWE-400 - Uncontrolled Resource Consumption
    Impacted products
    Vendor Product Version
    browserify pbkdf2 Affected: 0 , ≤ 3.1.6 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "cna": {
          "affected": [
            {
              "collectionURL": "https://www.npmjs.com",
              "defaultStatus": "unaffected",
              "packageName": "pbkdf2",
              "product": "pbkdf2",
              "programFiles": [
                "lib/sync.js"
              ],
              "programRoutines": [
                {
                  "name": "pbkdf2Sync"
                },
                {
                  "name": "pbkdf2"
                }
              ],
              "repo": "https://github.com/browserify/pbkdf2",
              "vendor": "browserify",
              "versions": [
                {
                  "lessThanOrEqual": "3.1.6",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Steve Thomas (Sc00bz)"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Jordan Harband (ljharb)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003epbkdf2 through 3.1.6 re-hashes passwords longer than the digest\u0027s block size on every iteration in its JavaScript fallback (lib/sync.js). A password longer than the block size (64 bytes, or 128 bytes for sha384 and sha512) is passed to HMAC as the key on every iteration, and HMAC hashes such keys in full each time. Cost is therefore O(iterations \u00d7 password length), and a long password can block the event loop. The fallback is used by pbkdf2Sync and pbkdf2 on Node.js before 0.12, on Bun (1.0.0 through 1.1.34, and 1.2.6 and later), and on Deno 2.9.0 and later, because their native pbkdf2Sync fails the library\u0027s feature check. It is also used when lib/sync.js is imported directly. Node.js 0.12 and later, and browser builds (which use lib/sync-browser.js), are not affected. Applications that enforce a reasonable maximum password length are not meaningfully affected.\u003c/p\u003e"
                }
              ],
              "value": "pbkdf2 through 3.1.6 re-hashes passwords longer than the digest\u0027s block size on every iteration in its JavaScript fallback (lib/sync.js). A password longer than the block size (64 bytes, or 128 bytes for sha384 and sha512) is passed to HMAC as the key on every iteration, and HMAC hashes such keys in full each time. Cost is therefore O(iterations \u00d7 password length), and a long password can block the event loop. The fallback is used by pbkdf2Sync and pbkdf2 on Node.js before 0.12, on Bun (1.0.0 through 1.1.34, and 1.2.6 and later), and on Deno 2.9.0 and later, because their native pbkdf2Sync fails the library\u0027s feature check. It is also used when lib/sync.js is imported directly. Node.js 0.12 and later, and browser builds (which use lib/sync-browser.js), are not affected. Applications that enforce a reasonable maximum password length are not meaningfully affected."
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "exploitMaturity": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            },
            {
              "cvssV3_1": {
                "attackComplexity": "HIGH",
                "attackVector": "NETWORK",
                "availabilityImpact": "LOW",
                "baseScore": 3.7,
                "baseSeverity": "LOW",
                "confidentialityImpact": "NONE",
                "integrityImpact": "NONE",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L",
                "version": "3.1"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-400",
                  "description": "CWE-400 Uncontrolled Resource Consumption",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-29T03:42:04.950Z",
            "orgId": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
            "shortName": "harborist"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory"
              ],
              "url": "https://github.com/browserify/pbkdf2/security/advisories/GHSA-477h-4r7f-fvrx"
            },
            {
              "tags": [
                "issue-tracking"
              ],
              "url": "https://github.com/browserify/pbkdf2/issues/82"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/browserify/pbkdf2/commit/493d8d8"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eUpgrade to a version of pbkdf2 that includes the fix, which pre-hashes passwords longer than the digest block size once before iterating, or, enforce literally any reasonable maximum password length before calling pbkdf2.\u003c/p\u003e"
                }
              ],
              "value": "Upgrade to a version of pbkdf2 that includes the fix, which pre-hashes passwords longer than the digest block size once before iterating, or, enforce literally any reasonable maximum password length before calling pbkdf2."
            }
          ],
          "source": {
            "advisory": "GHSA-477h-4r7f-fvrx",
            "discovery": "EXTERNAL"
          },
          "title": "pbkdf2 rehashes long passwords on every iteration, enabling denial of service",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eEnforce a maximum password length (for example, 1024 bytes) before calling pbkdf2, or call the runtime\u0027s native crypto.pbkdf2Sync directly.\u003c/p\u003e"
                }
              ],
              "value": "Enforce a maximum password length (for example, 1024 bytes) before calling pbkdf2, or call the runtime\u0027s native crypto.pbkdf2Sync directly."
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
        "assignerShortName": "harborist",
        "cveId": "CVE-2026-102414",
        "datePublished": "2026-09-29T03:42:04.950Z",
        "dateReserved": "2026-09-29T02:06:16.561Z",
        "dateUpdated": "2026-09-29T03:42:04.950Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-102414 (GCVE-0-2026-102414)

    Vulnerability from cvelistv5 – Published: 2026-09-29 03:42 – Updated: 2026-09-29 03:42
    VLAI
    Title
    pbkdf2 rehashes long passwords on every iteration, enabling denial of service
    Summary
    pbkdf2 through 3.1.6 re-hashes passwords longer than the digest's block size on every iteration in its JavaScript fallback (lib/sync.js). A password longer than the block size (64 bytes, or 128 bytes for sha384 and sha512) is passed to HMAC as the key on every iteration, and HMAC hashes such keys in full each time. Cost is therefore O(iterations × password length), and a long password can block the event loop. The fallback is used by pbkdf2Sync and pbkdf2 on Node.js before 0.12, on Bun (1.0.0 through 1.1.34, and 1.2.6 and later), and on Deno 2.9.0 and later, because their native pbkdf2Sync fails the library's feature check. It is also used when lib/sync.js is imported directly. Node.js 0.12 and later, and browser builds (which use lib/sync-browser.js), are not affected. Applications that enforce a reasonable maximum password length are not meaningfully affected.
    CWE
    • CWE-400 - Uncontrolled Resource Consumption
    Impacted products
    Vendor Product Version
    browserify pbkdf2 Affected: 0 , ≤ 3.1.6 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "cna": {
          "affected": [
            {
              "collectionURL": "https://www.npmjs.com",
              "defaultStatus": "unaffected",
              "packageName": "pbkdf2",
              "product": "pbkdf2",
              "programFiles": [
                "lib/sync.js"
              ],
              "programRoutines": [
                {
                  "name": "pbkdf2Sync"
                },
                {
                  "name": "pbkdf2"
                }
              ],
              "repo": "https://github.com/browserify/pbkdf2",
              "vendor": "browserify",
              "versions": [
                {
                  "lessThanOrEqual": "3.1.6",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Steve Thomas (Sc00bz)"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Jordan Harband (ljharb)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003epbkdf2 through 3.1.6 re-hashes passwords longer than the digest\u0027s block size on every iteration in its JavaScript fallback (lib/sync.js). A password longer than the block size (64 bytes, or 128 bytes for sha384 and sha512) is passed to HMAC as the key on every iteration, and HMAC hashes such keys in full each time. Cost is therefore O(iterations \u00d7 password length), and a long password can block the event loop. The fallback is used by pbkdf2Sync and pbkdf2 on Node.js before 0.12, on Bun (1.0.0 through 1.1.34, and 1.2.6 and later), and on Deno 2.9.0 and later, because their native pbkdf2Sync fails the library\u0027s feature check. It is also used when lib/sync.js is imported directly. Node.js 0.12 and later, and browser builds (which use lib/sync-browser.js), are not affected. Applications that enforce a reasonable maximum password length are not meaningfully affected.\u003c/p\u003e"
                }
              ],
              "value": "pbkdf2 through 3.1.6 re-hashes passwords longer than the digest\u0027s block size on every iteration in its JavaScript fallback (lib/sync.js). A password longer than the block size (64 bytes, or 128 bytes for sha384 and sha512) is passed to HMAC as the key on every iteration, and HMAC hashes such keys in full each time. Cost is therefore O(iterations \u00d7 password length), and a long password can block the event loop. The fallback is used by pbkdf2Sync and pbkdf2 on Node.js before 0.12, on Bun (1.0.0 through 1.1.34, and 1.2.6 and later), and on Deno 2.9.0 and later, because their native pbkdf2Sync fails the library\u0027s feature check. It is also used when lib/sync.js is imported directly. Node.js 0.12 and later, and browser builds (which use lib/sync-browser.js), are not affected. Applications that enforce a reasonable maximum password length are not meaningfully affected."
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "exploitMaturity": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            },
            {
              "cvssV3_1": {
                "attackComplexity": "HIGH",
                "attackVector": "NETWORK",
                "availabilityImpact": "LOW",
                "baseScore": 3.7,
                "baseSeverity": "LOW",
                "confidentialityImpact": "NONE",
                "integrityImpact": "NONE",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L",
                "version": "3.1"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-400",
                  "description": "CWE-400 Uncontrolled Resource Consumption",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-29T03:42:04.950Z",
            "orgId": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
            "shortName": "harborist"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory"
              ],
              "url": "https://github.com/browserify/pbkdf2/security/advisories/GHSA-477h-4r7f-fvrx"
            },
            {
              "tags": [
                "issue-tracking"
              ],
              "url": "https://github.com/browserify/pbkdf2/issues/82"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/browserify/pbkdf2/commit/493d8d8"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eUpgrade to a version of pbkdf2 that includes the fix, which pre-hashes passwords longer than the digest block size once before iterating, or, enforce literally any reasonable maximum password length before calling pbkdf2.\u003c/p\u003e"
                }
              ],
              "value": "Upgrade to a version of pbkdf2 that includes the fix, which pre-hashes passwords longer than the digest block size once before iterating, or, enforce literally any reasonable maximum password length before calling pbkdf2."
            }
          ],
          "source": {
            "advisory": "GHSA-477h-4r7f-fvrx",
            "discovery": "EXTERNAL"
          },
          "title": "pbkdf2 rehashes long passwords on every iteration, enabling denial of service",
          "workarounds": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eEnforce a maximum password length (for example, 1024 bytes) before calling pbkdf2, or call the runtime\u0027s native crypto.pbkdf2Sync directly.\u003c/p\u003e"
                }
              ],
              "value": "Enforce a maximum password length (for example, 1024 bytes) before calling pbkdf2, or call the runtime\u0027s native crypto.pbkdf2Sync directly."
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
        "assignerShortName": "harborist",
        "cveId": "CVE-2026-102414",
        "datePublished": "2026-09-29T03:42:04.950Z",
        "dateReserved": "2026-09-29T02:06:16.561Z",
        "dateUpdated": "2026-09-29T03:42:04.950Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }