19% 的顶级 Docker 镜像没有 root 密码

上周六,18 月 XNUMX 日,Kenna Security 的 Jerry Gamblin 我测试 Docker Hub 中 1000 个最流行的图像,按它们为 root 用户使用的密码。 在 19% 的情况下,结果是空的。

19% 的顶级 Docker 镜像没有 root 密码

高山背景

进行小型研究的原因是本月早些时候出现的 Talos 漏洞报告(TALOS-2019-0782),其作者——感谢来自 Cisco Umbrella 的 Peter Adkins 的发现——报告说流行的 Alpine 容器发行版的 Docker 镜像没有 root 密码:

“Alpine Linux Docker 镜像的官方版本(从 v3.3 开始)包含 root 用户的 NULL 密码。 该漏洞是 2015 年 XNUMX 月出现的回归的结果。 其本质归结为这样一个事实,即在容器中部署了有问题的 Alpine Linux 版本并使用 Linux PAM 或使用系统影子文件作为数据库进行身份验证的其他机制的系统可以接受 root 用户的空 (NULL) 密码。

针对该问题测试的 Alpine Docker 镜像版本为 3.3-3.9,以及最新版本的 edge。

作者向受影响的用户提出以下建议:

“在从有问题的 Alpine 版本构建的 Docker 镜像中,必须明确禁用根帐户。 该漏洞的可能利用取决于环境,因为它的成功需要使用 Linux PAM 或其他类似机制的外部转发服务或应用程序。

问题是 被淘汰 在 Alpine 版本 3.6.5、3.7.3、3.8.4、3.9.2 和 edge(20190228 快照)中,受影响图像的所有者被要求注释掉带有 root 的行 /etc/shadow 或确保包裹丢失 linux-pam.

接自 Docker Hub

Jerry Gamblin 决定询问“在容器中使用空密码的做法可能有多普遍”。 为此,他写了一个小 脚本,其实质很简单:

  • 通过对 Docker Hub 中的 API 的 curl 请求,请求那里托管的 Docker 镜像列表;
  • 通过 jq 它按字段排序 popularity,并且从获得的结果来看,前一千名仍然存在;
  • 对于他们每个人, docker pull;
  • 对于从 Docker Hub 收到的每个图像, docker run 从文件中读取第一行 /etc/shadow;
  • 如果字符串值等于 root:::0:::::, 图像名称被保存到一个单独的文件中。

发生了什么? 在 这个文件 有 194 行带有 Linux 系统流行的 Docker 镜像的名称,其中 root 用户没有设置密码:

“这份名单上最著名的名字包括 govuk/governmentpaas、hashicorp、微软、孟山都和 mesosphere。 kylemanna/openvpn 是列表中最受欢迎的容器,拉取次数超过 10 万次。”

然而,值得回顾的是,这种现象本身并不意味着使用它们的系统的安全性存在直接漏洞:这完全取决于它们的使用方式。 (见上面阿尔卑斯案例的评论). 然而,我们已经多次看到“这个故事的寓意”:表面上的简单往往有一个缺点,你应该永远记住这一点,并在你使用技术的场景中考虑到它的后果。

PS

另请阅读我们的博客:

来源: habr.com

添加评论