
إثبات المفهوم لـ CVE-2024-32002: ثغرة حقن مسار الوحدات الفرعية في Git.
أثناء حل آلة Compiled من منصة Hack The Box، صادفت سلوكًا غريبًا يتعلق بـ Git والوحدات الفرعية. عند التحقيق بشكل أعمق، وجدت هذا المنشور الممتاز للباحث Amal Murali، والذي يوضح بالتفصيل تقنية حقن المسار عبر .gitmodules. ومن ثم، قررت دراسة CVE-2024-32002 وإنشاء PoC عملي يوضح التأثير الحقيقي للثغرة.
يستغل CVE-2024-32002 ثغرة حرجة في Git تتعلق بحل مسارات الوحدات الفرعية. يسمح Git للمستودعات بتضمين وحدات فرعية محددة في ملف .gitmodules، مع تحديد المسار وعنوان URL. تنشأ الثغرة عندما يتم التلاعب بالمسار ليشير إلى داخل دليل .git، الذي يخزن البيانات الوصفية والإعدادات الداخلية للمستودع.
عند الجمع بين:
.gitmodules لتعيين المسار كـ A/modules/xa → .git…يتم خداع Git وحل A/modules/x كـ .git/modules/x، أي داخل دليل .git الداخلي. وهذا يسمح للمهاجم بحقن ملفات عشوائية مثل خطافات خبيثة يمكن تنفيذها في عمليات شرعية مثل checkout أو merge أو clone.
تمثل هذه الثغرة ناقلًا لتنفيذ الأوامر عن بُعد، وهي خطيرة بشكل خاص في بيئات CI/CD أو الأتمتة أو المستودعات المشتركة.
setup.shيقوم هذا السكريبت بأتمتة إنشاء بيئة ضعيفة وإعادة إنتاج تأثير الثغرة:
hook-repo) تحتوي على خطاف post-checkout يكتب في /tmp/teste.txtmain-repo) وإضافة الوحدة الفرعية.gitmodules لإعادة توجيه مسار الوحدة الفرعية إلى A/modules/xa → .git، مما يجعل A/modules/x يُحل كـ .git/modules/x.gitmodules الخبيث في الفهرس باستخدام git update-index --index-infocloned-repo) مع --recursive، وتهيئة الوحدة الفرعيةإذا نجح، يتم تنفيذ الخطاف ويتم إنشاء الملف /tmp/teste.txt بالمحتوى:
joao was here
يتضمن هذا المستودع Dockerfile يقوم بالتالي:
docker build -t git-cve-poc .
docker run --rm -it git-cve-poc
تؤثر هذه الثغرة على إصدارات Git السابقة للإصدار 2.45.1. تم إصلاح الخلل من خلال عمليات تحقق أكثر صرامة في حل مسارات الوحدات الفرعية. يجب تدقيق المستودعات التي تستخدم الوحدات الفرعية، ويجب تحديث البيئات المؤتمتة فورًا.
هذا المشروع مخصص للأغراض التعليمية والبحثية فقط. لا تستخدمه في بيئات الإنتاج. الهدف هو إظهار التأثير التقني للثغرة وتعزيز ممارسات الأمان الجيدة.
.git/hooks/ وتنفيذ git checkout HEAD لتشغيل الاستغلال