關於 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 究竟是什麼以及如何復現吧。工具
(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
先來看下如何復現, 編寫以下的 Dockerfile
spa
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 日被公佈,網上的討論其實有些言過其實。
自己這個問題若是想要成爲攻擊點,其中一種方式是須要安裝 shadow
和 linux-pam
替代 Alpine Linux 默認的 BusyBox 工具鏈。而在 Docker 鏡像中安裝 shadow
的可能性其實很小(最起碼我暫時沒想到我會主動在鏡像中安裝 shadow 的狀況)。
在我看來,這個問題是對於默認鏡像來講,問題存在,可是幾乎沒有觸發的可能, 必需要具有上面提到的特定條件。(固然也還有另外一種可能,這裏不贅述了)
另外,受影響的鏡像,大多其實已經 EOL 再也不進行維護了。這也同時提醒咱們及時升級依賴很是重要。
此外,關於這是否是一個漏洞的討論其實不少,關注點在於說這些漏洞觸發都是人爲操做/擴展來形成的,這個事情我不想聊太多,由於即便對於其餘的 Linux 發行版來講,也有不少方式能形成被攻擊之類的,那這種狀況算是 Linux 漏洞 仍是算其餘的呢?
就先聊到這兒吧。請及時更新/修復 Alpine 相關鏡像。
能夠經過下面二維碼訂閱個人文章公衆號【MoeLove】