前言
CVE-2021-1056是我前一段时间提交给NVIDA PSIRT的一个存在于NVIDIA GPU驱动程序中与设备隔离相关的安全漏洞。
前几天NVIDIA已经发布了安全公告和补丁,所以在这里记录一下这个漏洞相关的验证和理解,漏洞利用代码和其他一些信息已经开源在GitHub。
利用这个漏洞,通过在容器中创建特殊的字符设备文件,一个非特权容器中的攻击者能够获取宿主机上所有GPU设备的权限。
我认为这个漏洞在多租户HPC集群,尤其是在深度学习云平台上,会带来显而易见的安全风险。
验证环境
- Docker 19.03
- nvidia-container-toolkit
- NVIDIA Driver 418.87.01 / 450.51.05
- NVIDIA GPU Tesla V100 / TITAN V / Tesla K80
这里我只在很少几个环境上进行了验证,但是按照NVIDIA发布的安全公告的描述来看,这个漏洞在GeForce,NVIDIA RTX/Quadro,NVS 和 Tesla系列所有GPU以及所有版本的驱动上都存在。
验证
首先clone一下利用代码
$ git clone https://github.com/pokerfaceSad/CVE-2021-1056.git
$ cd CVE-2021-1056
启动一个GPU容器并且把刚刚clone的代码挂载进去
$ docker run --gpus 1 -v $PWD:/CVE-2021-1056 -it tensorflow/tensorflow:1.13.2-gpu bash
在容器中检查一下GPU状态,发现只有一块GPU,正常
In Container# nvidia-smi
Sat Jan 9 07:21:03 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... Off | 00000000:02:00.0 Off | 0 |
| N/A 27C P0 23W / 250W | 0MiB / 32510MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
|