CVE-2025-64767hpke-js是一个基于Web Cryptography API构建的混合公钥加密(HPKE)模块。该模块在1.7.5之前的版本中存在严重的竞态条件漏洞,具体位于public SenderContext的Seal() API中。由于并发调用时缺乏适当的同步机制,AEAD(Authenticated Encryption with Associated Data)nonce可能被多次Seal()操作重用。Nonce重用是加密系统中的致命错误,会导致加密流重复,使得攻击者能够恢复明文消息或伪造密文。这不仅完全破坏了加密消息的机密性,还严重影响了消息的完整性和真实性。该漏洞无需任何认证或用户交互即可被利用,攻击复杂度低,危害极大。
hpke-js模块的SenderContext Seal()方法在处理加密请求时存在典型的竞态条件(Race Condition)漏洞。在多线程或异步环境中,多个Seal()调用可能同时读取和递增nonce计数器,导致相同的nonce值被用于多次加密操作。AEAD加密模式(如AES-GCM、ChaCha20-Poly1305)要求每次加密必须使用唯一的nonce值,nonce重用会使加密流(keystream)重复,攻击者可通过XOR操作恢复明文或进行密文伪造攻击。问题代码位于packages/core/src/senderContext.ts的Seal()方法中(第22-34行),该方法在更新nonce前未进行原子操作或加锁保护。攻击者只需构造并发加密请求即可触发此漏洞,无需特殊权限或用户交互。