CVE-2024-1086 Linux kernel nf_tables 本地提权漏洞修复方法--多种方式,亲测!!!
攻城狮_AnHui 2024-06-24 12:37:01 阅读 83
centos、openeuler的处理方法
1. 漏洞描述
ThreatBook 用户登录
漏洞编号:CVE-2024-1086、CNNVD-202401-2670、CNVD-2024-14762
漏洞类型:缓冲区错误
漏洞平台:操作系统
利用方式:本地
漏洞描述:Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。nf_tables用于处理网络数据包。Linux Kernel存在本地提权漏洞,该漏洞源于 Linux kernel 的nf_tables组件在处理Netfilter规则时允许正数的丢弃错误(drop errors),攻击者可以通过设置恶意值对sk_buff对象进行双重释放后利用,并通过内核空间的镜像攻击(KSMA)获取任意物理内存地址的读写访问权限,导致本地权限提升。
2. 处置方法
Linux Kernel权限提升漏洞通告(CVE-2023-32233)-新华三集团-H3C
2.1. 官方补丁
目前官方已修复该漏洞,受影响用户可以升级更新到安全版本。官方下载链接:https://kernel.org
2.2. 临时解决措施
1、通过阻止加载受影响的 netfilter (nf_tables) 内核模块,将内核模块列入黑名单,参考链接:How do I prevent a kernel module from loading automatically? - Red Hat Customer Portal
2、若无法卸载模块 netfilter,在 Red Hat Enterprise Linux 8 的非容器化部署中,可以通过将 user.max_user_namespaces 设置为 0 来禁用用户命名空间:
# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
# sysctl -p /etc/sysctl.d/userns.conf
|
3. 修复实践
3.1. centos7.9修复
其他版本的应该差不多
3.1.1. 修复实践-官方补丁
3.1.1.1. 在线升级——只介绍方法
1、更新yum源,具体版本可以去https://elrepo.org/linux/kernel/el7/x86_64/RPMS/ 这里找
yum -y updaterpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
2、使用最新的内核
查询kernet版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list availableyum --enablerepo=elrepo-kernel install kernel-ml -y
--enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换
3、设置 grub2 重启生效
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : 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 0vi /etc/default/grub
GRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"GRUB_DEFAULT=0 #改为0GRUB_DISABLE_SUBMENU=trueGRUB_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.cfg
6、重启reboot
7、验证
[root@k8s-node2 ~]# uname -r
5.10.7-1.el7.elrepo.x86_64
[root@k8s-node2 ~]#
[root@k8s-node2 ~]#
[root@k8s-node2 ~]# 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_64
8、删除多余的内核
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
3.1.1.2. 离线升级
1、下载rpm包Index of /linux/kernel/el7/x86_64/RPMS 并上传到/root目录
下载地址Index of /linux/kernel/el7/x86_64/RPMS
2、安装内核源
注意我这里直接上传到了root目录
rpm -ivh kernel-lt-* --nodeps --force
查看内核启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
修改启动顺序
vi /etc/default/grub
GRUB_DEFAULT=saved 改为 GRUB_DEFAULT=0
重新加载内核
grub2-mkconfig -o /boot/grub2/grub.cfg
重启服务器
reboot
查看现在的内核版本
uname -a
【忘记截图了】
3.1.2. 通过阻止加载受影响的 netfilter (nf_tables) 内核模块,将内核模块列入黑名单
1、查询是否被加载:lsmod | grep nf_tables
2、修改 /etc/modprobe.d/blacklist.conf或在/etc/modprobe.d/目录下创建<模块名>.conf文件
我这里创建了一个名为nf_tables-blacklist.conf
vi /etc/modprobe.d/nf_tables-blacklist.conf内容是:blacklist nf_tables
3、重启服务器reboot
4、查询netfilter (nf_tables)内核模块位置
find / name | grep nf_tables
5、加载该模块:insmod nf_tables.ko.xz,发现无法加载,修复完成。
3.2. openeuler修复
测试只能做到阻止开机自动加载,手动加载还是可以的
3.2.1. 离线升级内核
1、下载rpm包安全公告详情并上传到/opt
2、安装内核源
要进入上传的目录cd /opt
rpm -ivh kernel-lt-* --nodeps --force
3、查看内核启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
4、重启服务器
reboot
查看现在的内核版本
uname -a
5、删除多余的内核
先查看安装的内核rpm -qa | grep kernel
yum remove -y kernel-devel-5.10.0-60.18.0.50.oe2203.x86_64yum remove -y kernel-5.10.0-60.18.0.50.oe2203.x86_64yum remove -y kernel-tools-5.10.0-60.18.0.50.oe2203.x86_64yum remove -y kernel-headers-5.10.0-60.18.0.50.oe2203.x86_64
3.2.2. 通过阻止加载受影响的 netfilter (nf_tables) 内核模块,将内核模块列入黑名单
1、openeuler默认开机就加载netfilter (nf_tables) 内核模块,可以使用lsmod | grep nf_tables查看加载情况
2、直接创建文件nf_tables-blacklist.conf
vi /etc/modprobe.d/nf_tables-blacklist.conf内容是:blacklist nf_tables
3、重启reboot
4、使用lsmod | grep nf_tables查看加载情况,这时候就没有输入了(未加载)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。