linux内核的bpf模块的verifier.c文件中的scalar32_min_max_or() 函数存在漏洞。由于该函数错误地使用了64位值处理边界跟踪,导致边界检查错误,攻击者可以利用此漏洞进行权限提升。Linux kernel5.7至5.8.14版本受影响。
漏洞名称 : Linux内核eBPF权限提升漏洞(CVE-2020-27194)
威胁等级 : 中危
影响范围 : Linux kernel 5.7-5.8.14
漏洞类型 : 提权
利用难度 : 中等
漏洞分析
1 Linux Kernel介绍
Linux Kernel是由 Linus Torvalds最初开发的开源的操作系统内核。实现了包括CPU,进程,内存,文件系统等核心模块,被广泛移植到Alpha、arc、arm、ia64、mips、powerpc、sparc、x86-64等许多体系结构上。目前多用于各种服务器和物联网终端等,也可在桌面终端使用Linux。
2 漏洞描述
linux内核的bpf模块的verifier.c文件中的scalar32_min_max_or() 函数存在漏洞。由于该函数错误地使用了64位值处理边界跟踪,导致边界检查错误,攻击者可以利用此漏洞进行权限提升。Linux kernel5.7至5.8.14版本受影响。
3 漏洞分析
该漏洞位于linux的kernel/bpf/verifier.c文件的scalar32_min_max_or() 函数,这个函数实现了ALU32(32位寄存器操作)的或运算的边界跟踪,其函数代码如下:
涉及漏洞的部分代码及其修复如下:
主要的修改是将原来的smin_value,umin_value和umax_value改为了这些数值对应的32位值。原先的赋值将64位无符号值直接赋值给32位有符号变量是错误的,这在umax_value大于2^32时会出现整数截断,导致边界检查绕过。修复的代码进行了正确的32位有符号值比较。
影响范围
【影响版本】
Linux kernel 5.7-5.8.14
解决方案
1 检测方案
输入以下命令查看本机的内核版本
uname -a
如显示的Linux version大于等于5.7且小于等于5.8.14,则漏洞可能存在。
2 修复建议
升级内核版本,可从以下链接选择5.8.15及其后的版本安装:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
或使用命令升级:
sudo apt-get install linux-generic-lts-xenial linux-image-generic-lts-xenial (ubuntu,debian等系统使用)
yum -y update kernel (CentOS,RedHat等系统使用)
3 临时修复方案
将kernel.unprivileged_bpf_disabled sysctl设置为1,限制普通用户权限可以临时缓解该漏洞,方法如下:
$sudo sysctl kernel.unprivileged_bpf_disabled=1
$ echo kernel.unprivileged_bpf_disabled=1 | sudo tee /etc/sysctl.d/CVE-2020-27194.conf(ubuntu,debian等系统使用)
sysctl -w kernel.unprivileged_bpf_disabled=1(CentOS,RedHat等系统使用)
时间轴
2020/10/14 Linux 5.8.15版本发布
2020/10/16 CVE确认收录漏洞
2020/11/4 深信服千里目安全实验室发布漏洞通告
参考链接
1. https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.8.15
2. https://github.com/torvalds/linux/commit/5b9fbeb75b6a98955f628e205ac26689bcb1383e
点击阅读原文,及时关注并登录深信服智安全平台,可轻松查询漏洞相关解决方案。
本文始发于微信公众号(深信服千里目安全实验室):Linux内核eBPF权限提升漏洞通告(CVE-2020-27194)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论