Docker管理工具Portainer中的多个漏洞

iso60001  288天前

22.png

介绍

Portainer是一个轻量级的管理UI,可帮助用户轻松地管理Docker主机或Swarm集群。在过去的几个月中,FortiGuard实验室一直与Portainer团队密切合作,解决了在Portainer软件中发现的多个漏洞。以下将提供这些漏洞的概述。

在撰写本文时,本文所提及的所有漏洞都已被Portainer修复,这种快速反应是对客户负责的表现。

FG-VD-19-118和FG-VD-19-119:跨站点脚本

Portainer 1.23.0之前的所有版本都存在两个XSS漏洞。第一个XSS位于一个多选HTML组件中,主要功能是让管理员创建一个新用户,不过用户名处可以插入一个由javascript编写的payload。

33.png

当恶意payload插入成功时,一旦管理员访问显示用户列表的页面时,XSS就会被触发。

44.png

此外端点访问管理页面也会受到这个payload的影响。

55.png

第二个XSS漏洞存在于用户删除文件时的确认框中。任何被授权用户都可以上传任意文件名(插入payload)的文件。当其他用户试图删除这个文件时,XSS将被触发。

66.png

FG-VD-19-123:上传功能中的路径遍历漏洞

Portainer可让用户通过卷浏览(volume browser)上传文件。相关端点会检索用于上传文件的三个参数:卷ID、文件名和文件路径。但是,只有文件路径才会被安全过滤。因此,可以通过操作卷ID或文件名(插入敏感字符)来遍历路径,将文件上载到容器内的任意位置。

77.png

因此,HELLO文件并没有被上传到_data目录中,而是其父目录。

88.png

通过利用该漏洞,任何被授权用户都可以在Portainer容器中上传和执行任意可执行文件,这其中还牵涉到访问控制漏洞(授权绕过)和扩展激活(Extension Activation)时的安全检查缺陷。

FG-VD-19-122和FG-VD-19-124:认证绕过

在1.23.0之前的Portainer版本中,所有权模块允许用户指定谁拥有访问其资源的权限。在默认情况下,Portainer根据为每个用户定义的访问控制级别强制对docker中的资源进行访问权限控制,管理员可以完全控制所有资源。但是,Portainer的所有权模块依赖于对象ID,而这通常是一个随机且唯一的UUID。如果用户知道对象ID,就可以访问该资源。

依靠一个随机独特UUID为管理员提供整体资源控制似乎是一个合理的方案,因为这是一个几乎不可能暴力猜测出的随机对象ID。然而,卷资源还可以通过卷名访问,这比UUID更容易猜到。

下图是一个管理员所控制的卷:

99.png

其他没有权限的用户是看不到这个卷的:

100.png

但是,如果他们知道卷名,则可直接通过URL进行访问:

110.png

因此,任何用户都可以下载、上传或删除卷中的任何数据。另外,Portainer的卷还包含一个名为portainer.db的文件,是一个存储用户凭证的数据库。而通过改动这个数据库,用户可以将其权限升级到管理员或查看其他敏感信息。

这个漏洞是由于对Extension Activation的访问控制不当所造成的,其中任何经过身份验证的用户都可以访问Extension页面并激活许可证。经过身份验证的用户可覆盖扩展可执行文件并通过激活相应扩展来执行它,最终导致在Portainer容器中执行恶意代码。

另一个认证绕过出现在Host Filesystem Management功能中,它可帮助管理员从UI管理主机文件系统,只有管理员才有这个权限。下图显示普通用户被拒绝访问。

120.png

但是,这种拒绝只在发生在UI中。API端点仍然允许任何经过身份验证的用户使用此功能:

130.png

此时,任何经过身份验证的用户都将拥有对主机文件系统的完全权限。这是一个高危漏洞,但它只在启用了Host Filesystem Management功能时才有效。下一个漏洞是FG-VD-19-120,一个不同的故事。

FG-VD-19-120:不受限的访问主机文件系统

在Portainer中,用户有两种创建容器的方法:单独创建容器或将多个容器一起创建。当单独创建一个新的容器时,用户可以选择将主机文件系统挂载到容器中:

140.png

管理员可以禁止非管理员进行绑定挂载:

150.png

当禁用绑定挂载时,普通用户将不能使用主机文件路径映射卷。但是,由于在创建大量容器时没有安全检查,通过指示Docker将主机文件路径绑定到Compose文件的容器中,我们就可以直接访问主机文件系统,不管是否允许挂载。

160.png

而此漏洞的相关补丁新增对Compose文件的解析,禁止绑定挂载:

170.png

后续

FortiGuard实验室在2019年9月向Portainer报告了这7个漏洞,随后双方密切合作,迅速解决了所有问题。所有的漏洞都很容易利用,且危害较大。

除了XSS,其他都算是逻辑漏洞,最好的修复建议是尽快升级到Portainer release 1.23.0。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://www.fortinet.com/blog/threat-research/seven-critical-vulnerabilities-portainer.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+fortinet%2Fblog%2Fthreat-research+%28Fortinet+Threat+Research+Blog%29

最新评论

昵称
邮箱
提交评论