马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
2024 年 3 月起,Linux 内核的 netfilter 子系统里一个权限提升漏洞(CVE-2024-1086)的公开利用代码在网上流传开来,CVSS 评分 7.8。受影响面覆盖 CentOS、Debian、Ubuntu 等主流发行版的多个内核版本。这篇文章把它归为「需要防守方关注并尽快处置」的漏洞类型,重点讲清楚影响范围、为什么一部分环境不受影响,以及三条可落地的修复路径。
一、漏洞成因一句话讲清
Netfilter 是 Linux 内核里处理数据包过滤、转发和地址转换(NAT)的模块。修复版本落在 nf_tables 组件上:在 nft_verdict_init() 函数里,允许把正值当作 hook 判定的丢弃错误返回,于是当 NF_DROP 被上层当作类似 NF_ACCEPT 的语义处理时,nf_hook_slow() 可能走到重复释放的路径上,形成 use-after-free。低权限的本地用户借助这个条件可以把权限提升到 root。
二、影响版本范围
官方列出的是这几段:
- 3.15 ≤ Linux kernel < 6.1.76
- 5.2 ≤ Linux kernel < 6.6.15
- 6.7 ≤ Linux kernel < 6.7.3
- 6.8 的 rc 版本同样在列
也就是说 v5.14 到 v6.6 之间的多数内核都在范围内(已单独修补的 5.15.149、6.1.76、6.6.15 除外)。
三、哪几种环境天然不受影响
这是最有用的部分,能直接决定你的机器要不要马上动:
- 开了 kconfig CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y 的 v6.4 以上内核不受影响(含 Ubuntu 6.5 及以后)。
- 整个利用依赖用户命名空间(kconfig CONFIG_USER_NS=y)且运行时允许非特权用户创建(sysctl kernel.unprivileged_userns_clone=1),同时 nf_tables 模块已启用。Debian、Ubuntu、KernelCTF 默认这三项都是开的,所以实际风险面不小。
- 该利用只在 x64/amd64 上实测过。
- 网络活动密集的机器(尤其是带高负载 WiFi 的环境)利用过程极不稳定,可能直接内核恐慌,反而更容易被察觉。
四、方法 一:升级内核(首选)
下面以 CentOS 7.9 实测为例,从 ELRepo 装新内核:
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
列出仓库里可装的内核(--enablerepo 是临时开启指定的 repo,默认开的是 elrepo 而非 elrepo-kernel):
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml -y
装完设 GRUB 默认项:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 0
vi /etc/default/grub
在 GRUB_DEFAULT 处填 0,再把 GRUB_TIMEOUT 设成 5 留足手动选择时间。然后重新生成 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
重启后验证:
uname -r
rpm -qa | grep kernel
确认在跑的是新内核后,把用不到的旧内核包 remove 掉,避免多内核占用 /boot 空间、也减少被回退的可能。
五、方法 二:屏蔽 nf_tables 模块(临时缓解)
业务确实不能停、内核暂时不能升的场景,可以先不让这个模块加载:
lsmod | grep nf_tables
确认已加载后,在 /etc/modprobe.d/ 下建一个黑名单文件,比如 nf_tables-blacklist.conf,内容一行:
blacklist nf_tables
重启生效,再确认模块文件位置:
find / -name "*nf_tables*"
modinfo nf_tables
重启后 lsmod | grep nf_tables 没有输出,就说明屏蔽成功。注意:nf_tables 是 nftables 防火墙的后端,屏蔽后 nft 相关规则会失效,如果这台机器在用 nftables 做防火墙,这条路要先评估业务影响。
六、方法 三:限制用户命名空间(跑容器时的选择)
如果模块不能屏蔽、容器也没在跑,可以退一步限制用户命名空间:
RedHat/CentOS:
echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
sysctl -p /etc/sysctl.d/userns.conf
Debian/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
七、选哪条、注意什么
- 能升内核就升,这是唯一根治手段,其余两条都是缓解。
- 屏蔽模块前先确认机器上有没有在用 nftables 防火墙,误伤了就是断网。
- 禁用用户命名空间前必须评估容器依赖——很多容器实现要用 user_namespaces 做安全增强和隔离,一禁可能起不来。
- 缓解措施生效后要设一个复查时间点,比如两周内必须把内核升上去,否则就一直裸奔。
- 生产环境任何一项改动前先快照或备份,先在测试机跑一遍。
最后说明一句:本文所有内容只面向管理员对本机、自有资产或已明确授权环境的补丁管理与自查工作,不提供任何利用构造细节。
qidao123.com企服评测-应用市场 编辑提示
|