Linux 的 Bluetooth 子系统处理来自于客户端的待配置数据包的代码中存在一个堆栈缓冲区溢出的问题。一个客户端可以发送一组随意的 L2CAP 配置参数,它们会被保存在一个堆栈的缓冲对象中。这些参数可能会超过缓冲区的长度,从而造成对相邻的内核堆栈内容的覆盖。在建立一个蓝牙连接时,这种情况会在进行授权验证前发生。因此,如果没有启用内核堆栈保护功能(CONFIG_CC_STACKPROTECTOR=y),一个未授权的用户可以利用这个安全漏洞,在通过蓝牙连接到一个系统时对系统进行破坏,并可能在受影响的系统上运行恶意代码。
请特别注意,PPC64 架构上运行的 Red Hat Enterprise Linux 7 并没有内建的堆栈保护,因此攻击者可能会利用这个漏洞远程在相关系统上运行代码。内核堆栈保护功能可以减少远程执行代码的风险,如果没有使用这个功能,当 Red Hat Enterprise Linux 7 PPC64 服务器运行了 Bluetooth 服务,且相应的模块被加载,则未授权的攻击者就有可能在此系统上远程执行代码。因为 PPC 64 的 Red Hat Enterprise Linux 7 没有提供 RHEL 的 Workstation 版本,所以那些带有蓝牙硬件且安装了 bluez 软件包的服务器就需要特别注意这个问题。但是,默认的服务器安装并没有安装 bluez 软件包,因此 bluetooth.service 单元文件(以及 bluetoothd)并不存在。
不会受到影响的产品
利用此安全漏洞进行的安全攻击只有在,存在漏洞的 Bluetooth 模块被加载,且运行了 bluetoothd 服务的情况下才有可能成功。
以下版本的红帽产品不会受到影响:
RHEL Atomic Host。虽然它带有存在漏洞的 Bluetooth 模块,但它没有 bluetoothd 服务,因此不会受到此安全漏洞的影响。
Red Hat Enterprise Linux 7 s390x 版没有存在漏洞的 Bluetooth 模块,因此不会受到此安全漏洞的影响。
Red Hat Enterprise Linux 5 在内核中使用早期版本的、没有此漏洞的 Bluetooth 子系统,因此不会受到此安全漏洞的影响。
虽然红帽的 Linux Container 不会直接受到内核问题(此安全漏洞存在于内核的 Bluetooth 模块中)的影响,但是红帽还是推荐使用最新版本的容器镜像。Container Health Index(Red Hat Container Catalog的一部分)可以用来检查容器的安全状态。
安全攻击描述及可能的影响
Linux 内核的 Bluetooth(蓝牙)子系统在处理从一个客户端所发出的待定的 L2CAP 配置的过程中存在一个安全漏洞。如果系统的堆栈保护功能在内核中启用(CONFIG_CC_STACKPROTECTOR=y,它会在除 s390x 和 ppc64[le] 以外的所有系统中启用),一个未授权的用户可以利用这个安全漏洞,在通过蓝牙连到系统时对系统进行破坏。因为堆栈保护功能的特性,我们无法完全排除攻击者利用这个安全漏洞运行恶意代码的可能性(我们相信这种可能性存在的机会非常小)。在没有使用堆栈保护功能的系统上(ppc64[le]。蓝牙模块没有包括在 s390x 中),一个未授权的攻击者可以通过蓝牙连接到系统,并利用这个漏洞在系统上使用 ring 0 (kernel) 权限远程运行任意代码。这一类的安全漏洞通常被称为“缓冲溢出”问题,攻击者可以利用这个漏洞,通过运行超过所分配缓冲区范围的任意代码来使某个程序函数错误地返回一个指针。因为是通过蓝牙来进行攻击,所以攻击者需要位于存在漏洞的系统的附近。
诊断您的系统
如果您的系统中存在蓝牙硬件,而且 Bluetooth 服务被启用并运行,则可能会受此漏洞的影响。特别是,此漏洞存在于 bluetooth.ko 内核模块代码中,如果系统加载了此模块,则系统就可能会存在此安全漏洞。
当系统启动且 Bluetooth 服务被启用时,Bluetooth 内核模块(bluetooth、btusb、bnep)会被自动加载。通过使用系统范围的 modprobe 规则可以防止特定内核模块被加载。运行以下命令来把 Bluetooth 模块放入黑名单,从而可以在有蓝牙硬件的情况下防止相关模块被加载:
这会通过以下方式缓解此安全漏洞的影响:在 /etc/modprobe.d/disable-bluetooth.conf 中创建一个黑名单文件,执行一个“假安装”来防止有安全漏洞的模块被加载。如果存在 Bluetooth 服务,它也会禁用 Bluetooth 服务。如果已有蓝牙模块被加载到运行的内核中,并且无法被删除,它会重启系统。因为存在了这个黑名单文件,相关的模块将不会被加载。在已解决此安全漏洞的软件包可用并被安装后,您就可以从 /etc/modprobe.d/disable-bluetooth.conf 中删除这个文件。
Comments