漏洞概述 Portainer(社区版,版本2.33.2)默认授予普通用户账户过多的特权,这些特权可能被滥用进行主机接管。具体而言,以下“Endpoint Security”特权在普通用户账户中默认设置为 : : 允许普通用户将主机上的任何路径绑定到容器实例中的路径。 : 允许普通用户以特权模式启动容器,从而获得与主机系统上root用户相同的命令执行能力。 : 允许普通用户启动与主机进程ID命名空间和IPC命名空间共享的容器。 : 允许普通用户启动可以访问主机设备的容器。 : 允许普通用户管理容器堆栈(基于docker compose文件,通过webhook触发等)。 : 允许普通用户选择一组可用于容器的root权限。 : 允许普通用户使用sysctl接口重新创建、复制或编辑容器。 影响范围 所有在2.38.0之前的Portainer版本都受到此问题的影响。 修复方案 Portainer在版本2.38.0(短期支持)和版本2.39.0(长期支持)中引入了对此问题的修复。从这些版本开始,Portainer的默认设置变得更加严格,如以下代码所示: 因此,现在可以在具有潜在不受信任用户(和可能不受信任的镜像)的环境中使用默认Portainer安装,而不会完全危及主机安全。建议进一步加固,例如对新创建的容器应用资源消耗限制。 概念验证(PoC) 为了证明漏洞的存在,创建了一个脚本,利用 特权读取主机上的 文件。PoC脚本可以在这里找到。 运行脚本的输出如下: 现在可以检查收集的 文件: 建议 如果您在具有潜在不受信任用户的环境中使用Portainer,我们强烈建议升级到带有修复程序的Portainer版本,并审查您的设置的“Docker Security Settings”(见图1)。 !Docker Security Settings