CVE-2026-33895Forge (node-forge) 是 JavaScript 的 TLS 原生实现。在 1.4.0 版本之前,其 Ed25519 签名验证逻辑存在缺陷,接受非标准签名。攻击者可利用签名可塑性(Scalar S 未模 L 约减)伪造变体签名,从而绕过依赖签名唯一性的认证或授权逻辑,导致安全机制失效。
该漏洞源于 Ed25519 签名验证算法未正确检查标量 S 是否已模群阶 L 约减。根据 RFC 8032 规范,S 必须小于 L。然而,受影响版本的 node-forge 错误地接受了 S >= L 的签名。这意味着,对于同一个消息,攻击者可以生成两个有效的签名表示形式(S 和 S+L)。由于 Node.js 原生 crypto 模块遵循规范并拒绝 S+L,这导致了验证行为的不一致。如果应用程序依赖签名字节的唯一性进行去重、重放保护或对象规范化检查,攻击者可以提交 S+L 形式的签名来绕过这些检查,同时仍被 node-forge 验证通过,从而可能导致认证绕过或授权提升。