关于 Alpine Docker 镜像漏洞 CVE-2019-5021

关于 CVE-2019-5021 带来的一点思考。linux

本周比较吓人的是 CVE-2019-5021, 根据漏洞报告,自 Alpine Linux 3.3 版本开始的全部 Docker 镜像中,root 用户包含一个空密码,这可能会致使攻击者得到 root 权限,今儿形成攻击。docker

报告中称:受影响范围是 Alpine Linux Docker 镜像 3.三、3.四、3.五、3.六、3.七、3.八、3.九、edge 等所有版本。安全

要知道因为 Alpine Linux 镜像体积较小,因此在构建 Docker 镜像时,不少人都会推荐使用 Alpine Linux 做为基础镜像;包括不少 Docker 官方镜像也基本上都提供了基于 Alpine Linux 的镜像,甚至像 Docker 镜像等,是只提供了使用 Alpine Linux 做为基础镜像的版本。bash

报告一出,瞬间这个消息就被传播成了 “Alpine Linux Docker 镜像不安全”/“不要再使用 Alpine Linux 了”。固然 Google 的开发者也顺便推了一次自家的 distroless 镜像。less

咱们来看一下 CVE-2019-5021 究竟是什么以及如何复现吧。工具

CVE-2019-5021

(MoeLove) ➜  ~ docker run --rm -it alpine:3.9
/ # grep root /etc/passwd
root:x:0:0:root:/root:/bin/ash
operator:x:11:0:operator:/root:/bin/sh
/ # grep root /etc/shadow
root:::0:::::
/ #
复制代码

以上是一个 alpine:3.9 的镜像,咱们分别来看它的 /etc/passwd/etc/shadow 文件,很明显,此刻 root 用户是一个空密码;并不符合预期。这样也就致使了被攻击的可能性。咱们来看下如何复现攻击以及修复。ui

复现

先来看下如何复现, 编写以下的 Dockerfilespa

FROM alpine:3.9

RUN apk add --no-cache shadow 
RUN adduser -S moelove 
USER moelove
复制代码

docker build -t local/alpine:cve . 构建镜像,接下来复现:code

(MoeLove) ➜  cve docker run --rm -it  local/alpine:cve 
/ $ id
uid=100(moelove) gid=65533(nogroup) groups=65533(nogroup)
/ $ whoami 
moelove
/ $ su -
4a5cc376be74:~# 
4a5cc376be74:~# whoami 
root
4a5cc376be74:~# grep root /etc/passwd /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/ash
/etc/passwd:operator:x:11:0:operator:/root:/bin/sh
/etc/shadow:root:::0:::::
复制代码

能够看到成功使用普通用户获取的 root 权限。cdn

修复

当前官方镜像已经修复,可直接更新对应镜像

或是

在 Dockerfile 中增长下面这行:

RUN sed -ie 's/^root::/root:!:/' "$rootfs/etc/shadow"
复制代码

对应于刚才容器内的操做即是:

4a5cc376be74:~# sed -ie 's/^root::/root:!:/' /etc/shadow
4a5cc376be74:~# grep root /etc/passwd /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/ash
/etc/passwd:operator:x:11:0:operator:/root:/bin/sh
/etc/shadow:root:!::0:::::
4a5cc376be74:~# / $ su -
Password: 
su: Authentication failure
/ $ whoami
moelove
复制代码

思考

这个“漏洞” (姑且称之为漏洞吧),是在 5 月 9 日被公布,网上的讨论其实有些言过其实。

自己这个问题若是想要成为攻击点,其中一种方式是须要安装 shadowlinux-pam 替代 Alpine Linux 默认的 BusyBox 工具链。而在 Docker 镜像中安装 shadow 的可能性其实很小(最起码我暂时没想到我会主动在镜像中安装 shadow 的状况)。

在我看来,这个问题是对于默认镜像来讲,问题存在,可是几乎没有触发的可能, 必需要具有上面提到的特定条件。(固然也还有另外一种可能,这里不赘述了)

另外,受影响的镜像,大多其实已经 EOL 再也不进行维护了。这也同时提醒咱们及时升级依赖很是重要。

此外,关于这是否是一个漏洞的讨论其实不少,关注点在于说这些漏洞触发都是人为操做/扩展来形成的,这个事情我不想聊太多,由于即便对于其余的 Linux 发行版来讲,也有不少方式能形成被攻击之类的,那这种状况算是 Linux 漏洞 仍是算其余的呢?

就先聊到这儿吧。请及时更新/修复 Alpine 相关镜像。


能够经过下面二维码订阅个人文章公众号【MoeLove】

TheMoeLove
相关文章
相关标签/搜索