漏洞官方鏈接:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5021
CVE-2019-5021
Versions of the Official Alpine Linux Docker images (since v3.3) contain a NULL password for the `root` user. This vulnerability appears to be the result of a regression introduced in December of 2015. Due to the nature of this issue, systems deployed using affected versions of the Alpine Linux container which utilize Linux PAM, or some other mechanism which uses the system shadow file as an authentication database, may accept a NULL password for the `root` user.
官方對這個(gè)漏洞的描述為:如果在 Docker 容器中安裝了 shadow 軟件包并以非 root 用戶身份運(yùn)行服務(wù),那么具有 shell 訪問權(quán)限的用戶可在容器內(nèi)對賬號進(jìn)行提權(quán)。?
根據(jù)漏洞報(bào)告,自 Alpine Linux 3.3 版本開始的所有 Docker 鏡像中,root 用戶包含一個(gè)空密碼,這可能會導(dǎo)致攻擊者獲得 root 權(quán)限,進(jìn)而造成攻擊。
報(bào)告中稱:受影響范圍是 Alpine Linux Docker 鏡像 3.3、3.4、3.5、3.6、3.7、3.8、3.9、edge 等全部版本。
密碼以加密形式保存,但允許以 root 身份登錄而無需輸入任何密碼
該漏洞僅針對?Alpine Linux 的 Docker 鏡像版本,且安裝了shadow或linux-pam軟件包才會受影響。
對于使用較舊的、不受支持的版本,可以將以下命令添加到 Dockerfile 來修復(fù)漏洞:
# make sure root login is disabled
RUN sed -i -e's/^root::/root:!:/'/etc/shadow
或者卸載shadow或linux-pam軟件包。
我們分別來看它的?/etc/passwd?和?/etc/shadow?文件,很明顯,此刻?root?用戶是一個(gè)空密碼;并不符合預(yù)期。這樣也就導(dǎo)致了被攻擊的可能性。


操作系統(tǒng)典型常規(guī)的配置如下:
[root@ips106 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@ips106 ~]# grep root /etc/shadow
root:$6$14YMCeNI$pQslPGn0/V.PPA2ycMMZrvCbp64Mgnu6gf.o3oNvDL3A0Uw6L8nk7tfCzqYj19os635ey/s35PhH42FW//QdY1:17504:0:99999:7:::
[root@ips106 ~]#
1、pause鏡像,基于空鏡像創(chuàng)建,不涉及alpine,漏洞無影響
FROM scratch
ARG ARCH
ADD bin/pause-${ARCH} /pause
ENTRYPOINT ["/pause"]
2、Docker-health鏡像基于alpine:edge,alpine漏洞影響容器安全
# Version 1.0
FROM alpine:edge
RUN apk add --update --no-cache --virtual curl && \?
rm -r /var/cache/apk && \
rm -r /usr/share/man && \
touch /htmp
CMD tail -f /htmp
3、registry鏡像基于alpine:3.4,存在該安全漏洞

[root@ips106 ~]# docker ps
CONTAINER ID? ? ? ? IMAGE? ? ? ? ? ? ? ? ? ? ? COMMAND? ? ? ? ? ? ? ? ? CREATED? ? ? ? ? ? STATUS? ? ? ? ? ? ? PORTS? ? ? ? ? ? ? ? ? ? NAMES
b88c5798ab7b? ? ? ? registry:2.5.1? ? ? ? ? ? ? "/entrypoint.sh /etc…"? 2 months ago? ? ? ? Up 2 months? ? ? ? 0.0.0.0:35007->5000/tcp? ips-registry7
[root@ips106 ~]# docker exec -it b88c5798ab7b /bin/sh
/ # 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:::::
/ #
4、產(chǎn)品nginx基礎(chǔ)鏡像為官方nginx鏡像,該鏡像中root賬戶已被禁用,不存在該漏洞
[root@ips28 test]# docker exec -it bacf767d2cc2 /bin/bash
root@bacf767d2cc2:/# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@bacf767d2cc2:/# grep root /etc/shadow
root:*:18022:0:99999:7:::
5、heapster未采用官網(wǎng)鏡像,產(chǎn)品使用的heapster鏡像基于alpine:3.7,存在該安全隱患
?雖然鏡像中/etc/shadow文件存在root用戶密碼為空,但是鏡像使用普通用戶,并且禁止su,同時(shí)未提供sudo,無法通過修改busybox權(quán)限打開su,無法通過root密碼為空的漏洞提權(quán)訪問。
[root@ips28 etc]# cat shadow
root:::0:::::
[root@ips28 etc]# docker exec -it 8fda40024e8a /bin/sh
~ $ id
uid=65534(nobody) gid=65534(nobody)
~ $ su -
su: must be suid to work properly
~ $ cat /etc/alpine-release
3.7.0
~ $ grep root /etc/passwd
root:x:0:0:root:/root:/bin/ash
operator:x:11:0:operator:/root:/bin/sh
~ $ grep root /etc/shadow
grep: /etc/shadow: Permission denied
~ $? find -name busybox
./bin/busybox
find: ./proc/tty/driver: Permission denied
find: ./root: Permission denied
~ $ sudo chmod 4755 ./bin/busybox
/bin/sh: sudo: not found
~ $ chmod 4755 ./bin/busybox
chmod: ./bin/busybox: Operation not permitted
~ $
官網(wǎng)heapster鏡像dockerfile

綜合以上,平臺目前提供的鏡像包含nginx /heapster/registry/docker-health/pause,其中只有docker-health(基于alpine:edge)和registry(基于alpine:3.4)存在該安全隱患,heapster雖然也是基于3.7版本的鏡像但是已經(jīng)通過禁用su,未提供sudo禁止了該漏洞可能存在的提權(quán)行為。
針對平臺而言只是存在風(fēng)險(xiǎn),實(shí)際對我們平臺不對外開放的非業(yè)務(wù)容器,影響很?。恍枰⒁獾氖菢I(yè)務(wù)鏡像制作的時(shí)候盡量避免使用alpine的這些版本。升級使用最新版本的alpine即可。
參考: