CVE-2025-13470CVE-2025-13470是RNP(OpenPGP实现库)0.18.0版本中的一个严重安全漏洞。该漏洞源于代码重构过程中的回归问题,导致公钥加密会话密钥(PKESK)包中的对称会话密钥未被正确初始化。在受影响版本中,会话密钥缓冲区仅被清零操作处理,初始化为全零字节数组,而非使用加密安全的随机数生成器进行初始化。这一缺陷使得任何使用公钥加密功能加密的数据都可以通过简单地提供全零会话密钥进行解密,完全破坏了加密通信的机密性。该漏洞仅影响使用公钥加密的PKESK包,不影响基于密码加密的SKESK包。攻击者可以在无需任何认证的情况下远程利用此漏洞,对使用RNP 0.18.0公钥加密功能保护的数据构成严重威胁。
该漏洞的根本原因在于RNP项目在commit 7bd9a8dc356aae756b40755be76d36205b6b161a中进行的代码重构。在encrypted_build_skesk()函数中,开发者添加了密钥随机化逻辑以增强安全性,但该逻辑仅在处理SKESK(基于密码的加密会话密钥包)路径时被执行。当代码进入PKESK(基于公钥的加密会话密钥包)处理路径时,会话密钥缓冲区只经历了memset()清零操作,未调用加密安全的随机数生成器(如random_bytes())进行初始化。
具体来说,受影响的代码流程如下:函数encrypted_build_skesk()根据加密类型选择处理路径,PKESK路径跳过了关键的密钥随机化步骤,导致生成的PKESK包中包含一个固定的全零对称会话密钥。由于该会话密钥用于加密实际的数据加密密钥(DEK),攻击者只需拦截PKESK包,用全零密钥解密即可获取DEK,进而解密所有受保护的数据内容。
利用此漏洞需要攻击者具备以下条件:能够访问使用RNP 0.18.0公钥加密功能加密的数据包,以及了解加密实现使用的算法(RNP默认使用AES算法)。攻击者无需任何认证凭据或用户交互即可完成攻击。