CVE-2024-1086 Linux kernel nf_tables 本地提权漏洞修复方法--多种方式,亲测!!!

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 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 重启生效
 

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 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.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_64
yum remove -y kernel-5.10.0-60.18.0.50.oe2203.x86_64
yum remove -y kernel-tools-5.10.0-60.18.0.50.oe2203.x86_64
yum 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查看加载情况,这时候就没有输入了(未加载)

  • 33
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值