Linux内核eBPF verifier漏洞复现及提权攻击

图片[1]-Linux内核eBPF verifier漏洞复现及提权攻击-山海云端论坛

影响版本:

  • Linux kernel 5.8 – 5.16

不受影响版本:

  • Linux kernel 5.10.92, 5.15.15, 5.16.1

使用条件:

  1. 目标Linux内核版本在影响范围内。
  2. cat /proc/sys/kernel/unprivileged_bpf_disabled 返回值必须为0。

02. 环境准备

在进行操作之前,请务必创建虚拟机快照以备不测。

由于我使用的Linux内核不在受影响的版本范围内,因此我需要切换到一个受影响的内核版本作为实验环境。

查询内核版本:

<code>uname -a</code>
图片[2]-Linux内核eBPF verifier漏洞复现及提权攻击-山海云端论坛

修改内核版本:

<code>sudo apt install linux-image-5.13.0-21-generic</code>

安装完成后,请重新启动虚拟机。在重启过程中,按住ESC键选择内核版本。

03. 漏洞复现

3.1 写入公钥

首先,下载漏洞利用程序并传输到目标服务器上。你可以从以下链接获取漏洞利用程序:CVE-2022-23222,或者使用以下git命令:

<code>git clone https://gitclone.com/github.com/tr3ee/CVE-2022-23222.git</code>

进入目录并编译,生成一个名为exploit的可执行文件。

运行漏洞利用程序:

<code>./exploit</code>

如果没有成功提权,请检查/proc/sys/kernel/unprivileged_bpf_disabled的值:

<code>cat /proc/sys/kernel/unprivileged_bpf_disabled</code>
  • 返回0表示允许非特权用户调用BPF。
  • 返回1表示禁止非特权用户调用BPF且该值不可再修改。
  • 返回2表示禁止非特权用户调用BPF,但可以再次修改为0或1。

如果你当前用户无法将该返回值修改为0,则基本无法利用此漏洞进行提权。

修改unprivileged_bpf_disabled的值:

<code>echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled</code>

然后切换至root用户并尝试再次提权。如果出现警告,请修改exploit.c中的相应if语句并重新编译。

参考链接:

https://github.com/tr3ee/CVE-2022-23222

https://www.anquanke.com/post/id/275966

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容