更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)
一
漏洞背景
近日,国外安全研究人员披露一个Linux eBPF verifier组件错误验证漏洞,此漏洞源于bpf验证系统在Linux内核中没有正确计算某些操作的寄存器边界跟踪,导致本地攻击者可以利用此缺陷进行内核信息泄露或特权提升,该漏洞编号为CVE-2020-27194。二
影响范围与防护措施
1、影响范围Linux-5.7 ~ Linux-5.8.14
Ubuntu 20.10
2、防护措施
及时更新升级内核;
将kernel.unprivileged_bpf_disabled.sysctl设置为1,临时限制普通用户权限。
三
漏洞原理与调试分析
1、漏洞原理 该漏洞和Pwn2own2020比赛中使用的CVE-2020-8835漏洞原理一致,均是错误计算了寄存器边界跟踪,导致可以绕过验证器检查达到越界读写。缺陷代码出现在kernel/bpf/verifier.c的scalar32_min_max_or()函数中,该函数是在commit_id:3f50f132d840中引入的,该功能实现了显式的ALU32(32位计算类操作)寄存器边界跟踪,处理OR运算时,调用scalar32_min_max_or()函数进行32位寄存器边界跟踪,该函数实现如下:
2、调试分析
首先将寄存器的umin_value设置为0x1,可以通过如下BPF指令实现:![3cab3b8179b3c1c05c2ada869e6697ce.png](https://i-blog.csdnimg.cn/blog_migrate/bf9c929ac6d7696c14daf3bff36be397.png)
四
漏洞复现
在Linux-5.7.7版本中进行漏洞利用,成功提权。[2] https://github.com/torvalds/linux/commit/5b9fbeb75b6a98955f628e205ac26689bcb1383e
[3] https://github.com/torvalds/linux/commit/3f50f132d8400e129fc9eb68b5020167ef80a244
[4] https://scannell.me/fuzzing-for-ebpf-jit-bugs-in-the-linux-kernel/
启明星辰积极防御实验室(ADLab)
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1100个,通过 CNVD/CNNVD累计发布安全漏洞900余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。