在构建Dockerfile的过程中,即使是使用排名靠前的来源,也可能存在CVE漏洞、后门、镜像被污染、镜像中的依赖库存在漏洞等问题。
虽然Docker通过命名空间进行了文件系统资源的基本隔离,但仍有 /sys
、/proc/sys
、 /proc/bus
、 /dev
、time
、syslog
等重要系统文件目录和命名空间信息未实现隔离,而是与宿主机共享相关资源。
CVE-2022-0847 Dirty Pipe
CVE-2021-4034 Polkit
CVE-2018-18955
CVE-2016-5195
CVE-2021-41091
需要网络设置为 host 模式
CVE-2019-14271 Docker cp
CVE-2019-13139 Docker build code execution
Docker Version < 18.09.2
Version <= 1.0-rc6
开启privileged
挂载宿主机敏感目录
--cap-add=SYS_ADMIN
--net=host
--pid=host
--ipc=host
挂载 /var/run/docker.sock
挂载宿主机 /dev
/proc
等危险目录
通过 binfmt_misc
逃逸
通过 eBPF 逃逸
CPU耗尽
内存耗尽
存储耗尽
网络资源耗尽
虽然 Docker 容器具有很强的安全保护措施,但是 Docker 守护进程本身并没有被完善的保护。Docker 守护进程本身默认由 root 用户运行,并且该进程本身并没有使用 Seccomp 或者 AppArmor 等安全模块进行保护。这使得一旦攻击者成功找到漏洞控制 Docker 守护进程进行任意文件写或者代码执行,就可以顺利获得宿主机的 root 权限而不会受到各种安全机制的阻碍。值得一提的是,默认情况下 Docker 不会开启 User Namespace 隔离,这也意味着 Docker 内部的 root 与宿主机 root 对文件的读写权限相同。这导致一旦容器内部 root 进程获取读写宿主机文件的机会,文件权限将不会成为另一个问题。这一点在 CVE-2019-5636 利用中有所体现。
CVE-2014-5277
CVE-2014-6408
CVE-2014-9357
CVE-2014-9358
CVE-2015-3627
CVE-2015-3630