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
漏洞类型
:
提权
利用难度
:
中等
Linux Kernel是由 Linus Torvalds最初开发的开源的操作系统内核。实现了包括CPU,进程,内存,文件系统等核心模块,被广泛移植到Alpha、arc、arm、ia64、mips、powerpc、sparc、x86-64等许多体系结构上。目前多用于各种服务器和物联网终端等,也可在桌面终端使用Linux。
linux内核的bpf模块的verifier.c文件中的scalar32_min_max_or() 函数存在漏洞。由于该函数错误地使用了64位值处理边界跟踪,导致边界检查错误,攻击者可以利用此漏洞进行权限提升。Linux kernel5.7至5.8.14版本受影响。
该漏洞位于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
输入以下命令查看本机的内核版本
uname -a
如显示的Linux version大于等于5.7且小于等于5.8.14,则漏洞可能存在。
升级内核版本,可从以下链接选择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等系统使用)
将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等系统使用)