تم الكشف مؤخرًا عن ثغرة خطيرة في Git تتيح هجمات تنفيذ التعليمات البرمجية عن بُعد (RCE)، والتي تؤثر على إصدارات متعددة من Git و Microsoft Visual Studio 2017. تُمكّن الثغرة المهاجمين من التلاعب بمستودعات Git باستخدام وحدات فرعية، مستغلين خطأ في Git يسمح بكتابة الملفات خارج شجرة عمل الوحدة الفرعية وفي دليل .git/. يمكّن هذا الخطأ من تنفيذ خطاف خبيث أثناء عملية استنساخ المستودع [1].
تؤثر الثغرة الأمنية CVE-2024-32002 على الإصدار 15.9 من Microsoft Visual Studio 2017 وإصدارات Git الأقدم من 2.45.1 و2.44.1 و2.43.4 و2.42.2 و2.41.1 و2.40.2 و2.39.4. يمكن استغلالها في البيئات التي يتم فيها تمكين دعم الروابط الرمزية في أنظمة التشغيل غير الحساسة لحالة الأحرف.
فهم Git
Git هو نظام مجاني ومفتوح المصدر للتحكم في الإصدار الموزع، مصمم لمساعدة مطوري البرمجيات على إدارة قواعد التعليمات البرمجية بسرعة وكفاءة. وهو يعزز التعاون بين أعضاء فريق التطوير من خلال تنظيم وتتبع التغييرات التي تطرأ على الملفات والدلائل بطريقة موحدة ومنظمة.
يُستخدم Git على نطاق واسع في تطوير البرمجيات. منصات مثل GitHub و GitLab و Bitbucket مبنية على Git لتعزيز التعاون بين المطورين بسبب ميزاته القوية:
- تسجيل التغييرات التي يمكن تتبعها على ملفات التعليمات البرمجية، والمعروفة باسم الالتزامات.
- استرجاع تعديلات التعليمات البرمجية إلى الإصدارات السابقة عند الضرورة.
- الجمع بكفاءة بين التغييرات من فروع أو مساهمين مختلفين.
- الاحتفاظ بسجل لتاريخ من قام بالتغييرات وتواريخها.

