OpenSSL 3.6.4 安全修复:QUIC INITIAL 双重释放与 CMS 解包 8 字节越界写
OpenSSL 3.6 系列当前的安全补丁版本是 3.6.4,发布于 2026-08-25。这一批修复里最高严重级别为 Moderate,其中两个问题有明确的触发路径和可复现的后果,值得单独拆开看。
CVE-2026-18798:QUIC 服务端处理 INITIAL 包时双重释放
QUIC 服务端在处理 INITIAL 包时,如果为该 initial packet 创建 channel 失败,可能对 QRX 对象执行两次释放(double free)。堆损坏之后可导致 DoS。也就是说,问题不依赖复杂时序,而是落在 channel 创建失败这条错误路径上。
CVE-2026-63072:CMS 密钥解包的 8 字节越界堆写
这条在 CMS 路径上,成因是长度查询与实际写入不一致:
CMS_decrypt()先查询 unwrapped key 的长度,并据此为 key-unwrap 输出缓冲区分配空间;- 但 AES-WRAP-PAD 解包实际写入、并且清理(cleanse)的字节数,可能多于该查询所报告的长度;
- 结果是缓冲区尾部之外发生固定的 8 字节越界堆写。
攻击者只需提供一个构造过的 CMS 消息,就能在 CMS_decrypt() 上确定性地触发这段越界写,堆损坏后可导致 DoS。该问题由 Trail of Bits 报告。
这两个问题如果同时满足「对外提供 QUIC 服务」或「用 CMS_decrypt() 处理外部输入」的条件,升级优先级应该排在前面。
同一批修复中的其他问题
3.6.4 还修了以下条目:
- CMP 服务端通过构造的
protectionAlg造成非法指针解引用(CVE-2026-63076) - QUIC 服务端 incoming channel 队列无界内存增长(CVE-2026-14456)
- RPK 服务端签名算法选择时解引用缺失的证书(CVE-2026-14457)
- DTLS 为 future epoch 缓存记录导致内存过度占用(CVE-2026-54874)
- OCSP 响应检查的客户端内存泄漏(CVE-2026-54876)
- CMP
extraCerts缓存持续增长(CVE-2026-63074) - QUIC 仅含 ACK 的包被保留导致内存耗尽(CVE-2026-63075)
- 使用
EVP_Cipher()时,空密文存在 AEAD 伪造可能(CVE-2026-75803),同时修正了 CCM 模式下空密文的 AEAD tag 校验
3.6 相对 3.5 的新增能力
特性版本 3.6.0 发布于 2025-10-01,相对 3.5 的主要变化包括:
- PKEY 对象增加 NIST security categories
- 引入
EVP_SKEY不透明对称密钥对象,配套 API 为EVP_KDF_CTX_set_SKEY()、EVP_KDF_derive_SKEY()、EVP_PKEY_derive_SKEY() - 在 FIPS provider 与默认 provider 中支持按 SP 800-208 做 LMS 签名验证
- 新增
openssl configutl工具,用于处理与 dump OpenSSL 配置 - FIPS provider 支持 FIPS 186-5 确定性 ECDSA
不兼容点
升级到 3.6 需要注意这几处:
- 纯 ANSI-C 工具链不再够用,构建需要 C-99 编译器
- 移除 VxWorks 平台支持
- 弃用
EVP_PKEY_ASN1_METHOD相关函数
支持周期
OpenSSL 3.6 的 OSS 支持在 2026-11-01 结束。
参考
- 3.6.3 发布页:
- 3.6 系列说明:
- 3.6 分支 CHANGES: