تعرف على المزيد عن كتاب بيني تشارني «الأمن السيبراني رأسًا على عقب»

اعرف أكثر
نستخدمُ الذكاء الاصطناعي في ترجمات الموقع، ومع أننا نسعى جاهدين لبلوغ الدقة قد لا تكون هذه الترجمات دقيقةً بنسبة 100% دائمًا. تفهّمك لهذا الأمر هو موضع تقدير لدينا.

تحليل ثغرة Git ومعالجتها CVE-2024-32002

بقلم OPSWAT
تحليل ثغرة Git ومعالجتها CVE-2024-32002
شارك الطلاب في OPSWAT برنامج الزمالة.

تم الكشف مؤخرًا عن ثغرة أمنية خطيرة في 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 ومعالجتها CVE-2024-32002

فهم Git

Git هو نظام مجاني ومفتوح المصدر للتحكم في الإصدار الموزع، مصمم لمساعدة مطوري البرمجيات على إدارة قواعد التعليمات البرمجية بسرعة وكفاءة. وهو يعزز التعاون بين أعضاء فريق التطوير من خلال تنظيم وتتبع التغييرات التي تطرأ على الملفات والدلائل بطريقة موحدة ومنظمة.

يُستخدم Git على نطاق واسع في تطوير البرمجيات. منصات مثل GitHub و GitLab و Bitbucket مبنية على Git لتعزيز التعاون بين المطورين بسبب ميزاته القوية:

  • تسجيل التغييرات التي يمكن تتبعها على ملفات التعليمات البرمجية، والمعروفة باسم الالتزامات.
  • استرجاع تعديلات التعليمات البرمجية إلى الإصدارات السابقة عند الضرورة.
  • الجمع بكفاءة بين التغييرات من فروع أو مساهمين مختلفين.
  • الاحتفاظ بسجل لتاريخ من قام بالتغييرات وتواريخها.
تحليل ثغرة Git ومعالجتها CVE-2024-32002

خطافات 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]

تحليل ثغرة Git ومعالجتها CVE-2024-32002
تحليل ثغرة Git ومعالجتها CVE-2024-32002
توضح الصورة التالية كيف يبدو ملف .gitmodules:

الارتباط الرمزي، الذي يشار إليه أيضًا باسم الارتباط الرمزي أو الارتباط المرن، هو ملف يشير إلى ملف أو دليل آخر (يشار إليه باسم "الهدف") من خلال تحديد مساره. إذا تم حذف الارتباط الرمزي يبقى هدفه غير متأثر. [4]

يتم إنشاء رابط Symlink في Git كملف مع بيانات وصفية لجعله يعمل كمرجع أو اختصار لملف آخر. يمكن استخدام الروابط الرمزية لإنشاء مراجع متعددة لملف ما دون تكرار محتواه.

تحليل ثغرة Git ومعالجتها CVE-2024-32002
يتعامل Git مع الروابط الرمزية كملفات متخصصة تخزن المسار إلى الملف أو الدليل الذي تشير إليه.
تحليل ثغرة Git ومعالجتها CVE-2024-32002
عندما يتم استنساخ أو سحب مستودع أو فرع يحتوي على رابط رمزي يتم تحويل الرابط الرمزي المخزن في Git إلى رابط رمزي على نظام الملفات المحلي.

تحليل الثغرات الأمنية في GIT

تحليل الرقعة

من أجل التوصل إلى فهم أعمق للثغرات الأمنية، غالبًا ما يقوم المتخصصون في مجال الأمن بتحليل التصحيحات. وهي تقنية تساعد في تحديد الوظائف المعرضة للخطر ومسارات الهجوم المحتملة. قام أعضاء فريق « OPSWAT » بفحص التغييرات التي أُجريت في الإصدار المُصَحَّح لمعالجة الثغرة الأمنية CVE-2024-32002، ووجدوا أنه تم تحديث ملفين لمعالجة هذه الثغرة.

أحد الملفات التي تم تحديثها هو ملف subodule--helper.c، والذي يتضمن الشيفرة التي تتعامل مع استنساخ وحدة Git الفرعية. تضمن الالتزام الجديد في النسخة المصححة الملفين التاليين:

  1. إضافة الدالة dir_contains_only_only_dotgit للتأكد من أن دليل الوحدات الفرعية لا يحتوي على أي ملفات أو أدلة .git.