خطافات Git Hooks
عندما يتم إنشاء أو استنساخ مستودع Git، باستخدام الأوامر git init أو git clone، يتم إنشاء دليل .gitفي جذر شجرة العمل. تبدو بنية دليل دليل .git في البداية هكذا:
خطافات Git هي عبارة عن نصوص برمجية قابلة للتنفيذ، موجودة إما في دليل .git/hooks أو دليل .git/modules/module_type/module_name/hooks. يتم تشغيل الخطافات تلقائيًا عند وقوع أحداث محددة داخل مستودع Git.
عندما لا يحتوي الملف الموجود في دليل الخطافات على لاحقة .sample، سيتم تنفيذ الأوامر الموجودة في هذا الملف قبل أو بعد إجراء Git معين مضمن في اسم الملف، مثل ما قبل الالتزام وما بعد الالتزام وما بعد الخروج.
وحدات Git الفرعية
وحدة Git الفرعية هي سجل داخل مستودع Git يشير إلى التزام معين في مستودع خارجي. عندما تتم إضافة وحدة فرعية إلى مستودع، يتم إنشاء ملف جديد في دليل .gitmodules مع بيانات تعريفية للتعيين بين عنوان URL الخاص بالوحدة الفرعية ودليلها المحلي. عندما يحتوي المستودع على وحدات فرعية متعددة، سيتضمن ملف .gitmodules إدخالًا لكل منها. [3]
الروابط الرمزية (الروابط الرمزية)
الارتباط الرمزي، الذي يشار إليه أيضًا باسم الارتباط الرمزي أو الارتباط المرن، هو ملف يشير إلى ملف أو دليل آخر (يشار إليه باسم "الهدف") من خلال تحديد مساره. إذا تم حذف الارتباط الرمزي يبقى هدفه غير متأثر. [4]
يتم إنشاء رابط Symlink في Git كملف مع بيانات وصفية لجعله يعمل كمرجع أو اختصار لملف آخر. يمكن استخدام الروابط الرمزية لإنشاء مراجع متعددة لملف ما دون تكرار محتواه.
تحليل الثغرات الأمنية في GIT
تحليل الرقعة
لاكتساب فهم أعمق للثغرات الأمنية، غالباً ما يقوم أخصائيو الأمن بإجراء تحليل التصحيح. وهي تقنية تساعد في تحديد الوظائف الضعيفة ونواقل الهجوم المحتملة. قام زملاء OPSWAT بفحص التغييرات التي تم إجراؤها في الإصدار المصحح لمعالجة الثغرة الأمنية CVE-2024-32002، ووجدوا أنه تم تحديث ملفين لمعالجة هذه الثغرة الأمنية.
أحد الملفات التي تم تحديثها هو ملف subodule--helper.c، والذي يتضمن الشيفرة التي تتعامل مع استنساخ وحدة Git الفرعية. تضمن الالتزام الجديد في النسخة المصححة الملفين التاليين:
- إضافة الدالة dir_contains_only_only_dotgit للتأكد من أن دليل الوحدات الفرعية لا يحتوي على أي ملفات أو أدلة .git.
- تم إجراء تغييرات على دالة clone_submodule() لتضمين شرط للتحقق مما إذا كان دليل الوحدة الفرعية موجودًا وفارغًا. إذا لم يكن الدليل فارغًا، فسيتم إجهاض عملية الاستنساخ.
أما التحديث الثاني في الالتزام الجديد فكان في ملف t/t7406-submodule-update.sh، حيث تم إضافة برنامج نصي اختباري للتحقق من حل الثغرة الأمنية.
من التحليل إلى الاستغلال
بالإضافة إلى الرؤى التي تم جمعها من تحليل الرقعة ووصف الثغرة الأمنية CVE-2024-32002، عمل زملاء OPSWAT على التحقيق في سير عمل الروابط الرمزية والوحدات الفرعية في Git. وقاموا بتحليل تسلسل الأحداث التي تحدث عندما يقوم المستخدم باستنساخ مستودع:
- يبدأ Git بتنزيل الملفات والدلائل من المستودع الأساسي.
- ويستخدم التعريفات المحددة في ملفات الروابط الرمزية لإعادة إنشاء ارتباطات رمزية مطابقة في نظام الملفات المحلي.
- إذا كان الارتباط الرمزي يشير إلى ملف موجود، فسيعمل الارتباط الرمزي؛ وإلا فسيظل الارتباط الرمزي معطلاً حتى تتم استعادة الهدف.
- إذا تم استنساخ المستودع باستخدام الخيار -- التكراري، يستنسخ Git الوحدات الفرعية (المستودعات الخارجية) ويضعها في مسارات الدليل كما هو موضح في ملف .gitmodules.
- إذا كان الارتباط الرمزي جزءًا من مسار الوحدة الفرعية (على سبيل المثال، util/module/test، حيث يكون symlink رابطًا رمزيًا يشير إلى دليل آخر، مثل symlink_folder)، فإن Git سيخزن محتوى الوحدة الفرعية في الدليل الفعلي المشار إليه بواسطة الرابط الرمزي (على سبيل المثال، symlink_folder/module/test)، مع السماح بالوصول من خلال مسار الرابط الرمزي الأصلي.
فهم الثغرة الأمنية في CVE-2024-32002 Git
إنشاء المستودعات الخبيثة
قام زملاء OPSWAT بمزيد من الفحص لإنشاء مستودعات خبيثة استنادًا إلى التحديثات التي تم إجراؤها لملفt/t7406-submodule-update.sh وقسموا هذه العملية إلى الخطوات التالية:
- إنشاء مستودع يحتوي على خطاف ما بعد الخروج
- إنشاء مستودع آخر يتضمن وحدة فرعية موجودة في المسار A/modules/x. تشير الوحدة الفرعية الجديدة إلى المستودع الذي تم إنشاؤه مسبقًا.
- إنشاء رابط رمزي باسم a، يشير إلى مجلد .git في فهرس Git.
فهم الخلل الأمني
عندما يستنسخ المستخدم مستودعًا خبيثًا، تم إنشاؤه في الخطوة السابقة، باستخدام الخيار -- التكراري، سيتم تشغيل البرنامج النصي الخبيث من خطاف ما بعد الخروج، مما يسمح للمهاجم باختراق جهاز المستخدم.
يحدث تنفيذ التعليمات البرمجية عن بعد لأن المستودع الرئيسي يكتشف ارتباطًا رمزيًا باسم a يشير إلى دليل .git عند استنساخه. مع تمكين الوضع العودي، يتم أيضًا سحب الوحدات الفرعية إلى المستودع المستنسخ. يحتوي هذا المستودع على مجلد الخطافات، والذي يحتوي على البرنامج النصي لخطاف ما بعد الخروج، ودليله المحلي في A/modules/x.
نظرًا لأن a يشير إلى دليل.git ونظام الملفات غير حساس لحالة الأحرف، يتم تفسير A على أنه مكافئ لـ a. يتم تضليل Git لكتابة البرنامج النصي لخطاف ما بعد الخروج في الدليل .git/modules/odules/query/fast/hooks/. إذا تم العثور على نص برمجي خطاف ما بعد الخروج في مجلد . git/modules/{module_type}/{module_name}/خطافات، فسيتم تشغيله عند استنساخ المستودع الرئيسي باستخدام الخيار --تكراري. ونتيجةً لذلك، يمكن للمهاجمين اختراق جهاز المستخدم بنجاح من خلال تنفيذ تعليمات برمجية عن بعد.
محاكاة استغلال ثغرة أمنية في Git
بناءً على النتائج السابقة، قام زملاء OPSWAT بإنشاء مستودع رئيسي وخطاف لمحاكاة إنشاء مستودع خبيث:
- في البداية، يوصى بتهيئة Git للسماح دائمًا بـ Protocol.file، وتمكين core.symlinks، وتعيين اسم الفرع الافتراضي إلى main (لتجنب رسالة التحذير).
- تتم إضافة نص برمجي خطاف ما بعد الخروج الخبيث إلى دليل الخطافات. للتأكد من إمكانية تنفيذ البرنامج النصي لما بعد الخروج على جهاز المستخدم، يتضمن البرنامج النصي للباش الذي ينشئ هذا الخطاف الأمر chmod +x fast/hooks/post-checkout.
- يتم إنشاء رابط رمزي في المستودع الرئيسي يشير إلى دليل .git.
مجلد / الخطافات مع خطاف ما بعد الخروج
الاصلاح
لتحييد التهديد، يمكن للمستخدمين إلغاء تثبيت Git أو تطبيق أحدث تصحيح أمني. وبدلاً من ذلك، يمكن لحلول مثل MetaDefender Endpoint أن تُخطِر المستخدم على الفور وتعرض جميع نقاط مكافحة التطرف العنيف المعروفة في البيئة من خلال واجهته البديهية. يمكن لـ MetaDefender Endpoint اكتشاف أحدث مكافحات التطرف العنيف والتخفيف من حدتها من خلال الاستفادة من قدراته التي تضم أكثر من 3 ملايين نقطة بيانات وأكثر من 30,000 من نقاط مكافحة التطرف العنيف المرتبطة بمعلومات الخطورة. ومن خلال تنفيذ أي من التدابير المضادة سيتم احتواء مكافحة التطرف العنيف بشكل كامل، مما يحد من خطر وقوع هجوم إلكتروني مدمر.
هل أنت مستعد لوضع MetaDefender Endpoint في الخطوط الأمامية لاستراتيجية الأمن السيبراني لديك؟