關於 Alpine Docker 映象漏洞 CVE-2019-5021

TaoBeier發表於2019-05-12

關於 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.9

RUN 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 日被公佈,網上的討論其實有些言過其實。

本身這個問題如果想要成為攻擊點,其中一種方式是需要安裝 shadowlinux-pam 替代 Alpine Linux 預設的 BusyBox 工具鏈。而在 Docker 映象中安裝 shadow 的可能性其實很小(最起碼我暫時沒想到我會主動在映象中安裝 shadow 的情況)。

在我看來,這個問題是對於預設映象來說,問題存在,但是幾乎沒有觸發的可能, 必須要具備上面提到的特定條件。(當然也還有另一種可能,這裡不贅述了)

另外,受影響的映象,大多其實已經 EOL 不再進行維護了。這也同時提醒我們及時升級依賴非常重要。

此外,關於這是不是一個漏洞的討論其實很多,關注點在於說這些漏洞觸發都是人為操作/擴充套件來造成的,這個事情我不想聊太多,因為即使對於其他的 Linux 發行版來說,也有很多方式能造成被攻擊之類的,那這種情況算是 Linux 漏洞 還是算其他的呢?

就先聊到這兒吧。請及時更新/修復 Alpine 相關映象。


可以通過下面二維碼訂閱我的文章公眾號【MoeLove】

TheMoeLove

相關文章