تحليل ثغرة Git ومعالجتها CVE-2024-32002
  1. تم إجراء تغييرات على دالة clone_submodule() لتضمين شرط للتحقق مما إذا كان دليل الوحدة الفرعية موجودًا وفارغًا. إذا لم يكن الدليل فارغًا، فسيتم إجهاض عملية الاستنساخ.
تحليل ثغرة Git ومعالجتها CVE-2024-32002

أما التحديث الثاني في الالتزام الجديد فكان في ملف t/t7406-submodule-update.sh، حيث تم إضافة برنامج نصي اختباري للتحقق من حل الثغرة الأمنية.

تحليل ثغرة Git ومعالجتها CVE-2024-32002

من التحليل إلى الاستغلال

تحليل سير العمل للارتباطات Symlinks والوحدات الفرعية في Git

بالإضافة إلى الرؤى التي تم جمعها من تحليل الرقعة ووصف الثغرة الأمنية CVE-2024-32002، عمل زملاء OPSWAT على التحقيق في سير عمل الروابط الرمزية والوحدات الفرعية في Git. وقاموا بتحليل تسلسل الأحداث التي تحدث عندما يقوم المستخدم باستنساخ مستودع:

  1. يبدأ Git بتنزيل الملفات والدلائل من المستودع الأساسي.
  2. ويستخدم التعريفات المحددة في ملفات الروابط الرمزية لإعادة إنشاء ارتباطات رمزية مطابقة في نظام الملفات المحلي.
  3. إذا كان الارتباط الرمزي يشير إلى ملف موجود، فسيعمل الارتباط الرمزي؛ وإلا فسيظل الارتباط الرمزي معطلاً حتى تتم استعادة الهدف.
  4. إذا تم استنساخ المستودع باستخدام الخيار -- التكراري، يستنسخ Git الوحدات الفرعية (المستودعات الخارجية) ويضعها في مسارات الدليل كما هو موضح في ملف .gitmodules.
  5. إذا كان الارتباط الرمزي جزءًا من مسار الوحدة الفرعية (على سبيل المثال، util/module/test، حيث يكون symlink رابطًا رمزيًا يشير إلى دليل آخر، مثل symlink_folder)، فإن Git سيخزن محتوى الوحدة الفرعية في الدليل الفعلي المشار إليه بواسطة الرابط الرمزي (على سبيل المثال، symlink_folder/module/test)، مع السماح بالوصول من خلال مسار الرابط الرمزي الأصلي.
تحليل ثغرة Git ومعالجتها CVE-2024-32002

فهم الثغرة الأمنية في CVE-2024-32002 Git

إنشاء المستودعات الخبيثة

قام زملاء OPSWAT بمزيد من الفحص لإنشاء مستودعات خبيثة استنادًا إلى التحديثات التي تم إجراؤها لملفt/t7406-submodule-update.sh وقسموا هذه العملية إلى الخطوات التالية:

  1. إنشاء مستودع يحتوي على خطاف ما بعد الخروج
تحليل ثغرة Git ومعالجتها CVE-2024-32002
  1. إنشاء مستودع آخر يتضمن وحدة فرعية موجودة في المسار A/modules/x. تشير الوحدة الفرعية الجديدة إلى المستودع الذي تم إنشاؤه مسبقًا.
تحليل ثغرة Git ومعالجتها CVE-2024-32002
  1. إنشاء رابط رمزي باسم a، يشير إلى مجلد .git في فهرس Git.
تحليل ثغرة Git ومعالجتها CVE-2024-32002
تحليل ثغرة Git ومعالجتها CVE-2024-32002
رسم تخطيطي يوضح كيف يمكن للمهاجم استغلال مكافحة التطرف العنيف عن طريق استنساخ مستودع

فهم الخلل الأمني

عندما يستنسخ المستخدم مستودعًا خبيثًا، تم إنشاؤه في الخطوة السابقة، باستخدام الخيار -- التكراري، سيتم تشغيل البرنامج النصي الخبيث من خطاف ما بعد الخروج، مما يسمح للمهاجم باختراق جهاز المستخدم.

يحدث تنفيذ التعليمات البرمجية عن بعد لأن المستودع الرئيسي يكتشف ارتباطًا رمزيًا باسم a يشير إلى دليل .git عند استنساخه. مع تمكين الوضع العودي، يتم أيضًا سحب الوحدات الفرعية إلى المستودع المستنسخ. يحتوي هذا المستودع على مجلد الخطافات، والذي يحتوي على البرنامج النصي لخطاف ما بعد الخروج، ودليله المحلي في A/modules/x.

