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.
Node.js already provides timing-safe comparison primitives used elsewhere in the codebase, indicating this is an oversight rather than an intentional design decision.
This vulnerability affects 20.x, 22.x, 24.x, and 25.x.
{
"unresolved_ranges": [
{
"source": "AFFECTED_FIELD",
"extracted_events": [
{
"introduced": "20.20.1"
},
{
"last_affected": "20.20.1"
},
{
"introduced": "22.22.1"
},
{
"last_affected": "22.22.1"
},
{
"introduced": "24.14.0"
},
{
"last_affected": "24.14.0"
},
{
"introduced": "25.8.1"
},
{
"last_affected": "25.8.1"
},
{
"introduced": "4.0"
},
{
"fixed": "4.*"
},
{
"introduced": "5.0"
},
{
"fixed": "5.*"
},
{
"introduced": "6.0"
},
{
"fixed": "6.*"
},
{
"introduced": "7.0"
},
{
"fixed": "7.*"
},
{
"introduced": "8.0"
},
{
"fixed": "8.*"
},
{
"introduced": "9.0"
},
{
"fixed": "9.*"
},
{
"introduced": "10.0"
},
{
"fixed": "10.*"
},
{
"introduced": "11.0"
},
{
"fixed": "11.*"
},
{
"introduced": "12.0"
},
{
"fixed": "12.*"
},
{
"introduced": "13.0"
},
{
"fixed": "13.*"
},
{
"introduced": "14.0"
},
{
"fixed": "14.*"
},
{
"introduced": "15.0"
},
{
"fixed": "15.*"
},
{
"introduced": "16.0"
},
{
"fixed": "16.*"
},
{
"introduced": "17.0"
},
{
"fixed": "17.*"
},
{
"introduced": "18.0"
},
{
"fixed": "18.*"
},
{
"introduced": "19.0"
},
{
"fixed": "19.*"
}
]
}
],
"cna_assigner": "hackerone",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/21xxx/CVE-2026-21713.json"
}{
"source": "CPE_RANGE",
"cpe": "cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:*",
"extracted_events": [
{
"introduced": "0"
},
{
"last_affected": "20.20.1"
},
{
"introduced": "22.0.0"
},
{
"last_affected": "22.22.1"
},
{
"introduced": "24.0.0"
},
{
"last_affected": "24.14.0"
},
{
"introduced": "25.0.0"
},
{
"last_affected": "25.8.1"
}
]
}