Linux内核eBPF权限提升漏洞通告(CVE-2020-27194)

  • A+
所属分类:安全漏洞

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介绍

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位寄存器操作)的或运算的边界跟踪,其函数代码如下:

Linux内核eBPF权限提升漏洞通告(CVE-2020-27194)

涉及漏洞的部分代码及其修复如下:

Linux内核eBPF权限提升漏洞通告(CVE-2020-27194)

主要的修改是将原来的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)



本文始发于微信公众号(深信服千里目安全实验室):Linux内核eBPF权限提升漏洞通告(CVE-2020-27194)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: