简介
此漏洞为Ubuntu本地提权漏洞,该漏洞产生在调用eBPF bpf(2)的Linux内核系统中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误,导致任意内存读写问题,低权限用户可使用此漏洞向系统发起拒绝服务攻击(内存破坏)或者提升系统权限。
影响版本为Ubuntu 16.04及以下的版本,仅影响Ubuntu/Debian发行版本
靶场下载地址https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.4.110.tar.gz
第一部分
关于EBPF(extended Berkeley Packet Filter):
一般来说,要向内核添加新功能,需要修改内核源代码或者编写内核模块来实现。而 eBPF 允许程序在不修改内核源代码,或添加额外的内核模块情况下运行。
EBPF是BPF的进阶版本,BPF 是专门为过滤网络数据包而创造的,其两大核心功能是过滤和复制,它也是tcpdump和wireshark实现的基础,以tcpdump为例,BPF一方面接受tcpdump经过libpcap转码后的滤包条件,根据这些规则过滤报文;另一方面也将符合条件的报文复制到用户空间,最终由libpcap发送给tcpdump。
ebpf架构图
第二部分
了解EBPF原理以及架构后,开始对Ubuntu 的靶机进行内核提权
靶场配置信息
在exploit-dbhttps://www.exploit-db.com/exploits/45010 上的poc源码(.c后缀)复制下来,
上传到Ubuntu中
使用gcc编译exploit
(3)执行exploit程序
(4)查看当前用户权限
漏洞分析主要是do_check中使用的模拟寄存器类型和实际执行函数中的寄存器类型不同,导致一些判断可以绕过do_check,执行攻击者注入的任意eBPF指令。
修复方法
- 建议用户升级至
- 系统调用来缓解:设置参数“kernel.unprivileged_bpf_disabled = 1”通过限制对ebpf 调用了访问来防止这种特权升级
- 打补丁