收集一些能够导致容器逃逸的EXP,有一部分经过了的改造。尽可能清楚地从底层介绍了漏洞的原理以及利用思路,所有的exp都是经过本地验证的。
漏洞 | 描述 | 验证 |
---|---|---|
CVE-2021-22555 | 内核漏洞逃逸 | 已验证 |
CVE-2020-15257 | Containerd组件漏洞逃逸 | 已验证 |
CVE-2019-14271 | Docker组件漏洞逃逸 | 已验证 |
CVE-2019-5736 | Runc漏洞逃逸 | 已验证 |
CVE-2017-7308 | 内核漏洞逃逸 | 已验证 |
CVE-2016-5195 | 内核漏洞逃逸 | 已验证 |
CVE-2018-18955 | 内核漏洞提权 | 已验证 |
CVE-2018-15664 | Docker Daemon漏洞逃逸 | 已验证 |
错误配置 | 描述 | 验证 |
---|---|---|
--privileged | 特权容器导致的逃逸 | 已验证 |
Shocker | CAP_DAC_READ_SEARCH错误配置 | 已验证 |
未授权访问 | docker remote api未授权访问 | 未验证 |
不当挂载 | docker.sock挂载到容器内部 | 未验证 |
机制 | 说明 |
---|---|
Namespace | 提供多种资源的隔离 |
Cgroup | Linux Control Groups,分为v1和v2,主要限制进程可使用的资源 |
Capability | 根据最小权限原则设计的限制特权进程的能力的机制,漏洞防御最为有效的手段 |
Seccomp | 限制进程能够使用的系统调用 |
UnionFS | 联合文件系统系统,Docker通过联合文件系统实现镜像功能 |
--privileged
选项等同于将宿主机暴露给容器,可以完全绕过mnt namespace的限制,也可以进一步通过挂接/proc
的方式绕过pid namespace。- 和虚拟机相比,容器存在更多的逃逸攻击面:
- 系统内核的漏洞
- 容器组件本身的漏洞
- 错误的配置
- 和虚拟机相比,容器逃逸攻击成本非常低
- 更多逻辑漏洞
- 在错误的配置下,攻击无需绕过任何防御机制
- 和虚拟机相比,容器逃逸的形式更加灵活
- 由于隔离机制的分散性,逃逸往往不需要对于所有隔离机制的破解
- 各个隔离机制存在木桶效应
- 参考Metarget