
प्रूफ-ऑफ-कॉन्सेप्ट जो Amazon EKS पर कंटेनर एस्केप प्रदर्शित करता है, Dirty Frag (CVE-2026-43284) कर्नेल पेज-कैश भ्रष्टाचार का साझा इमेज लेयर्स और विशेषाधिकार प्राप्त DaemonSets के माध्यम से शोषण करके।
एक प्रूफ-ऑफ-कॉन्सेप्ट जो दर्शाता है कि कैसे एक डिफ़ॉल्ट, अनप्रिविलेज्ड कुबरनेट्स पॉड Amazon EKS पर नोड-स्तरीय कोड निष्पादन प्राप्त कर सकता है, साझा कंटेनर इमेज लेयर्स के माध्यम से डर्टी फ्रैग लिनक्स कर्नेल पेज-कैश भ्रष्टाचार भेद्यता का शोषण करके।
मुख्य हमला प्रिमिटिव है: कोई भी प्रिविलेज्ड DaemonSet जो एक हमलावर-नियंत्रित कंटेनर के साथ इमेज लेयर्स साझा करता है, उसे कंटेनर एस्केप के लिए हथियार बनाया जा सकता है। यह PoC kube-proxy को एक ठोस उदाहरण के रूप में उपयोग करता है, लेकिन तकनीक क्लस्टर पर किसी भी प्रिविलेज्ड वर्कलोड पर सामान्यीकृत होती है।
Amazon EKS (कर्नेल 6.12.80) पर मान्य — एक अनप्रिविलेज्ड पॉड प्रिविलेज्ड kube-proxy DaemonSet के माध्यम से होस्ट फाइलसिस्टम पर [*] success लिखता है:

अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है। इसका उपयोग केवल उन सिस्टमों पर करें जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण है।
डर्टी फ्रैग (CVE-2026-43284) xfrm/ESP रिसीव पथ में एक लिनक्स कर्नेल पेज-कैश भ्रष्टाचार भेद्यता है। प्रभावित पथ में, esp_input() बिना frag_list के एक गैर-रैखिक skb के लिए skb_cow_data() को छोड़ सकता है, जिससे crypto_authenc_esn_decrypt() को splice() के माध्यम से पहुंचे पेज-कैश पेज में हमलावर-नियंत्रित डेटा के 4 बाइट्स संग्रहीत करने की अनुमति मिलती है।
डिस्क पर फाइल संशोधित नहीं होती है। भ्रष्ट बाइट्स कर्नेल पेज कैश में रहते हैं और उसी कैश्ड फाइल पेज के बाद के पाठकों द्वारा देखे जाते हैं।
मूल भेद्यता के पूर्ण विवरण के लिए, देखें V4bel/dirtyfrag।
हमला तीन गुणों का शोषण करता है जो आमतौर पर कुबरनेट्स क्लस्टरों में सह-अस्तित्व में होते हैं:
privileged: true, hostNetwork: true, व्यापक क्षमताएं, आदि) के साथ DaemonSets चलाते हैं जो समय-समय पर अपनी इमेज से बाइनरी निष्पादित करते हैं।जब ये स्थितियां संरेखित होती हैं, एक अनप्रिविलेज्ड पॉड साझा इमेज लेयर में एक बाइनरी को भ्रष्ट कर सकता है, और उसी नोड पर एक प्रिविलेज्ड DaemonSet अनजाने में भ्रष्ट बाइनरी को अपने उन्नत विशेषाधिकारों के साथ निष्पादित करेगा — पूर्ण नोड-स्तरीय कोड निष्पादन प्राप्त करना।
भेद्यता लक्ष्य kube-proxy तक सीमित नहीं है। कोई भी प्रिविलेज्ड DaemonSet (मॉनिटरिंग एजेंट, CNI प्लगइन्स, लॉग कलेक्टर, सुरक्षा एजेंट, आदि) जिसकी कंटेनर इमेज हमलावर-नियंत्रित इमेज के साथ लेयर्स साझा करती है, एक व्यवहार्य लक्ष्य है।
यह प्रोजेक्ट कॉपी फेल कुबरनेट्स PoC में प्रलेखित कुबरनेट्स शोषण मॉडल से प्रेरित है, लेकिन एक अलग कर्नेल प्रिमिटिव का उपयोग करता है।
हमले की श्रृंखला के तीन चरण हैं: पेज-कैश भ्रष्टाचार, क्रॉस-कंटेनर प्रसार, और प्रिविलेज्ड निष्पादन।
PoC बाइनरी एक अनप्रिविलेज्ड कंटेनर से निम्नलिखित अनुक्रम करती है:
unshare(CLONE_NEWUSER | CLONE_NEWNET) के साथ नए यूजर और नेट नेमस्पेस में प्रवेश करती है।splice() और क्राफ्टेड ESP इनपुट का उपयोग करती है।लक्ष्य फाइल के लिए कोई लेखन अनुमति आवश्यक नहीं है। डिस्क पर फाइल अपरिवर्तित है — केवल इन-मेमोरी पेज कैश भ्रष्ट है।
कंटेनर रनटाइम कर्नेल पेज कैश के माध्यम से ओवरले निचली लेयर्स से रीड्स की सेवा करते हैं। यदि PoC कंटेनर और kube-proxy समान निचली-लेयर फाइल साझा करते हैं, तो दोनों समान कैश्ड पेजों का अवलोकन करते हैं।
इस रिपॉजिटरी में EKS इमेज निम्न से बनाई गई है:
public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base-iptables:2026-03-11-1773190710.2023
वह बेस मान्य वातावरण में उपयोग किए गए EKS kube-proxy यूजरस्पेस टूलचेन लेयर से मेल खाने के लिए चुना गया है।
जब kube-proxy अगली बार एक पैच्ड iptables-परिवार बाइनरी निष्पादित करता है, तो कर्नेल भ्रष्ट कैश्ड पेजों को लोड करता है। PoC पेलोड होस्ट रूट डिवाइस को माउंट करता है और /root/res पर एक मार्कर फाइल लिखता है।
अपेक्षित मार्कर सामग्री है:
[*] success
┌──────────────────────────────┐ ┌────────────────────────┐ ┌──────────────────────────┐
│ PoC पॉड │ │ कर्नेल पेज कैश │ │ kube-proxy DaemonSet │
│ अनप्रिविलेज्ड कंटेनर │ │ │ │ प्रिविलेज्ड कंटेनर │
│ │ │ │ │ │
│ 1. unshare यूजर+नेट ns │ │ │ │ │
│ 2. xfrm SAs स्थापित करें │ │ │ │ │
│ 3. splice लक्ष्य बाइनरी │────▶│ साझा-लेयर बाइनरी │────▶│ पैच्ड बाइनरी निष्पादित करता है │
│ ESP पथ के माध्यम से │ │ पेज कैश पैच्ड │ │ पेलोड नोड-स्तरीय के साथ चलता है│
│ │ │ │ │ विशेषाधिकार │
└──────────────────────────────┘ └────────────────────────┘ └──────────────────────────┘
मैंने इसे GKE और ACK क्लस्टरों पर परीक्षण किया है। सभी विफल रहे।
डर्टी फ्रैग प्रिमिटिव को यूजर नेमस्पेस निर्माण (CLONE_NEWUSER) की आवश्यकता होती है ताकि एक नए नेटवर्क नेमस्पेस के अंदर CAP_NET_ADMIN प्राप्त किया जा सके। ACK और GKE दोनों इसे विभिन्न तंत्रों के माध्यम से नोड स्तर पर अवरुद्ध करते हैं:
user.max_user_namespaces=0) अनप्रिविलेज्ड यूजर नेमस्पेस निर्माण को पूरी तरह से रोकता है।--seccomp-default फ्लैग द्वारा सक्षम) नेमस्पेस सीमा की परवाह किए बिना unshare syscall को अवरुद्ध करती है।यह कॉपी फेल (CVE-2026-31431) से एक प्रमुख अंतर है, जिसे यूजर नेमस्पेस की आवश्यकता नहीं होती है और यह तीनों प्लेटफार्मों पर सफलतापूर्वक शोषण करता है।
प्रदान किया गया EKS वेरिएंट निम्नलिखित बाइनरी को पैच करता है जब वे मौजूद हों:
/usr/sbin/xtables-legacy-multi
/usr/sbin/xtables-nft-multi
ये बाइनरी kube-proxy द्वारा उपयोग की जाने वाली iptables टूलचेन द्वारा आमंत्रित की जाती हैं। सटीक ट्रिगर समय नोड और सेवा पुनर्संयोजन गतिविधि पर निर्भर करता है। मान्य वातावरण में, पेलोड सामान्य kube-proxy पुनर्संयोजन द्वारा ट्रिगर किया गया था।
महत्वपूर्ण चेतावनियाँ:
ipset को आमंत्रित करता है। डिफ़ॉल्ट मोड (iptables) ipset का उपयोग नहीं करता है।xtables-legacy-multi, xtables-nft-multi) को लक्षित करता है, लेकिन क्या वे आमंत्रित होते हैं यह क्लस्टर कॉन्फ़िगरेशन पर निर्भर करता है।यदि आपके क्लस्टर में kube-proxy प्रिविलेज्ड नहीं है, तो हमला सिद्धांत अभी भी मान्य है — आपको बस एक अलग प्रिविलेज्ड DaemonSet की पहचान करने की आवश्यकता है जो एक बेस इमेज के साथ इमेज लेयर्स साझा करता है जिससे आप निर्माण कर सकते हैं।
.
├── exploit/
│ └── dirtyfrag.c # xfrm/ESP पेज-कैश लेखक
├── payload/
│ ├── payload-eks.c # nolibc पेलोड जो होस्ट पर /root/res लिखता है
│ └── nolibc/ # लिनक्स nolibc हेडर
├── deploy/
│ └── poc-eks.yaml # अनप्रिविलेज्ड EKS डिप्लॉयमेंट मेनिफेस्ट
├── scripts/
│ ├── setup-eks.sh # EKS नोड पर इमेज कॉपी, बिल्ड और इम्पोर्ट करें
│ ├── run-poc.sh # डिप्लॉय करें और मार्कर जांचें
│ └── cleanup.sh # पॉड, मार्कर, कैश्ड पेज और लोकल इमेज हटाएं
├── Dockerfile.eks # eks-distro-minimal-base-iptables पर आधारित EKS इमेज
├── Makefile # पेलोड, एक्सप्लॉइट, Docker और nerdctl बिल्ड लक्ष्य
└── .github/workflows/
└── docker-publish.yml # GHCR प्रकाशन वर्कफ़्लो
# पेलोड + एक्सप्लॉइट बाइनरी बनाएं
make build-eks CC=x86_64-linux-gnu-gcc
# Docker इमेज बनाएं
make docker-build-eks
# डिप्लॉय करें (अनप्रिविलेज्ड पॉड)
kubectl apply -f deploy/poc-eks.yaml
# लॉग जांचें
kubectl logs deployment/dirtyfrag-poc-eks
# नोड पर एस्केप सत्यापित करें
ssh ec2-user@<node-ip> "sudo cat /root/res"
# अपेक्षित: [*] success
GitHub Actions वर्कफ़्लो (.github/workflows/docker-publish.yml) main पर पुश या टैग निर्माण पर इमेज को GHCR पर प्रकाशित करता है। deploy/poc-eks.yaml में <owner> को फोर्क के मालिक GitHub उपयोगकर्ता या संगठन से बदलें।
kubectl delete -f deploy/poc-eks.yaml --ignore-not-found
ssh ec2-user@<node-ip> "sudo rm -f /root/res"
kubectl delete pod -n kube-system -l k8s-app=kube-proxy --force
f4c50a4034e6) से पहले के सभी संस्करण।f4c50a4034e6 या विक्रेता बैकपोर्ट शामिल है।esp4 और esp6 को ब्लॉक करें।user.max_user_namespaces=0 सेट करने से यह PoC एक नए नेटवर्क नेमस्पेस में CAP_NET_ADMIN प्राप्त करने से रोकता है (यह पहले से ही ACK पर डिफ़ॉल्ट है)।privileged: true और व्यापक होस्ट एक्सेस से बचें।उदाहरण मॉड्यूल ब्लॉक:
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' | sudo tee /etc/modprobe.d/dirtyfrag.conf
sudo rmmod esp4 esp6 2>/dev/null || true
एक्सप्लॉइट कोड V4bel/dirtyfrag से MIT लाइसेंस के तहत अनुकूलित किया गया है।
पेलोड कोड tgies/copy-fail-c से व्युत्पन्न है और LGPL-2.1-or-later OR MIT के तहत द्वि-लाइसेंस प्राप्त है।
nolibc हेडर लिनक्स कर्नेल सेल्फ-टेस्ट इन्फ्रास्ट्रक्चर से हैं।
| गुण | कॉपी फेल | डर्टी फ्रैग |
|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 |
| कर्नेल पथ | AF_ALG + splice() | xfrm/ESP + splice() |
| नेमस्पेस आवश्यकता | आवश्यक नहीं | यूजर नेमस्पेस की आवश्यकता है |
| उपयोग की गई मुख्य क्षमता | प्रारंभिक कंटेनर में कोई नहीं | नए नेट नेमस्पेस के अंदर CAP_NET_ADMIN |
| प्रासंगिक मॉड्यूल | algif_aead | esp4 |
| व्यावहारिक अंतर | AF_ALG वेक्टर अवरुद्ध होने पर विफल | तब भी प्रासंगिक जब AF_ALG अनुपलब्ध हो लेकिन ESP/यूजर नेमस्पेस सक्षम हों |
| गुण | मान |
|---|
| प्लेटफॉर्म | Amazon Elastic Kubernetes Service (EKS) |
| नोड कर्नेल | 6.12.80-106.156.amzn2023.x86_64 |
| पैच स्थिति | पैच-पूर्व कर्नेल, f4c50a4034e6 अनुपलब्ध |
esp4 मॉड्यूल | लोडेड |
| यूजर नेमस्पेस | सक्षम (user.max_user_namespaces=15030) |
| SELinux | अनुमेय |
| Seccomp | परीक्षण किए गए पॉड संदर्भ में अनकन्फाइंड |
| लक्ष्य DaemonSet | kube-proxy |
| लक्ष्य विशेषाधिकार | privileged: true, hostNetwork: true |
| प्रॉक्सी मोड | iptables |
| मार्कर पथ | /root/res |
| प्लेटफॉर्म | परिणाम | कारण |
|---|
| Alibaba Cloud ACK | विफल | user.max_user_namespaces डिफ़ॉल्ट नोड इमेज पर 0 पर सेट है, इसलिए अनप्रिविलेज्ड उपयोगकर्ता CLONE_NEWUSER unshare का उपयोग नहीं कर सकते। |
| Google GKE | विफल | user.max_user_namespaces 15426 है, लेकिन kubelet --seccomp-default सक्षम करता है। डिफ़ॉल्ट seccomp नीति unshare syscall को अक्षम करती है। |