背景:

OpenSSL官方发布更新版本,修复了一处严重的OpenSSL CMS AuthEnvelopedData 栈缓冲区溢出漏洞(CVE-2025-15467),在处理采用AEAD密码算法(如AES-GCM)的CMS(加密消息语法)结构中的AuthEnvelopedData时,OpenSSL未验证ASN.1参数中编码的IV(初始化向量)长度,攻击者可通过构造包含异常长IV字段的恶意CMS消息,在身份验证或标签验证之前将超出预期长度的数据复制至固定大小的栈缓冲区中,从而引发栈缓冲区溢出。此漏洞可能导致目标系统出现服务拒绝(DoS)攻击,严重情况下甚至可能被利用实现远程代码执行。

参考链接:

https://openssl-library.org/news/vulnerabilities/index.html

https://nvd.nist.gov/vuln/detail/CVE-2025-15467

威胁级别

威胁级别:【严重】

(说明:威胁级别共四级:一般、重要、严重、紧急) 

漏洞影响范围

影响版本:

3.6.0 <= OpenSSL < 3.6.1

3.5.0 <= OpenSSL < 3.5.5

3.4.0 <= OpenSSL < 3.4.4

3.3.0 <= OpenSSL < 3.3.6

3.0.0 <= OpenSSL < 3.0.19

OpenSSL 1.1.1和1.0.2版本不受此问题影响。

安全版本:

OpenSSL >= 3.6.1

OpenSSL >= 3.5.5

OpenSSL >= 3.4.4

OpenSSL >= 3.3.6

OpenSSL >= 3.0.19

升级步骤(升级前先做好备份!!!)

1.检查版本

# opensssl version

2.解决centos yum源问题(阿里云ECS可选)

cat /etc/yum.repos.d/CentOS-Base.repo

#output
[base]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7


# 修改 repo 文件,指向 vault 归档地址(因为 CentOS 7 已停止维护,必须用 vault)
sed -i -e 's|http://mirrors.cloud.aliyuncs.com|https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo
sed -i -e 's|http://mirrors.aliyuncs.com|https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo
sed -i -e 's|releasever/|releasever-stream/|g' /etc/yum.repos.d/CentOS-Base.repo

3.下载最新版OpenSSL源码 访问 OpenSSL官网 或使用wget下载:

<BASH>
wget https://www.openssl.org/source/openssl-<version>.tar.gz

(将 <version> 替换为最新版本号,例如 openssl-3.5.5.tar.gz

4.解压并进入目录

<BASH>
tar -xzf openssl-<version>.tar.gz

cd openssl-<version>

5.配置和编译

<BASH>
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib

# 编译并安装(使用 -j4 加速编译,根据你的 CPU 核心数调整)
make -j4 && make install

6.配置如有报错:

Can't locate IPC/Cmd.pm in @INC (@INC contains: /root/openssl-3.5.5/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /root/openssl-3.5.5/external/perl/Text-Template-1.56/lib) at /root/openssl-3.5.5/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /root/openssl-3.5.5/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at /root/openssl-3.5.5/Configure line 23.
BEGIN failed--compilation aborted at /root/openssl-3.5.5/Configure line 23.

7.为了解决 IPC/Cmd.pm 报错,你需要安装以下包

<BASH>
# 安装 IPC::Cmd 模块

yum install -y perl-IPC-Cmd

# 建议安装 perl-core 以避免其他 Perl 模块缺失(如 Data::Dumper 等)

yum install -y perl-core

# 安装 zlib 开发库(因为你使用了 zlib 参数)

yum install -y zlib-devel

# 确保编译工具链完整

yum groupinstall -y "Development Tools"

8.编译安装完成后,OpenSSL 安装在 /usr/local/openssl,系统默认是找不到新版本的库和可执行文件的,需要手动配置。

a.添加动态链接库路径:

<BASH>
echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf

# 注意:根据架构不同,目录可能是 lib 或 lib64,OpenSSL 3.x 通常默认 lib64

# 你可以 ls /usr/local/openssl/ 确认一下是 lib 还是 lib64

# 刷新动态库缓存

ldconfig

b.配置环境变量 (可选,但推荐): 如果你希望在终端直接输入 openssl 使用新版本,而不是旧版本:

<BASH>
# 备份旧的 openssl (可选)

mv /usr/bin/openssl /usr/bin/openssl.bak

# 创建软链接

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

# 验证版本

openssl version