容器逃逸漏洞是云原生安全领域的核心威胁,攻击者通过利用这些漏洞可突破容器隔离环境,获取宿主机或集群控制权。

可以使用这个进行检测。检测脚本

一、容器运行时自身漏洞

此类漏洞源于容器引擎或运行时组件的设计缺陷。

  1. CVE-2019-5736(runc逃逸)

    • 影响版本:Docker ≤18.09.2,runc ≤1.0-rc6。
    • 原理:runc 进程在启动容器时未正确隔离自身文件描述符,导致容器内恶意进程可覆盖宿主机的 runc 二进制文件,最终实现容器逃逸并获取宿主机 root 权限。
    • CVE-2019-5736(runc逃逸)
  2. CVE-2020-15257(containerd逃逸)

    • 影响版本:containerd <1.3.9 或 <1.4.3。
    • 原理:通过恶意容器构造特殊进程,利用 containerd-shim 进程的文件描述符(FD)管理缺陷,获取宿主机的敏感文件描述符,最终实现容器逃逸并访问宿主机资源。
    • CVE-2020-15257(containerd逃逸)

二、Linux内核漏洞

容器共享宿主机内核,内核漏洞可被用于逃逸。

  1. CVE-2016-5195(Dirty Cow)

    • 影响版本:Linux内核 2.6.22–4.8.3。
    • 原理:利用Linux写时复制(COW)机制竞争条件漏洞,覆盖只读内存页,实现本地提权并逃逸容器。
    • CVE-2016-5195(Dirty Cow)
  2. CVE-2021-22555(Netfilter堆溢出)

    • 影响版本:Linux内核 2.6.19-rc1~5.12-rc8。
    • 原理:Netfilter模块在处理32位进程的sockopt请求时发生堆溢出,攻击者通过堆喷(Heap Spraying)和UAF(Use-After-Free)技术控制内核内存,执行ROP链提权至root权限。
    • CVE-2021-22555(Netfilter堆溢出)
  3. CVE-2022-0847(Dirty Pipe)

    • 影响版本:Linux内核 5.8–5.10.102、5.15.0–5.15.25、5.16.0–5.16.11。
    • 原理:管道(pipe)缓冲区未初始化,攻击者覆盖宿主机敏感文件(如/etc/passwd或SSH密钥),实现权限提升。
    • CVE-2022-0847(Dirty Pipe)
  4. CVE-2022-0492(cgroup逃逸)

    • 影响版本:linux内核 5.17-rc3
    • 原理:利用cgroup v1的release_agent功能,通过挂载宿主机cgroup并触发恶意脚本,实现逃逸(需CAP_SYS_ADMIN权能)。
    • CVE-2022-0492(cgroup逃逸)

三、不安全配置导致的逃逸

错误配置为攻击者提供逃逸路径,非代码漏洞但危害严重。

  1. 特权容器(–privileged)

    • 原理:启用--privileged标志的容器拥有宿主机所有权限,可直接操作宿主机设备(如挂载/dev/sda1)或加载内核模块突破隔离。
    • 特权容器逃逸(privileged)
  2. 挂载Docker Socket(/var/run/docker.sock)

    • 原理:容器内挂载宿主机的Docker Socket文件后,攻击者可通过Docker API创建特权容器或直接执行宿主机命令。
    • 挂载逃逸(Socket)
  3. 挂载逃逸(Procfs)

    • 原理:若将宿主机的/proc目录挂载到容器内,攻击者可利用其core_pattern等机制实现逃逸
    • 挂载逃逸(Procfs)
  4. Docker API未授权访问

四、防御建议

  • 及时更新容器运行时及内核补丁;
  • 禁用特权容器和危险挂载;
  • 使用安全沙箱(如gVisor)加强隔离;
  • 部署eBPF监控工具(如Falco)检测逃逸行为