关于 Alpine Docker 镜像漏洞 CVE-2019-5021
關于 CVE-2019-5021 帶來的一點思考。
本周比較嚇人的是 CVE-2019-5021, 根據漏洞報告,自 Alpine Linux 3.3 版本開始的所有 Docker 鏡像中,root 用戶包含一個空密碼,這可能會導致攻擊者獲得 root 權限,今兒造成攻擊。
報告中稱:受影響范圍是 Alpine Linux Docker 鏡像 3.3、3.4、3.5、3.6、3.7、3.8、3.9、edge 等全部版本。
要知道由于 Alpine Linux 鏡像體積較小,所以在構建 Docker 鏡像時,很多人都會推薦使用 Alpine Linux 作為基礎鏡像;包括很多 Docker 官方鏡像也基本上都提供了基于 Alpine Linux 的鏡像,甚至像 Docker 鏡像等,是只提供了使用 Alpine Linux 作為基礎鏡像的版本。
報告一出,瞬間這個消息就被傳播成了 “Alpine Linux Docker 鏡像不安全”/“不要再使用 Alpine Linux 了”。當然 Google 的開發者也順便推了一次自家的 distroless 鏡像。
我們來看一下 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 用戶是一個空密碼;并不符合預期。這樣也就導致了被攻擊的可能性。我們來看下如何復現攻擊以及修復。
復現
先來看下如何復現, 編寫如下的 Dockerfile
FROM alpine:3.9RUN apk add --no-cache shadow RUN adduser -S moelove USER moelove 復制代碼用 docker build -t local/alpine:cve . 構建鏡像,接下來復現:
(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 權限。
修復
當前官方鏡像已經修復,可直接更新對應鏡像
或是
在 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 日被公布,網上的討論其實有些言過其實。
本身這個問題如果想要成為攻擊點,其中一種方式是需要安裝 shadow 和 linux-pam 替代 Alpine Linux 默認的 BusyBox 工具鏈。而在 Docker 鏡像中安裝 shadow 的可能性其實很小(最起碼我暫時沒想到我會主動在鏡像中安裝 shadow 的情況)。
在我看來,這個問題是對于默認鏡像來說,問題存在,但是幾乎沒有觸發的可能, 必須要具備上面提到的特定條件。(當然也還有另一種可能,這里不贅述了)
另外,受影響的鏡像,大多其實已經 EOL 不再進行維護了。這也同時提醒我們及時升級依賴非常重要。
此外,關于這是不是一個漏洞的討論其實很多,關注點在于說這些漏洞觸發都是人為操作/擴展來造成的,這個事情我不想聊太多,因為即使對于其他的 Linux 發行版來說,也有很多方式能造成被攻擊之類的,那這種情況算是 Linux 漏洞 還是算其他的呢?
就先聊到這兒吧。請及時更新/修復 Alpine 相關鏡像。
可以通過下面二維碼訂閱我的文章公眾號【MoeLove】
總結
以上是生活随笔為你收集整理的关于 Alpine Docker 镜像漏洞 CVE-2019-5021的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写给理工科大学生尤其是计算机专业大学生
- 下一篇: CSDN 第六期编程竞赛做题记录