概述
安全公告:Node.js v14 和许多 Node v16 版本仍在使用可能导致拒绝服务的 openssl 版本。处理恶意格式化的 PKCS12 文件可能导致 OpenSSL 崩溃,从而引发潜在的拒绝服务攻击。
详细信息
模块信息
受影响软件包:openssl
受影响的版本:
1.0.2 至(不包括)1.0.2zj
1.1.1 至(不包括)1.1.1x
3.0.0 至(不包括)3.0.13
3.1.0 至(不包括)3.1.5
存储库:https://github.com/openssl/openssl
已发布软件包:openssl
漏洞信息
这被视为中等严重性问题,可在 openssl 的多个分支中发现,并可能影响使用这些版本的项目。
OpenSSL 可以使用 PKCS12 格式的文件来保存证书和密钥。虽然 PKCS12 规范允许某些字段为 NULL,但 OpenSSL 无法正确检查这种情况。如果字段为空,OpenSSL 会尝试取消引用空指针,从而导致 OpenSSL 崩溃。
如果应用程序使用 OpenSSL API 处理 PKCS12 文件,那么该应用程序就会受到此问题的影响。
易受攻击的 OpenSSL API 包括PKCS12_parse()、PKCS12_unpack_p7data()、PKCS12_unpack_p7encdata()、PKCS12_unpack_authsafes() 和 PKCS12_newpass()。
3.2、3.1 和 3.0 中的 FIPS 模块不受此问题影响。
复制步骤
- 在安装补丁之前,在一台机器上安装依赖 OpenSSL 1.0.2 至 3.1.5 版本的 Node。
- 创建或修改一个 PKCS12 文件,其中某些在规范中允许为空的字段确实为空。以密钥开始:
openssl pkcs12 -导出-incert.pem -inkey key.pem -out malicious.p12 -passout pass:password
- 使用十六进制编辑器或可修改文件的软件修改文件。为某些字段插入空值。
- 使用使用恶意密钥的 OpenSSL 漏洞版本,观察它是否崩溃。
没有变通办法。
缓解
OpenSSL 是一个流行的库,经常与 Node.js 等其他软件包捆绑在一起。 请确保您运行的 Node 版本持续保持依赖性更新,以避免软件出现安全漏洞。 更新到最新版本的 Node 或利用HeroDevs 等供应商提供的商业支持。
其他资源
- NIST 入口 https://nvd.nist.gov/vuln/detail/CVE-2024-0727
- https://github.com/advisories/GHSA-9v9h-cgj8-h64p
每当我们支持的开源软件修复了新的漏洞,我们就会发出警报。