Linux 内核权限提升漏洞CVE-2024-1086三种修复方法

2024-06-22 19:20

本文主要是介绍Linux 内核权限提升漏洞CVE-2024-1086三种修复方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

一、漏洞概述

在这里插入图片描述

漏洞成因:

Netfilter是Linux内核中的一个数据包处理模块,它可以提供数据包的过滤、转发、地址转换NAT功能。

2024年3月28日,监测到 Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露。

Linux内核版本v5.14 – v6.6的netfilter 子系统nf_tables组件中存在释放后使用漏洞,由于在nft_verdict_init()函数中,允许正值作为hook判决中的丢弃错误,因此当NF_DROP发出类似于NF_ACCEPT的丢弃错误时,nf_hook_slow()函数可能会导致双重释放漏洞,本地低权限威胁者可利用该漏洞将权限提升为root。

二、漏洞影响范围

3.15<= Linux kernel < 6.1.76
5.2<= Linux kernel < 6.6.15
6.7<= Linux kernel < 6.7.3
6.8:rc1 = Linux kernel

该漏洞影响了使用Linux内核版本v5.14 – v6.6 版本(不包括分支修补版本 v5.15.149、v6.1.76和v6.6.15)的大多数Linux系统/内核,包括CentOS、Debian、Ubuntu和KernelCTF等,部分测试内核版本及结果如下:
在这里插入图片描述
注意事项:

(1)该漏洞不适用于带有 kconfig 的 v6.4> 内核CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y(包括 Ubuntu v6.5)

(2)该漏洞利用需要用户命名空间 (kconfig CONFIG_USER_NS=y),这些用户命名空间没有特权 (sh command sysctl kernel.unprivileged_userns_clone= 1),并且 nf_tables 已启用 (kconfig CONFIG_NF_TABLES=y)。默认情况下,这些在 Debian、Ubuntu 和 KernelCTF 上均已启用。其他发行版尚未经过测试,但可能也可以工作。此外,该漏洞仅在 x64/amd64 上进行了测试。

(3)在具有大量网络活动的系统上, 该漏洞可能非常不稳定

带有 WiFi 适配器的系统,当被高使用率 WiFi 网络包围时,会非常不稳定。

在测试设备上,请通过 BIOS 关闭 WiFi 适配器。

(4)运行漏洞后的内核恐慌(系统崩溃)是一种副作用,没有故意修复以防止恶意使用漏洞(即,漏洞利用尝试现在应该更引人注目,并且在实际操作中不切实际)。尽管如此,它仍然允许在实验室环境中进行有效的概念验证,因为根 shell 可以正常工作,并且可以通过磁盘进行持久化。

三、修复方法

主要有以下三种修复方法:

  • 升级Linux内核版本修复漏洞。
  • 若相关用户暂时无法进行更新,如果业务不需要,可以通过阻止加载受影响的 netfilter (nf_tables) 内核模块来缓解。
  • 如果无法禁用该模块,可在非容器化部署中,对用户命名空间进行限制。

方法1:在线升级Linux内核版本

####以下是在centos7.9环境进行测试:1、更新yum源,具体版本可以去https://elrepo.org/linux/kernel/el7/x86_64/RPMS/ 这里找
yum -y update
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm  2、使用最新的内核查询kernet版本 
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml -y--enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换3、设置 grub2 重启生效awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg0 : CentOS Linux (5.10.7-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-df90baaeef85440fac1251df1c0e0371) 7 (Core)grub2-set-default 0
vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0 #改为0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"5、生成grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg6、重启reboot7、验证
# uname -r
5.10.7-1.el7.elrepo.x86_64# rpm -qa | grep kernel
kernel-3.10.0-693.el7.x86_64
kernel-ml-5.10.7-1.el7.elrepo.x86_64
kernel-tools-libs-3.10.0-1160.11.1.el7.x86_64
kernel-3.10.0-1160.11.1.el7.x86_64
kernel-headers-3.10.0-1160.11.1.el7.x86_64
kernel-tools-3.10.0-1160.11.1.el7.x86_648、删除多余的内核yum remove kernel-3.10.0-514.el7.x86_64 \
kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 \
kernel-tools-3.10.0-862.11.6.el7.x86_64 \
kernel-3.10.0-862.11.6.el7.x86_64

方法二:阻止加载受影响的 netfilter (nf_tables) 内核模块

1、查询是否被加载:lsmod | grep nf_tables2、修改 /etc/modprobe.d/blacklist.conf或在/etc/modprobe.d/目录下创建<模块名>.conf文件我这里创建了一个名为nf_tables-blacklist.conf
vi /etc/modprobe.d/nf_tables-blacklist.conf内容是:
blacklist nf_tables3、重启服务器reboot4、查询netfilter (nf_tables)内核模块位置find / name | grep nf_tables5、测试加载模块加载该模块:insmod nf_tables.ko.xz 报错,发现无法加载,修复完成。# insmod nf_tables.ko.xz

方法三:容器内系统禁用方法

如果无法禁用 nf_tables 内核模块,在系统上没有运行任何容器的情况下,可以通过禁用用户命名空间来缓解漏洞。在禁用之前,需要仔细评估并确认禁用所带来的影响,

例如:许多容器实现需要使用 user_namespaces 来增强安全性和隔离性。

RedHat/CentOS:# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf# sysctl -p /etc/sysctl.d/userns.confDebian/Ubuntu:如果不需要,可禁用非特权用户创建命名空间的能力。临时禁用执行以下命令:# sudo sysctl -w kernel.unprivileged_userns_clone=0重启后仍然禁用:# echo kernel.unprivileged_userns_clone=0 | sudo tee /etc/sysctl.d/99-disable-unpriv-userns.conf

请添加图片描述

这篇关于Linux 内核权限提升漏洞CVE-2024-1086三种修复方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085187

相关文章

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window