关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明

前段时间IT圈被一个“ESXiArgs 勒索软件攻击VMware ESXi 服务器”的相关新闻刷屏。互联网上的文章称,这些攻击活动似乎利用 CVE-2021-21974 漏洞,由 OpenSLP 服务中的堆溢出问题引起,未经身份验证的威胁参与者可以利用该问题进行低复杂度攻击。CVE-2021-21974 影响以下系统:

ESXi70U1c-17325551之前的ESXi 7.x版本

ESXi670-202102401-SG 之前的 ESXi 版本 6.7.x

ESXi650-202102101-SG 之前的 ESXi 版本 6.5.x

VMware在 2021 年 2 月 23 发布了补丁程序以解决该问题(链接为https://www.vmware.com/security/advisories/VMSA-2021-0002.html)。表1列出的版本及以后的版本不受此漏洞影响。

表1 不受CVE-2021-21974影响的最低ESXi版本

版本名称

实体包ID

内部版本号

ESXi70U1c-17325551

ESXi70U1c-17325551

17325551

ESXi670-202102001

ESXi670-202102401-SG

17499825

ESXi650-202102001

ESXi650-202102101-SG

17477841




截止到本文写作时,VMware ESXi最新版本如表2所列。

表2 部分VMware ESXi最初补丁版本

版本名称

内部版本号

发布日期

VMware-ESXi-8.0a-20842819-depot

20842819

2022-12-08

VMware-ESXi-7.0U3j-21053776-depot

21053776

2023-01-31

ESXi670-202210001

20497097

2022-10-06

ESXi650-202210001

20502893

2022-10-06







VMware 尚未找到证据表明未知漏洞(0-day)被用于传播最近这些攻击中使用的勒索软件。大多数报告指出,一般支持终止 (EOGS) 和/或严重过时的产品正成为已知漏洞的目标,这些漏洞之前已在 VMware 安全公告 (VMSA) 中得到解决和披露。

考虑到这一点,VMware建议客户升级到vSphere 组件的最新可用受支持版本,以解决当前已知的漏洞。此外,VMware 建议在 ESXi 中禁用 OpenSLP 服务。ESXi 7.0 U2c 和 ESXi 8.0 GA默认禁用该服务。

1 关于ESXi补丁包介绍

使用浏览器访问https://my.vmware.com,输入注册账户登录后,在“产品和账户→产品补丁程序”(如图1所示)访问“产品补丁程序”网站。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_OpenSLP


图1 产品补丁程序

在“产品补丁程序网站”的“您为以下项选择了补丁程序”下拉列表中选择“ESXi (Embedded and Installable)”,在右侧选择版本(8.0、7.0、6.7.0、6.5.0、6.0.0等),本示例选择6.7.0,列出VMware已经发布的ESXi 6.7.0的所有补丁。如图2所示。单击右侧的“立即下载”链接,可以下载对应的ESXi的补丁程序,当前示例中,ESXi 6.7的补丁程序文件名称为ESXi670-202210001.zip

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_ESXi_02


图2 产品补丁程序

ESXi的zip升级补丁包,包含常规版本实体包仅安全修复版本实体包。在图2公告”中列出由-SG结尾的ID标识的为仅安全修复版本实体包,由-BG结尾的实体包ID标识的为常规版本实体包。

仅安全修复版本实体包只适用于新的安全修复。不包括任何新的缺陷修复,但包括早期修补程序版本和更新版本中的缺陷修复。

VMware 修补程序版本和更新版本包含常规映像配置文件重要映像配置文件例如对于当前示例的ESXi670-202210001.zip,包括4个映像配置文件,名称如下:

ESXi-6.7.0-20221004001-standard

ESXi-6.7.0-20221004001-no-tools

ESXi-6.7.0-20221001001s-standard

ESXi-6.7.0-20221001001s-no-tools

这4个配置文件中,前缀相同的配置文件修复了相同的问题,其中-standard结尾的ID标识的配置文件包括了新版本的VMware Tools安装包,而-no-tools结尾的ID标识的配置文件没有包含VMware Tools安装包。在数字后面有s的是重要映像配置文件,用于安全修复更新。不带s的为常规映像配置文件,只用于缺陷修复。

如果需要安装所有新的安全修复和缺陷修复,则必须应用此版本中的所有实体包。在某些情况下,常规版本实体包将取代仅安全修复版本实体包。这没有问题,因为常规版本实体包同时包含新的安全修复和缺陷修复。

可以使用 esxcli software profile update 或 esxcli software profile install 命令升级或更新 ESXi 主机。其中update 命令使用指定配置文件中的相应 VIB 来更新现有的 VIB,但不影响目标服务器上安装的其他 VIB。 install 命令安装库映像配置文件中显示的 VIB,并且移除目标服务器上安装的任何其他 VIB。这是两者的区别。在大多数的情况下使用update参数。

2 检查当前的ESXi版本

如果ESXi受vCenter Server管理,登录到vCenter Server管理界面,在左侧导航窗格中单击ESXi主机,在右侧“摘要”选项卡中可以查看当前主机安装的ESXi版本,如图3所示,当前示例中主机安装了ESXi 8.0,内部版本号为20513097

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_03


3 查看ESXi版本号

如果ESXi没有受vCenter Server管理,登录到ESXi主机,在导航器中单击“主机”,在右侧查看ESXi的版本,如图4所示。如果没有内部版本号,可以在“帮助→关于”中查看ESXi内部版本号。当前示例中ESXi的内容版本号为15843807

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_OpenSLP_04


4 查看ESXi版本号

3 权宜措施

VMware建议将受影响ESXi升级到最新版本。如果服务器暂时无法升级,可以使用以下的临时措施。注意,此解决办法仅适用于 ESXi。请勿将此权宜措施应用于其他 VMware 产品。

使用该权宜措施,使用 SLP 通过端口427查找 CIM 服务器的 CIM 客户端将无法找到该服务。

要实施权宜措施,请执行以下步骤:

(1)使用以下命令停止 ESXi 主机上的 SLP 服务:

/etc/init.d/slpd stop

注意:仅当 SLP 服务未在使用中的时候才能将其停止。使用以下命令可查看服务位置协议守护进程的运行状况:

esxcli system slp stats get

(2)运行以下命令以禁用 SLP 服务:

esxcli network firewall ruleset set -r CIMSLP -e 0

(3)要使此更改在重新引导后仍然有效,请执行以下操作:

chkconfig slpd off

(4)检查重新引导后此更改是否仍然有效:

chkconfig --list | grep slpd

该命令会显示slpd off,如图5所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_ESXi_05


5 禁用slp服务

要移除上述权宜措施,请执行以下步骤:

(1)运行以下命令以启用 SLP 服务的规则集:

esxcli network firewall ruleset set -r CIMSLP -e 1

(2)运行以下命令以更改 slpd 服务的当前启动信息:

chkconfig slpd on

(3)运行以下命令以检查运行上述步骤(步骤 2)后更改是否有效:

chkconfig --list | grep slpd

执行该命令后会显示slpd on

(4)运行以下命令以启动 SLP 服务:

/etc/init.d/slpd start

如图6所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_OpenSLP_06


6 启用slp服务

4 升级ESXi补丁以解决

下面分别介绍ESXi 7.0、6.7和6.5的升级。3个不同版本升级类似。

4.1 启动ssh服务

如果使用命令行升级ESXi,可以使用xshell以ssh方式登录到ESXi。默认情况下,ESXi主机SSH服务是禁用的,需要管理员手动打开。

(1)当ESXi受vCenter Server管理时,在vCenter Server中将ESXi主机置于维护模式时,该ESXi主机上的虚拟机会迁移到集群中其他ESXi主机上。如果ESXi是单机使用,没有加入到集群中,在将ESXi置于维护模式时,需要将该主机上所有正在运行的虚拟机暂时关机。等升级完成后,退出维护模式后,再打开虚拟机的电源。

(2)ESXi的ssh服务默认没有开启,如果需要开启ssh服务,使用浏览器登录到ESXi主机,在“操作”菜单中选择“服务→启用Secure Shell(SSH)”(如图7所示)。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_07


图7 启动SSH服务

(3)如果ESXi受vCenter Server管理,在vCenter Server导航中选中ESXi主机,在右侧“配置”选项卡的“系统→服务”中找到SSH,单击“启动”链接,启动SSH服务,如图8所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_08


图8 启动SSH服务

(4)当主机升级(管理配置)完成后,为了安全原因,应停止SSH服务。


4.2 ESXi 7.0升级

要为ESXi安装相应版本的补丁步骤如下。在本节的示例中,将把图2中ESXi 7.0-15843807版本,升级到ESXi 7.0-20497097

(1)从VMware产品补丁程序(https://customerconnect.vmware.com/cn/patch),下载当前ESXi 7.0版本的补丁程序,文件名称为VMware-ESXi-7.0U3j-21053776-depot.zip,大小为361MB

(2)将下载的VMware-ESXi-7.0U3j-21053776-depot.zip文件上传到ESXi主机本地存储根目录。在本节中,ESXi本地存储的名称为datastore1

(3)使用ssh登录到ESXi主机,执行vmware -vl查看当前ESXi版本。列出上传的ESXi安装包中的配置文件名,然后将主机置于维护模式,相关命令和显示如图9所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_OpenSLP_09


9

【说明】大多数情况下,ESXi安装包中会包括2个配置文件名,这2个配置文件区别是一个包含了新版本的VMware Tools(后缀名为-standard),另一个不带VMware Tools(后缀名为-no-tools)。管理员可以根据需要进行安装。

从图9可以看到,当前ESXi版本号为VMware ESXi 7.0.0 build-15843807,安装包VMware-ESXi-7.0U3j-21053776-depot.zip中的配置文件名称为ESXi-7.0U3j-21053776-standardESXi-7.0U3j-21053776-no-tools。选择ESXi-7.0U3j-21053776-standard用于升级,命令如下。

esxcli software profile update -d="/vmfs/volumes/datastore1/VMware-ESXi-7.0U3j-21053776-depot.zip" -p ESXi-7.0U3j-21053776-standard

升级完成后,将显示如下的信息:

Update Result

Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.

Reboot Required: true

同时还会显示安装了VIB包信息。

(4)执行reboot重启ESXi。再次进入系统后,使用ssh登录到ESXi主机,执行esxcli system maintenanceMode set --enable false退出维护模式,执行vmware -vl查看升级后的版本。如图10所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_ESXi_10


10

4.3 ESXi 6.7升级

如果有的zip升级包有常规映像配置文件和重要映像配置文件,需要一一安装。在当前的案例中,要升级的ESXi的版本号为6.7.0-8169922

(1)将ESXi 6.7的最新升级包ESXi670-202210001.zip上传到ESXi主机datastore1的根目录下。执行如下命令。

esxcli software sources profile list -d="/vmfs/volumes/datastore1/ESXi670-202210001.zip"

如图11所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_11


11 列出配置文件

(2)升级包中包括常规映像配置文件和重要映像配置文件,执行以下命令一一安装。

esxcli software profile update -d="/vmfs/volumes/datastore1/ESXi670-202210001.zip" -p ESXi-6.7.0-20221004001-standard

esxcli software profile update -d="/vmfs/volumes/datastore1/ESXi670-202210001.zip" -p ESXi-6.7.0-20221001001s-standard

(3)升级完成后重新启动。再次进入系统后,可以看到ESXi的版本号为6.7.0 Update 3 (Build 20497097),如图12所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_OpenSLP_12


图12 升级完成

4.3 ESXi 6.5升级出错原因和解决办法

对于ESXi 6.5的升级,可以直接安装升级文件,命令格式如下。

esxcli software vib update --depot=/path_to_vib_ZIP/ZIP_file_name.zip

ESXi 6.5 的升级方式与ESXi 6.7、7.0相同。但是,在通过 esxcli 将 ESXi 6.5.U2 或更早版本升级到 ESXi 6.5 U3或ESXi 7.0 及更高版本时,会看到以下错误:

Could not find a trusted signer.

例如,执行如下命令升级ESXi 6.5.0 build-59693036.5 U3的版本时出现如下错误。

esxcli software vib install -d="/vmfs/volumes/datastore1/ESXi650-202210001.zip"

[InstallationError]

('VMware_bootbank_vsanhealth_6.5.0-3.195.20330361', 'Could not find a trusted signer.')

vibs = VMware_bootbank_vsanhealth_6.5.0-3.195.20330361

如图13所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_13


图13 升级失败

ESXi 6.5.U2 或更早版本使用基于 VUM 的方式升级到 ESXi 7.0 及更高版本,会看到以下错误:

Cannot deploy host upgrade agent.

出现这种升级错误的版本如下:

起始版本:6.0 GA(内部版本:2494585)至 6.0 ESXi600-201807001 之前(内部版本:9239799)

6.5 GA(内部版本:4564106)至 6.5 U2 之前(内部版本:8294253)

升级至:ESXi 6.5ESXi 6.7

出现这种错误的原因是,VMware 2018 年 ESXi 引入了新证书,用于信任存储的 VIB 签名,自此开始对旧证书进行过渡(该证书在 2019 年 12 月 31 日到期)。运行在此过渡期前发布的版本的 ESXi 主机仅接受 VIB 签名验证的旧证书。由于此过渡期现已完成,新版本的 VIB 签名在运行过渡期前发布的 ESXi 版本的主机上不受信任,将会发生升级或安装失败。

在为此到期事件进行准备时,VMware建议所有客户将现有的 ESXi 主机至少升级到 2018 年 3 月之后发布的、在信任存储中具有新签名证书的内部版本(如下所示)。这样做可防止由于签名证书不受信任而导致未来的安装和升级失败。

  • 6.0 ESXi600-201807001 (内部版本:9239799)或更高版本
  • 6.5 U2 (内部版本:8294253)或更高版本
  • 6.7 GA (内部版本:8169922)或更高版本。

针对本案例,可以先将ESXi 6.5.0-5969303升级到6.5 U2,重启之后,再升级到最新版本。

(1)上传ESXi 6.5 U2升级补丁到ESXi本地存储datastore1,本示例中升级文件名称为update-from-esxi6.5-6.5_update02.zip,执行如下命令升级(如图14所示)。

esxcli software vib install -d="/vmfs/volumes/datastore1/update-from-esxi6.5-6.5_update02.zip"

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_OpenSLP_14


图14 升级到ESXi 6.5 U2

(2)升级完成后重启服务器,再次进入系统后,将ESXi升级到最新版本。

查看升级后的版本为,ESXi 6.5.0 Update 2 (Build 8294253),执行如下命令升级到最新版本。

esxcli software vib install -d="/vmfs/volumes/datastore1/ESXi650-202210001.zip"

如图15所示。升级完成后重新启动。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_15


图15 升级到最新版本

(3)升级完成后查看ESXi的版本,当前为ESXi 6.5.0-20502893,如图16所示。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_升级_16


16 升级到6.5 U3

【说明】本示例使用了install参数,也可以使用update参数。命令如下。

esxcli software vib update -d="/vmfs/volumes/datastore1/update-from-esxi6.5-6.5_update02.zip"

esxcli software vib update -d="/vmfs/volumes/datastore1/ESXi650-202210001.zip"

使用ESXi的zip升级包,也支持跨版本的升级,但要符合ESXi的升级路径。通常情况下,ESXi最多支持跨2个版本升级。例如可以从ESXi 6.5直接升级到7.0,支持将ESXi 6.7直接升级到8.0,但不支持将ESXi 6.5直接升级到8.0。要将ESXi 6.5升级到8.0,需要先升级到6.7或7.0,再升级到8.0

如图17所示,这是从ESXi 6.5 U2升级到7.0 U3的截图。

关于“VMware ESXi OpenSLP堆溢出漏洞”的修复说明​_ESXi_17


图17 从ESXi 6.5 U2升级到7.0

【说明】要升级到ESXi 7.0或8.0,ESXi 7.0和8.0需要至少32GB的永久存储,ESXi主机至少要有8GB的物理内存。

这篇文章发表在《网络安全和信息化》2023年第5期,第151~153页。发表时有删减。