
eBPF-आधारित रनटाइम डिटेक्टर जो runc और Docker में कंटेनर ब्रेकआउट कमजोरियों का पता लगाता है, बिल्ड और रनटाइम के दौरान CVE-2024-21626, CVE-2024-23651, CVE-2024-23652, और CVE-2024-23653 के शोषण का पता लगाने के लिए syscalls और Docker daemon कॉल्स की निगरानी करता है।
यह रिपॉजिटरी अब संग्रहीत (archived) कर दी गई है।
कोड में अब कोई और अपडेट नहीं किए जाएंगे और जब तक आप यह सूचना पढ़ेंगे, तब तक यह असुरक्षित या टूटा हुआ भी हो सकता है। इसे केवल ऐतिहासिक उद्देश्य के लिए मानें और सावधानी से उपयोग करें।

इस रिपॉजिटरी में आपको runc और Docker कमजोरियों CVE-2024-21626, CVE-2024-23651, CVE-2024-23652 और CVE-2024-23653 के लिए eBPF-आधारित रनटाइम डिटेक्शन का एक संदर्भ कार्यान्वयन मिलेगा। यह Linux syscalls (जैसे, chdir, mount) और Docker डेमन के फ़ंक्शन इनवोकेशन को हुक करता है और उन्हें Docker बिल्ड और कंटेनर प्रोसेस से जोड़ता है ताकि इन कमजोरियों के शोषण की पहचान की जा सके।
स्थैतिक विश्लेषण-आधारित दृष्टिकोण के लिए, कृपया यह देखें।
CVE-2024-21626 runc कंटेनर रनटाइम में एक कमजोरी है जो हमलावर को कंटेनर अलगाव से बाहर निकलने और एक क्राफ्टेड इमेज के माध्यम से पूर्ण रूट RCE प्राप्त करने की अनुमति देती है, जो WORKDIR निर्देश की हैंडलिंग के भीतर एक समस्या का शोषण करती है। चूंकि होस्ट के लिए कुछ फ़ाइल डिस्क्रिप्टर खोले जाने और बंद किए जाने के बीच एक "रेस" स्थिति होती है, एक हमलावर निम्नलिखित निर्देश WORKDIR /proc/self/fd/[ID] (जहां ID एक सिस्टम-निर्भर फ़ाइल डिस्क्रिप्टर है) के साथ एक Dockerfile बना सकता है जो अंतर्निहित होस्ट मशीन की फ़ाइल सिस्टम की ओर इशारा करेगा। इसका शोषण निम्नलिखित स्थितियों में किया जा सकता है:
docker build - 2 मामलों में:
FROM निर्देश के माध्यम से एक बेस इमेज को संदर्भित करती है जिसमें एक ONBUILD कमांड होता है जो शोषण को ट्रिगर करता है जैसे ONBUILD WORKDIR /proc/self/fd/[ID]। ONBUILD निर्देश कमांड को उस इमेज में इंजेक्ट नहीं करता जिसमें वह होता है, बल्कि उस इमेज में करता है जो इसे बेस इमेज के रूप में उपयोग करती है। इसका मतलब है कि यदि कोई बेस इमेज समझौता की गई है या जानबूझकर दुर्भावनापूर्ण है, यानी Dockerhub या अन्य सार्वजनिक कंटेनर रजिस्ट्रियों पर होस्ट की गई है, तो शोषण संभव है, भले ही उस इमेज में कुछ भी न बदले जिसे docker build कमांड वास्तव में बनाता है।docker runइस प्रकार, यह कमजोरी बिल्ड सिस्टम और प्रोडक्शन वातावरण दोनों को जोखिम में डाल सकती है।
CVE-2024-23651 Docker में एक कमजोरी है जहां एक RUN कमांड --mount=cache फ्लैग का उपयोग कर रहा है। Docker डेमन के होस्ट पर source निर्देशिका के अस्तित्व की जांच और mount syscall की वास्तविक कॉल के बीच एक time-of-check/time-of-use (TOCTOU) कमजोरी है। एक हमलावर एक ऐसी Dockerfile तैयार कर सकता है जो इन दो कॉलों के बीच एक सिमलिंक लगाएगी ताकि एक मनमाना बाइंड माउंट प्रेरित किया जा सके जिसके परिणामस्वरूप होस्ट पर पूर्ण रूट RCE हो।
यह कमजोरी केवल docker build कमांड को प्रभावित करती है।
CVE-2024-23653 Docker में एक कमजोरी है जो तब होती है जब # syntax निर्देश के साथ एक कस्टम Buildkit LLB जनरेटर का उपयोग किया जाता है। जनरेटर बिल्ड के दौरान एक नया कंटेनर निष्पादित करने के लिए Client.NewContainer और Container.Start GRPC कॉल का उपयोग कर सकता है। StartRequest.SecurityMode तर्क को Docker डेमन या docker build कॉल की विशेषाधिकार अपेक्षाओं के विरुद्ध उचित रूप से जांचा नहीं जाता है, जो GRPC कॉलर को बिल्ड के दौरान एक विशेषाधिकार प्राप्त कंटेनर बनाने की अनुमति देता है। इस नए विशेषाधिकार प्राप्त कंटेनर से फिर बचकर बिल्ड होस्ट पर पूर्ण रूट RCE प्राप्त किया जा सकता है।
यह कमजोरी केवल docker build कमांड को प्रभावित करती है।
CVE-2024-23652 Docker में एक मनमाना विलोपन कमजोरी है। जब Dockerfile में RUN --mount का उपयोग किया जाता है, यदि माउंट का लक्ष्य मौजूद नहीं होता है तो इसे उस वातावरण के लिए बनाया जाएगा। जब निष्पादन पूरा हो जाता है तो यह बनाई गई निर्देशिका साफ कर दी जाएगी। यदि निष्पादित कमांड माउंट के लिए उपयोग किए गए पथ को एक प्रतीकात्मक लिंक में बदल देता है, तो सफाई प्रक्रिया इस प्रतीकात्मक लिंक को पार करेगी और संभावित रूप से होस्ट रूट फ़ाइल सिस्टम में मनमानी निर्देशिकाओं को साफ कर सकती है।
यह कमजोरी केवल docker build कमांड को प्रभावित करती है।
Build-time डिटेक्शन सभी 4 कमजोरियों पर लागू होता है।
GOOS=linux GOARCH={{amd64/arm64}} go build।sudo का उपयोग करके (जैसा कि eBPF द्वारा आवश्यक है) बैकग्राउंड में चलाएं (यानी, sudo ebpf-detector &)।STDOUT पर Leaky vessels vulnerability detected प्रिंट होता दिखेगा, साथ ही संबंधित CVE, कमजोरी का नाम और अतिरिक्त फोरेंसिक जानकारी भी।Run-time डिटेक्शन केवल WORKDIR कमजोरी (CVE-2024-21626) पर लागू होता है।
Dockerfile का उपयोग करके डिटेक्टर की कंटेनर इमेज बनाएं और इसे एक इमेज रजिस्ट्री में पुश करें।detector.yaml में image मान भरें (जिसे TODO से चिह्नित किया गया है)।kubectl apply -f detector.yml चलाकर डिटेक्टर को DaemonSet के रूप में चलाएं।Leaky Vessels vulnerability detected प्रिंट होता दिखेगा।यूनिट परीक्षणों को sudo में चलाने की आवश्यकता होती है, क्योंकि वे eBPF पर निर्भर करते हैं: sudo go test ebpf-detector/...।
WORKDIR शोषण (CVE-2024-21626) कंटेनर इनिशियलाइज़ेशन के दौरान होता है, इसलिए यह चल रहे कंटेनरों पर पता नहीं लगाया जाएगा। डिटेक्शन यह भी मानता है कि कंटेनर रनटाइम containerd है।CVE-2024-23651) और Buildkit Build-time Container Teardown Arbitrary Delete (CVE-2024-23652) डिटेक्शन समय-आधारित हैं और रेस स्थितियों के कारण गलत नकारात्मक परिणाम हो सकते हैं।बग और समस्याओं की अद्यतन सूची के लिए प्रोजेक्ट समस्याएं देखें।
योगदान का स्वागत है। विवरण के लिए CONTRIBUTING.md देखें।
Leaky Vessels Dynamic Detector Apache-2.0 लाइसेंस के अंतर्गत है। अधिक जानकारी के लिए LICENSE देखें।