一、背景
针对Linux内核提取权限漏洞 (漏洞编号CVE-2024-1086),整理离线环境的修复方案。本文以离线修复方案为主进行说明,第八章对在线修复方案进行说明。
(一) 漏洞简介
近日,绿盟科技CERT监测网上有研究员公开披露了一个Linux内核权限提升漏洞(CVE-2024-1086)的细节信息与验证工具,由于Linux内核的netfilter:nf_tables组件存在释放后重利用漏洞, nft_verdict_init() 函数允许在钩子判定中使用正值作为丢弃错误,当 NF_DROP 发出类似于 NF_ACCEPT 的丢弃错误时,nf_hook_slow() 函数会导致双重释放漏洞,本地攻击者利用此漏洞可将普通用户权限提升至 root 权限。目前已有PoC公开,请相关用户尽快采取措施进行防护。目前已有PoC公开,请相关用户尽快采取措施进行防护。
Netfilter是Linux内核提供的一个框架,它允许以自定义处理程序的形式实现各种与网络相关的操作。Netfilter为数据包过滤、网络地址转换和端口转换提供了各种功能和操作,它们提供了通过网络引导数据包和禁止数据包到达网络中的敏感位置所需的功能。
(二) 影响范围
受影响版本
3.15 <= Linux kernel < 6.1.76
6.2 <= Linux kernel < 6.6.15
6.7 <= Linux kernel < 6.7.3
Linux kernel = 6.8-rc1
不受影响版本
Linux kernel = 4.19.307
Linux kernel = 5.4.269
Linux kernel = 5.10.210
Linux kernel = 5.15.149
Linux kernel >= 6.1.76
Linux kernel >= 6.6.15
Linux kernel >= 6.7.3
Linux kernel >= 6.8-rc2
直接安装6.9.4新版本的内核如需要安装不受影响的版本请自行解决
二、检查内核版本
远程服务器,使用uname -r命令查看操作系统内核版本
三、下载新版内核
(一) 下载公钥,用于校验软件包
RPM-GPG-KEY-elrepo.org
https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
(二) 下载ELRepo源
根据操作系统下载对应版本ELRepo源
Centos 9:elrepo-release-9.el9.elrepo.noarch.rpm
https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
其他操作系统
Centos 8:
https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
Centos 7:
https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
(三) 下载新版内核
1. 方案A
找一台相同操作系统,可联网的服务器,下载内核相关安装包,默认下载最新版本
yum install --downloadonly --downloaddir=/home/kernel --enablerepo=elrepo-kernel kernel-ml
yum install --downloadonly --downloaddir=/home/kernel --enablerepo=elrepo-kernel kernel-ml-core
yum install --downloadonly --downloaddir=/home/kernel --enablerepo=elrepo-kernel kernel-ml-modules
命令说明:
yum install 安装软件包
–enablerepo=elrepo-kernel 此次安装过程中临时启用elrepo-kernel这个仓库
kernel-ml 新版内核软件包名称
注意默认源中的内核软件包名称为kernel
ml版与lt版可共存
目前CetnOS 9只有ml版本
kernel-ml: 稳定主线版,支持周期短,更新速度快,更快体验新特性。
kernel-lt: 长期维护版,支持周期长,更新速度慢,更加稳定。
2. 方案B
访问ELRepo官方网站下载对应内核版本
①打开下载页面
download [ELRepo Wiki]
②选择任意镜像网站,下载内核版本即可
Centos 9:Index of /kernel/el9/x86_64/RPMS
其他操作系统
Centos 8:Index of /kernel/el8/x86_64/RPMS
Centos 7:Index of /kernel/el7/x86_64/RPMS
③下载如下三个内核包
kernel-ml-6.9.3-1.el9.elrepo.x86_64.rpm
kernel-ml-core-6.9.3-1.el9.elrepo.x86_64.rpm
kernel-ml-modules-6.9.3-1.el9.elrepo.x86_64.rpm
离线下载地址
kernel-6.9.4官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘
四、安装新版内核
将下载的安装包上传至目标服务器,使用cd命令导航至安装包所在目录
[root@localhost kernel]# uname -r
4.18.0-305.el8.x86_64
[root@localhost kernel]# grubby --default-kernel
/boot/vmlinuz-6.9.4-1.el8.elrepo.x86_64
[root@localhost kernel]# grubby --default-index
0
[root@localhost kernel]# grubby --info=ALL | egrep -i 'index|title'
index=0
title="Enterprise Linux (6.9.4-1.el8.elrepo.x86_64) 8.10"
index=1
title="Red Hat Enterprise Linux (4.18.0-305.el8.x86_64) 8.4 (Ootpa)"
index=2
title="Red Hat Enterprise Linux (0-rescue-653201c415464454946530cbf641d7e1) 8.4 (Ootpa)"
[root@localhost kernel]# grubby --set-default /boot/vmlinuz-6.9.4-1.el8.elrepo.x86_64
The default is /boot/loader/entries/653201c415464454946530cbf641d7e1-6.9.4-1.el8.elrepo.x86_64.conf with index 0 and kernel /boot/vmlinuz-6.9.4-1.el8.elrepo.x86_64
[root@localhost kernel]# uname -r
4.18.0-305.el8.x86_64
[root@localhost kernel]# grubby --default-kernel
/boot/vmlinuz-6.9.4-1.el8.elrepo.x86_64
[root@localhost kernel]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-6.9.4-1.el8.elrepo.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet $tuned_params"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-6.9.4-1.el8.elrepo.x86_64.img $tuned_initrd"
title="Enterprise Linux (6.9.4-1.el8.elrepo.x86_64) 8.10"
id="653201c415464454946530cbf641d7e1-6.9.4-1.el8.elrepo.x86_64"
index=1
kernel="/boot/vmlinuz-4.18.0-305.el8.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet $tuned_params"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-4.18.0-305.el8.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-305.el8.x86_64) 8.4 (Ootpa)"
id="653201c415464454946530cbf641d7e1-4.18.0-305.el8.x86_64"
index=2
kernel="/boot/vmlinuz-0-rescue-653201c415464454946530cbf641d7e1"
args="ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-0-rescue-653201c415464454946530cbf641d7e1.img"
title="Red Hat Enterprise Linux (0-rescue-653201c415464454946530cbf641d7e1) 8.4 (Ootpa)"
id="653201c415464454946530cbf641d7e1-0-rescue"
五、关闭安全引导(可选特殊情况)
新版内核安装完,重启服务器,部分服务器会报错无法进入,需要联系虚拟机管理人员禁用 UEFI 安全引导
具体操作步骤如下:
①关闭虚拟机
②邮件虚拟机编辑设置
③虚拟机选项》引导选项》安全引导,去除已启用
④启动虚拟机即可正常进入服务器
VMVare有 UEFI 安全引导的说明
六、重启服务器
重启服务器使用uname -r命令,查看内核版本,已升级至最新版本
卸载不需要的内核重启
成功替换内核