综合 OpenSSL 3.6.4 安全修复:QUIC INITIAL 双重释放与 CMS 解包 8 字节越界写

2026-10-04 21:03:43

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:
复制全文 生成海报 OpenSSL 安全 TLS 运维

推荐文章

程序员茄子在线接单