關於 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 日被公佈,網上的討論其實有些言過其實。
本身這個問題如果想要成為攻擊點,其中一種方式是需要安裝 shadow
和 linux-pam
替代 Alpine Linux 預設的 BusyBox 工具鏈。而在 Docker 映象中安裝 shadow
的可能性其實很小(最起碼我暫時沒想到我會主動在映象中安裝 shadow 的情況)。
在我看來,這個問題是對於預設映象來說,問題存在,但是幾乎沒有觸發的可能, 必須要具備上面提到的特定條件。(當然也還有另一種可能,這裡不贅述了)
另外,受影響的映象,大多其實已經 EOL 不再進行維護了。這也同時提醒我們及時升級依賴非常重要。
此外,關於這是不是一個漏洞的討論其實很多,關注點在於說這些漏洞觸發都是人為操作/擴充套件來造成的,這個事情我不想聊太多,因為即使對於其他的 Linux 發行版來說,也有很多方式能造成被攻擊之類的,那這種情況算是 Linux 漏洞 還是算其他的呢?
就先聊到這兒吧。請及時更新/修復 Alpine 相關映象。
可以通過下面二維碼訂閱我的文章公眾號【MoeLove】