漏洞概述
2026 年 1 月 27 日,OpenSSL 官方发布了安全公告,披露了一个高危漏洞 CVE-2025-15467。该漏洞位于 OpenSSL 的 CMS(Cryptographic Message Syntax)实现中,当处理使用 AEAD(Authenticated Encryption with Associated Data)密码的 AuthEnvelopedData 结构时,存在栈缓冲区溢出问题。
漏洞严重性评级为 High,可导致拒绝服务(DoS),在特定条件下甚至可能实现远程代码执行(RCE)。
影响版本
受影响的 OpenSSL 版本:
- OpenSSL 3.6.x
- OpenSSL 3.5.x
- OpenSSL 3.4.x
- OpenSSL 3.3.x
- OpenSSL 3.0.x
不受影响的版本:
- OpenSSL 1.1.1
- OpenSSL 1.0.2
修复版本:
- OpenSSL 3.6.1
- OpenSSL 3.5.5
- OpenSSL 3.4.4
- OpenSSL 3.3.6
- OpenSSL 3.0.19
技术分析
CMS 简介
CMS(Cryptographic Message Syntax,RFC 5652)是一种用于签名、加密消息的通用语法标准,广泛应用于:
- S/MIME:安全电子邮件
- PKCS#7:加密消息语法
- 代码签名
- 证书管理(如 CRL、证书请求)
CMS 支持多种加密数据格式,包括:
- EnvelopedData:加密数据
- SignedData:签名数据
- AuthEnvelopedData:带认证的加密数据(AEAD)
AEAD 密码与 AES-GCM
AEAD(Authenticated Encryption with Associated Data)是一种同时提供机密性和完整性的加密模式。常见的 AEAD 密码包括:
- AES-GCM:AES Galois/Counter Mode
- AES-CCM:AES Counter with CBC-MAC
- ChaCha20-Poly1305
AES-GCM 是目前最广泛使用的 AEAD 模式之一,它使用一个 Initialization Vector(IV) 作为加密初始化向量。IV 的长度通常是固定的(对于 GCM 为 12 字节),但可以由发送方指定。
漏洞根因
问题的核心在于:当 OpenSSL 解析 CMS AuthEnvelopedData 或 EnvelopedData 结构时,会从 ASN.1 编码的参数中提取 IV,并将 IV 复制到固定大小的栈缓冲区中。
关键问题:OpenSSL 在复制 IV 之前没有验证 IV 长度是否超过目标缓冲区的容量。
|
|
攻击者可以构造一个包含超长 IV 的恶意 CMS 消息,触发栈缓冲区溢出。由于溢出发生在认证/标签验证之前,攻击者甚至不需要持有有效的密钥材料即可触发漏洞。
利用条件与影响
- 触发条件:应用解析不受信任的 CMS 或 PKCS#7 内容,且使用 AEAD 密码(如 AES-GCM)
- 攻击向量:远程发送恶意构造的 CMS 消息(如 S/MIME 邮件)
- 利用影响:
- 拒绝服务(应用崩溃)
- 潜在的远程代码执行(取决于平台缓解措施)
漏洞验证与检测
检查当前 OpenSSL 版本
可以使用以下命令检查 OpenSSL 版本:
|
|
输出示例:
|
|
注意:某些系统可能同时安装了多个版本的 OpenSSL,需要检查所有相关二进制文件的版本。
检查软件依赖
如果你的应用是静态链接或动态链接 OpenSSL,可以使用以下命令检查:
|
|
验证修复
升级 OpenSSL 后,验证版本是否在修复版本范围内:
|
|
输出应包含类似以下信息:
|
|
修复方案
1. 升级 OpenSSL
最直接的修复方案是升级到官方发布的修复版本:
|
|
2. 临时缓解措施
如果无法立即升级,可以考虑以下临时缓解措施:
- 限制解析不受信任的 CMS/PKCS#7 内容
- 在网络层过滤异常的 CMS 消息
- 监控应用日志中的异常崩溃
3. 检查第三方依赖
许多第三方应用会打包自己的 OpenSSL 副本,需要检查并更新这些依赖:
|
|
总结
CVE-2025-15467 是一个严重的安全漏洞,位于 OpenSSL 处理 CMS 加密消息的逻辑中。由于:
- 影响范围广(OpenSSL 3.0-3.6 所有版本)
- 触发条件简单(无需认证即可触发)
- 潜在危害大(可能实现 RCE)
建议所有使用 OpenSSL 3.x 版本的用户尽快升级到修复版本,并检查所有依赖 OpenSSL 的第三方应用。