{"id":"CVE-2026-21713","state":"PUBLISHED","title":"A flaw in Node.js HMAC verification uses a non-constant-time comparison when validating user-provided signatures, potentially leaking timing information proportional to the number ","description":"A flaw in Node.js HMAC verification uses a non-constant-time comparison when validating user-provided signatures, potentially leaking timing information proportional to the number of matching bytes. Under certain threat models where high-resolution timing measurements are possible, this behavior could be exploited as a timing oracle to infer HMAC values.\r\n\r\nNode.js already provides timing-safe comparison primitives used elsewhere in the codebase, indicating this is an oversight rather than an intentional design decision.\r\n\r\nThis vulnerability affects **20.x, 22.x, 24.x, and 25.x**.","publishedAt":"2026-03-30T19:07:28.356Z","updatedAt":"2026-05-10T13:17:50.281Z","severity":{"score":5.9,"label":"Medium","version":"3.0","vector":"CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","source":"hackerone"},"assigner":"hackerone","products":["nodejs node"],"affected":[{"vendor":"nodejs","product":"node","defaultStatus":"unaffected","versions":[{"version":"20.20.1","status":"affected","lessThanOrEqual":"20.20.1","versionType":"semver"},{"version":"22.22.1","status":"affected","lessThanOrEqual":"22.22.1","versionType":"semver"},{"version":"24.14.0","status":"affected","lessThanOrEqual":"24.14.0","versionType":"semver"},{"version":"25.8.1","status":"affected","lessThanOrEqual":"25.8.1","versionType":"semver"},{"version":"4.0","status":"affected","lessThan":"4.*","versionType":"semver"},{"version":"5.0","status":"affected","lessThan":"5.*","versionType":"semver"},{"version":"6.0","status":"affected","lessThan":"6.*","versionType":"semver"},{"version":"7.0","status":"affected","lessThan":"7.*","versionType":"semver"},{"version":"8.0","status":"affected","lessThan":"8.*","versionType":"semver"},{"version":"9.0","status":"affected","lessThan":"9.*","versionType":"semver"},{"version":"10.0","status":"affected","lessThan":"10.*","versionType":"semver"},{"version":"11.0","status":"affected","lessThan":"11.*","versionType":"semver"},{"version":"12.0","status":"affected","lessThan":"12.*","versionType":"semver"},{"version":"13.0","status":"affected","lessThan":"13.*","versionType":"semver"},{"version":"14.0","status":"affected","lessThan":"14.*","versionType":"semver"},{"version":"15.0","status":"affected","lessThan":"15.*","versionType":"semver"},{"version":"16.0","status":"affected","lessThan":"16.*","versionType":"semver"},{"version":"17.0","status":"affected","lessThan":"17.*","versionType":"semver"},{"version":"18.0","status":"affected","lessThan":"18.*","versionType":"semver"},{"version":"19.0","status":"affected","lessThan":"19.*","versionType":"semver"}]}],"references":["https://nodejs.org/en/blog/vulnerability/march-2026-security-releases"],"weaknesses":["CWE-208"],"ingestedAt":"2026-10-29T20:11:10.572Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/21xxx/CVE-2026-21713.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-21713","state":"PUBLISHED","datePublished":"2026-03-30T19:07:28.356Z","dateUpdated":"2026-05-10T13:17:50.281Z","assignerShortName":"hackerone","assignerOrgId":"36234546-b8fa-4601-9d6f-f4e334aa8ea1","dateReserved":"2026-01-04T15:00:06.574Z"},"containers":{"cna":{"descriptions":[{"lang":"en","value":"A flaw in Node.js HMAC verification uses a non-constant-time comparison when validating user-provided signatures, potentially leaking timing information proportional to the number of matching bytes. Under certain threat models where high-resolution timing measurements are possible, this behavior could be exploited as a timing oracle to infer HMAC values.\r\n\r\nNode.js already provides timing-safe comparison primitives used elsewhere in the codebase, indicating this is an oversight rather than an intentional design decision.\r\n\r\nThis vulnerability affects **20.x, 22.x, 24.x, and 25.x**."}],"affected":[{"vendor":"nodejs","product":"node","defaultStatus":"unaffected","versions":[{"version":"20.20.1","status":"affected","lessThanOrEqual":"20.20.1","versionType":"semver"},{"version":"22.22.1","status":"affected","lessThanOrEqual":"22.22.1","versionType":"semver"},{"version":"24.14.0","status":"affected","lessThanOrEqual":"24.14.0","versionType":"semver"},{"version":"25.8.1","status":"affected","lessThanOrEqual":"25.8.1","versionType":"semver"},{"version":"4.0","status":"affected","lessThan":"4.*","versionType":"semver"},{"version":"5.0","status":"affected","lessThan":"5.*","versionType":"semver"},{"version":"6.0","status":"affected","lessThan":"6.*","versionType":"semver"},{"version":"7.0","status":"affected","lessThan":"7.*","versionType":"semver"},{"version":"8.0","status":"affected","lessThan":"8.*","versionType":"semver"},{"version":"9.0","status":"affected","lessThan":"9.*","versionType":"semver"},{"version":"10.0","status":"affected","lessThan":"10.*","versionType":"semver"},{"version":"11.0","status":"affected","lessThan":"11.*","versionType":"semver"},{"version":"12.0","status":"affected","lessThan":"12.*","versionType":"semver"},{"version":"13.0","status":"affected","lessThan":"13.*","versionType":"semver"},{"version":"14.0","status":"affected","lessThan":"14.*","versionType":"semver"},{"version":"15.0","status":"affected","lessThan":"15.*","versionType":"semver"},{"version":"16.0","status":"affected","lessThan":"16.*","versionType":"semver"},{"version":"17.0","status":"affected","lessThan":"17.*","versionType":"semver"},{"version":"18.0","status":"affected","lessThan":"18.*","versionType":"semver"},{"version":"19.0","status":"affected","lessThan":"19.*","versionType":"semver"}]}],"references":[{"url":"https://nodejs.org/en/blog/vulnerability/march-2026-security-releases"}],"metrics":[{"cvssV3_0":{"version":"3.0","vectorString":"CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","baseScore":5.9,"baseSeverity":"MEDIUM"}}],"providerMetadata":{"shortName":"hackerone","orgId":"36234546-b8fa-4601-9d6f-f4e334aa8ea1","dateUpdated":"2026-03-30T19:07:28.356Z"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-03-30T19:45:13.027379Z","id":"CVE-2026-21713","options":[{"Exploitation":"none"},{"Automatable":"yes"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-208","type":"CWE","lang":"en","description":"CWE-208 Observable Timing Discrepancy"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-05-10T13:17:50.281Z"}}]}}}