
这是一组用于创建具有不同提升权限的 Pod 的 manifests。可快速演示允许 hostNetwork、hostPID、hostPath、hostIPC 和 privileged 等安全敏感 Pod 属性所带来的影响。
更多背景信息,请参阅我们的博客文章:Bad Pods: Kubernetes Pod 权限提升。
下方每个链接都提供了详细的使用说明和利用后(post-exploitation)建议。
关于先决条件、仓库组织方式以及常见使用模式的更多信息,请参阅以下章节。
├── manifests
│ ├── everything-allowed
│ │ ├── cronjob
│ │ │ ├── everything-allowed-exec-cronjob.yaml
│ │ │ └── everything-allowed-revshell-cronjob.yaml
│ │ ├── daemonset
│ │ │ ├── everything-allowed-exec-daemonset.yaml
│ │ │ └── everything-allowed-revshell-daemonset.yaml
│ │ ├── deployment
│ │ │ ├── everything-allowed-exec-deployment.yaml
│ │ │ └── everything-allowed-revshell-deployment.yaml
│ │ ├── job
│ │ │ ├── everything-allowed-exec-job.yaml
│ │ │ └── everything-allowed-revshell-job.yaml
│ │ ├── pod
│ │ │ ├── everything-allowed-exec-pod.yaml
│ │ │ └── everything-allowed-revshell-pod.yaml
│ │ ├── replicaset
│ │ │ ├── everything-allowed-exec-replicaset.yaml
│ │ │ └── everything-allowed-revshell-replicaset.yaml
│ │ ├── replicationcontroller
│ │ │ ├── everything-allowed-exec-replicationcontroller.yaml
│ │ │ └── everything-allowed-revshell-replicationcontroller.yaml
│ │ └── statefulset
│ │ ├── everything-allowed-exec-statefulset.yaml
│ │ └── everything-allowed-revshell-statefulset.yaml
│ ├── hostipc
│ │ ├── cronjob
│ │ │ ├── hostipc-exec-cronjob.yaml
│ │ │ └── hostipc-revshell-cronjob.yaml
│ │ ├── daemonset
│ │ │ ├── hostipc-exec-daemonset.yaml
│ │ │ └── hostipc-revshell-daemonset.yaml
...omitted for brevity...
正如 Eviatar Gerzi (@g3rzi) 在文章 Eight Ways to Create a Pod 中指出的那样,共有 8 种不同的控制器可以创建一个 Pod 或一组 Pod。你可能没有创建 Pod 的权限,但也许可以创建另一种能创建一个或多个 Pod 的资源类型。对于每种 badPod 类型,都有对应全部八种资源类型的 manifests。
但别急,情况还可能更糟!除了目前八个可以创建 Pod 的 Kubernetes 控制器之外,还有一些第三方控制器——如果被应用到集群中,它们同样可以创建 Pod。请透过 kubectl api-resources 留意它们。
虽然这种情况很常见,但你并非总能对创建的 Pod 执行 exec。为了应对这些情况,每个 manifest 都附带了一个使用 Rory McCune (@raesene) 的 ncat Docker Hub 镜像的版本。Pod 创建后会向你监听的地址发起加密回调。
manifests 目录中的每个资源都针对一个特定属性或属性组合;当这些属性被允许时,会使集群面临风险。
kubectl apply -f ./manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml
kubectl apply -f ./manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml
kubectl apply -f ./manifests/priv/pod/priv-exec-pod.yaml
kubectl apply -f ./manifests/hostpath/pod/hostpath-exec-pod.yaml
kubectl apply -f ./manifests/hostpid/pod/hostpid-exec-pod.yaml
kubectl apply -f ./manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml
kubectl apply -f ./manifests/hostipc/pod/hostipc-exec-pod.yaml
kubectl apply -f ./manifests/nothing-allowed/pod/nothing-allowed-exec-pod.yaml