VHOST-NET 虚拟客户机到主机的逃逸 - 内核安全漏洞 - CVE-2019-14835

Public Date: September 18, 2019, 14:38
已更新 October 2, 2019, 10:13 - English(英语) French Japanese Korean
Resolved 状态
Important Impact

Insights vulnerability analysis

View exposed systems

简介 

Linux 内核的网络虚拟化功能中发现了一个缓冲区溢出安全漏洞,该漏洞可能在虚拟机实时迁移(live migration)期间被滥用。当用户在虚拟机上具有特定访问权限时,可以在实时迁移过程中把带有无效长度的描述符传递给主机,并在主机上升级其权限。

技术详情和背景信息 

这个安全问题已被记录为 CVE-2019-14835,它的安全影响级别被定为 Important(重要)

这个漏洞只会在虚拟机实时迁移过程中被利用。补丁和备用缓解方案详述如下。


CVE-2019-14835 - kernel:vhost-net:在虚拟机迁移期间存在虚拟机到主机内核的逃逸问题

Linux 内核的网络虚拟化功能中发现了一个缓冲区溢出安全漏洞,该漏洞可能在虚拟机实时迁移期间被滥用。当用户在虚拟机上具有特定访问权限时,可以在实时迁移过程中把带有无效长度的描述符传递给主机,并在主机上升级其权限。这一般不会影响到只有一个主机的系统,因为虚拟机实时迁移功能一般不会被设置。

致谢

红帽借此感谢 Tencent Blade 团队的 Peter Pi。

额外参考信息 

https://www.openwall.com/lists/oss-security/2019/09/17/1

https://www.redhat.com/en/blog/introduction-virtio-networking-and-vhost-net

https://www.redhat.com/en/blog/deep-dive-virtio-networking-and-vhost-net 

https://bugzilla.redhat.com/show_bug.cgi?id=1750727

受影响的产品

红帽产品安全团队已把这个问题的安全影响级别定为 Important(重要)

以下版本的红帽产品会受到影响:

  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 8
  • Red Hat Virtualization 
  • Red Hat OpenStack Platform(镜像提供的内核) 
  • Container-Native Virtualization (CNV)

虽然红帽的 Linux Container 不会直接受到虚拟化问题的影响,但它们的安全性取决于主机内核环境的安全性。红帽建议您使用最新版本的容器镜像。Container Health Index(Red Hat Container Catalog 的一部分)可以用来检查红帽容器的安全状态。为了保护所有容器的隐私,需要确保所使用的容器主机(例如,Red Hat Enterprise Linux、Red Hat CoreOS 或 Atomic Host)已进行了可以解决这个安全问题的更新。红帽已针对这个安全问题发布了一个更新的 Atomic Host 版本。

诊断您的环境是否存在漏洞

使用检测脚本检查您的系统当前是否存在安全漏洞。您可以下载附带的 GPG 签名来验证脚本的真实性。

检查您的系统是否存在安全漏洞

当前版本:1.0


采取行动

我们强烈建议,所有运行受影响版本的红帽产品的用户,在相关勘误可用后尽快进行更新。用户需要尽快对环境进行相关的更新。

注释

这个安全漏洞使用低级别的方法,因此当前还没有一个可靠的方法来检测漏洞是否已成功在系统上运行。

红帽产品安全团队强烈建议客户参考与自己的系统相关的信息,尤其是支持多租户工作负载的系统。用户应该考虑对需要使用虚拟机迁移功能的高优先级系统打补丁。

针对 Red Hat Enterprise Linux 7.2 或更高版本的 kpatch 将会在以后发布。请创建一个支持问题单以获取 kpatch。

如需了解与 kpatch 相关的信息,请参阅: RHEL 7 是否支持实时提供内核补丁(kpatch)?

受影响产品的更新

产品软件包公告/更新
Red Hat Enterprise Linux 8 (z-stream)kernelRHSA-2019:2827
Red Hat Enterprise Linux 8kernel-rtRHSA-2019:2828
Red Hat Enterprise Linux 7 (z-stream)kernelRHSA-2019:2829
Red Hat Enterprise Linux 7kernel-rtRHSA-2019:2830
Red Hat Enterprise Linux 7kpatch-patchRHSA-2019:2854
Red Hat Enterprise Linux 6 (z-stream)kernelRHSA-2019:2863
Red Hat Virtualization 4.3redhat-virtualization-hostRHSA-2019:2889
Red Hat Virtualization 4.2 EUSredhat-virtualization-host

待定

缓解方案

选择 1:禁用 vhost-net

vhost-net 功能可以基于每个虚拟机被禁用。请参阅禁用 VHOST-NET

或者,使用标准的黑名单(blacklist)技术将包含受影响代码的名为 “vhost_net” 的内核模块列入黑名单。详情请参阅 如何把一个内核模块放入黑名单以防止它被自动加载? 

使用 vhost-net 功能的虚拟机需要重启才能使所进行的修改生效。

选择 2:禁用虚拟机实时迁移功能

这个安全漏洞只有在进行虚拟机实时迁移时才会出现。因此,完全禁用自动迁移,或不手动将虚拟机迁移到另外一个主机将可以有效防止这个安全漏洞被利用。

CNV - 禁用实时迁移功能

把 “LiveMigration” 从 kubevirt-config 配置文件(位于 kubevirt 中)的 data: feature-gates: 部分中删除可以禁用实时迁移功能。

操作流程
编辑 kubevirt-config 配置文件,把 LiveMigration 从 `feature-gates` 行中删除:

$ oc edit configmap kubevirt-config -n kubevirt
...
data:
  feature-gates: "LiveMigration"
将 “LiveMigration” 从以上行中删除。

重新启动 virt-api 和 virt-controller pod 以使所做出的修改生效。

$ oc delete pod virt-api -n kube-system
$ oc delete pod virt-controller -n kube-system

Red Hat Virtualization - 禁用自动迁移功能

迁移功能可以在集群一级上被禁用,也可以在单独的虚拟机上被禁用。 通常情况,Red Hat Virtualization 会根据负载状况、兼容性,以及弹性和可用性策略,自动将虚拟机迁移到集群中的其他主机。 另外,当集群中的主机被设置为维护模式时,虚拟机也可能会被迁移。

自动迁移策略可以在集群一级进行控制,也可以在单独的主机上进行控制。

  • 在一个集群中,把 Resilience Policy 设置为 “Do Not Migrate Virtual Machines” 将可以防止这个集群中的任何虚拟机被迁移。 详情请参阅 管理指南:迁移策略设置
  • 把某个虚拟机固定到特定主机,或把 Migration Options 设置为 “Do not allow migration” 可以防止这个虚拟机被迁移。 详情请参阅管理指南:防止一个虚拟机被自动迁移

要确保在主机进入维护模式时不迁移虚拟机,请将虚拟机配置为“Do not allow migration”,或者在将主机设置为维护模式之前,关闭该主机上的所有虚拟机。

我们建议用户使用基于风险程度的方法对这个问题进行补救。那些需要高安全性、高度信任的系统应该首先进行处理,并应该在不被信任的系统进行了相应的处理前,把它们和那些不被信任的系统隔离开,以减少这个安全漏洞可能造成的安全风险。

性能影响

将内核更新到包含可以解决这个问题的新版本将不会对性能产生显著影响。

如果选择使用禁用 vhost-net 的缓解方案,则会对性能产生一定影响。对性能具体的影响程度取决于系统的网络负载。

Ansible Playbook

此外,我们还提供了一个缓解 playbook,使用这个 playbook 可以防止带有这个安全漏洞的内核模块被加载。这本 playbook 将会重启系统,以确保相关的模块被卸载。要使用它,请在HOSTS变量中指定目标系统的清单名称。例如:

ansible-playbook -e HOSTS=myhost1,myhost2 CVE-2019-14835_blacklist_mitigate.yml

另外,还同时提供了相关的GPG 签名


使用 Ansible 的缓解方案

当前版本:1.0

Comments