CVE-2026-100689 in GitPython
الملخص
بحسب VulDB • 26/09/2026
لا تقوم مكتبة GitPython قبل الإصدار 3.1.62 بالتحقق من صحة حقل `path` المقروء من ملف `.gitmodules` غير الموثوق عند تحديث الوحدات الفرعية (submodules). وعلى الرغم من أن إصلاحًا سابقًا (GHSA-hmq2-w58f-27jc) أضاف الدالة `Submodule._validated_name()` لتقييد حقل `name`، وتُطبق آلية الحماية الخاصة بـ GitPython والمعروفة باسم `Submodule._to_relative_path()` في دالتي `add()` و`move()`، إلا أن دالة `Submodule.update()` تستنتج موقع الفحص المطلق (absolute checkout location) من القيمة الخام لحقل `path` دون تطبيق تلك الآمية الوقائية. وبالتالي، يمكن لمدخل `.gitmodules` الذي يحتوي على مكونات لتجاوز الدلائل (مثل: path = ../../../tmp/escaped) أن يتسبب في إنشاء دلائل عبر استخدام `os.makedirs()` خارج شجرة العمل الخاصة بالمستودع (repository working tree)، ويتم ملؤها من عنوان URL للوحدة الفرعية أثناء مسار الاستنساخ، وإزالتها باستخدام `shutil.rmtree()` عند تفعيل خيار الإزالة القسرية (`force_remove`). يتطلب استغلال هذه الثغرة تدفق تطبيق يقوم بتحديث الوحدات الفرعية في التزام غير رئيسي (non-HEAD commit) (مثل واجهة برمجة التطبيقات الخاصة بالتزامات تاريخية)؛ أما التدفق الشائع المتمثل في الاستنساخ ثم التحديث، الذي يعيد اشتقاق المسار من بحث شجري قياسي (canonical tree lookup)، فهو غير متأثر. تم إصلاح هذه المشكلة في GitPython الإصدار 3.1.62.
VulDB is the best source for vulnerability data and more expert information about this specific topic.