#今天又看了啥 #security #CVE #docker
CVE-2026-33590 — Portainer 默认配置不安全导致宿主机接管
CVSS 3.1 8.2 HIGH
Portainer < 2.38.0 的 Endpoint Security 默认配置过度宽松,允许普通用户(非管理员)在创建容器时启用 bind mount、privileged mode、host namespace 等高危能力,攻击者可借此挂载宿主机文件系统或以特权模式运行容器,实现从容器逃逸到宿主机的完全接管。
默认开启的危险配置项(共 7 项)
- allowBindMountsForRegularUsers — 允许挂载宿主机任意路径
- allowPrivilegedModeForRegularUsers — 允许特权模式
- allowHostNamespaceForRegularUsers — 允许共享宿主机 PID/IPC namespace
- allowDeviceMappingForRegularUsers — 允许访问宿主机设备
- allowContainerCapabilitiesForRegularUsers — 允许选择 root capabilities
- allowSysctlSettingForRegularUsers — 允许 sysctl 操作
- allowStackManagementForRegularUsers — 允许 compose stack 管理

PoC:以普通用户身份认证 → 找到本地 Docker endpoint → 用 alpine 镜像 bind mount 宿主机 /etc/ → 直接读取 /etc/shadow。

修复:升级至 2.38.0(STS)或 2.39.0(LTS),以上配置项默认改为 false(仅 stack 管理保留 true)。升级后需手动检查 Docker Security Settings。


说人话:
Portainer 老版本有个问题:管理员给你建了个普通账号,你能自己开个容器把整台宿主机的硬盘挂进去,然后随便翻文件、读密码、写 crontab——等于直接拿下宿主机 root。
原因是 Portainer 默认把 7 个高危开关全部打开了,比如"允许普通用户挂载宿主机目录""允许特权模式"。
你需要升级版本,然后去 Settings → Docker Security Settings 确认那些开关都关了。如果你是多人共用的 Portainer 实例,建议顺便审一下历史容器有没有被滥用过。

🔗 技术分析博文 · 安全公告

感觉这个漏洞本质上是个设计缺陷而非代码 bug,默认信任用户不会滥用容器特权,不过在多用户环境下还是有很大风险。
 
 
Back to Top