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查看加载情况,这时候就没有输入了(未加载)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。