نظرًا لأن الحرف «a» يشير إلى الدليل.git ونظام الملفات لا يميز بين الأحرف الكبيرة والصغيرة، يُفسَّر الحرف «A» على أنه مكافئ للحرف «a». مما يؤدي إلى تضليل Git ليقوم بكتابة البرنامج النصي لخطاف ما بعد السحب (post-checkout hook) في الدليل .git/modules/query/fast/hooks/. إذا تم العثور على برنامج نصي لخطاف ما بعد السحب (post-checkout hook) في المجلد .git/modules/{module_type}/{module_name}/hooks، فسيتم تشغيله عند استنساخ المستودع الرئيسي باستخدام الخيار --recursive. ونتيجة لذلك، يمكن للمهاجمين اختراق جهاز المستخدم بنجاح عن طريق تنفيذ تعليمات برمجية عن بُعد.

تحليل ثغرة Git ومعالجتها CVE-2024-32002
رسم بياني يعرض تدفق الهجوم

محاكاة استغلال ثغرة أمنية في Git

بناءً على النتائج السابقة، قام زملاء OPSWAT بإنشاء مستودع رئيسي وخطاف لمحاكاة إنشاء مستودع خبيث:

  1. في البداية، يُوصى بتهيئة Git بحيث يسمح دائمًا بـ protocol.file، وتمكين core.symlinks، وتعيين اسم الفرع الافتراضي إلى main (لتجنب ظهور رسالة تحذير).
تحليل ثغرة Git ومعالجتها CVE-2024-32002
  1. تتم إضافة نص برمجي خطاف ما بعد الخروج الخبيث إلى دليل الخطافات. للتأكد من إمكانية تنفيذ البرنامج النصي لما بعد الخروج على جهاز المستخدم، يتضمن البرنامج النصي للباش الذي ينشئ هذا الخطاف الأمر chmod +x fast/hooks/post-checkout.
تحليل ثغرة Git ومعالجتها CVE-2024-32002
  1. يتم إنشاء رابط رمزي في المستودع الرئيسي يشير إلى دليل .git.
تحليل ثغرة Git ومعالجتها CVE-2024-32002
تحليل ثغرة Git ومعالجتها CVE-2024-32002
المستودع الرئيسي الضعيف
تحليل ثغرة Git ومعالجتها CVE-2024-32002
<p>The <em>/hooks</em> folder with a post-checkout hook</p>
تحليل ثغرة Git ومعالجتها CVE-2024-32002
عندما يقوم المستخدم باستنساخ هذا المستودع الخبيث، يمكن للمهاجم اختراق جهاز الضحية.

الاصلاح

لتحييد هذا التهديد، يمكن للمستخدمين إلغاء تثبيت Git أو تثبيت أحدث تصحيح أمني. وبدلاً من ذلك، يمكن لحل مثل MetaDefender Endpoint إخطار المستخدم على الفور وعرض جميع الثغرات الأمنية المعروفة (CVE) داخل البيئة من خلال واجهته سهلة الاستخدام. كما يمكن لـ MetaDefender Endpoint اكتشاف أحدث الثغرات الأمنية (CVE) والتخفيف من آثارها من خلال الاستفادة من قدراته التي تشمل أكثر من 3 ملايين نقطة بيانات وأكثر من 30,000 ثغرة أمنية مرتبطة بها مع معلومات حول درجة خطورتها. ومن خلال تنفيذ أي من هذين الإجراءين، سيتم احتواء الثغرة الأمنية (CVE) بشكل كامل، مما يقضي على خطر وقوع هجوم إلكتروني مدمر.

هل أنت مستعد لوضع MetaDefender Endpoint في الخطوط الأمامية لاستراتيجية الأمن السيبراني لديك؟


مراجع

(1) https://nvd.nist.gov/vuln/detail/CVE-2024-32002

(2) https://git-scm.com/

(3) https://www.atlassian.com/git/

(4) الرابط الرمزي - ويكيبيديا

(5) https://www.vicarius.io/vsociety/posts/exploiting-git-rce-cve-2024-32002

ابق على اطلاع دائم OPSWAT!

اشترك اليوم لتتلقى آخر أخبار الشركة، والقصص، ومعلومات عن الفعاليات، والمزيد.