CVE-2026-21713CVE-2026-21713 暴露了 Node.js 在处理 HMAC 验证时的一个中危安全缺陷。由于在验证用户提供的签名时使用了非恒定时间比较函数,导致系统可能泄露与时序相关的敏感信息。这种信息泄露使得攻击者能够在特定的高精度计时攻击场景中,利用时序预言机推断出正确的 HMAC 值。该漏洞影响了 Node.js 的多个版本,包括 20.x、22.x、24.x 和 25.x 分支,建议管理员及时关注官方安全更新。
该漏洞的核心技术原理在于 HMAC 签名验证逻辑中使用了非恒定时间的字符串比较算法。在计算机科学中,标准的字符串比较(如 `==` 或 `memcmp`)通常采用短路求值策略,即一旦发现不匹配的字节就会立即返回错误,而只有当所有字节都匹配时才会完成整个比较过程。攻击者利用这一特性,通过发送大量特制的请求并精确测量服务器的响应时间,可以推断出签名的正确性。具体而言,如果某个字节猜测正确,服务器会继续比较下一个字节,导致处理时间略微增加;如果猜测错误,则立即返回。在网络抖动可控的环境下,通过统计学方法收集大量样本,攻击者可以逐个字节地还原出完整的 HMAC 签名。这种时序攻击(Timing Attack)破坏了 HMAC 的保密性,允许攻击者伪造合法签名,进而绕过身份验证或篡改请求数据。