تفاصيل العمل

قمت بإجراء اختبار اختراق (Penetration Testing) على تطبيق ويب ضعيف عمداً (DVWA) لتقييم مدى فعالية آليات الحماية المطبقة ضد هجمات الحقن (Injection Attacks)، وتحديداً على وظيفة "Ping a device" في صفحة Command Injection.

عند فحص الكود المصدري للتطبيق (بعد ضبط مستوى الأمان على "High")، لاحظت أن المطور اعتمد على أسلوب Blacklist Filtering لمنع حقن الأوامر، عن طريق دالة str_replace() لحذف مجموعة من الرموز الخطيرة مثل: || و & و ; و $ وغيرها. إلا أنني اكتشفت ثغرة منطقية دقيقة في الفلتر: كان يستهدف الرمز "| " (pipe متبوعاً بمسافة) بدلاً من "|" بمفرده.

استغللت هذه الثغرة بإدخال القيمة التالية في حقل الـ IP:

192.168.1.8|id

وبما أن الفلتر يبحث فقط عن نمط "pipe + space"، لم يتعرف على الـ pipe غير المسبوقة بمسافة، فتم تمريرها كما هي إلى دالة shell_exec() الخاصة بنظام التشغيل. نتج عن ذلك تنفيذ أمر id بنجاح، وظهرت النتيجة:

uid=33(www-data) gid=33(www-data) groups=33(www-data)

وهو ما يؤكد إمكانية تنفيذ أوامر نظام تشغيل عشوائية (Arbitrary OS Command Execution) بصلاحيات خادم الويب.

التصنيف والتوثيق:

تم تصنيف الثغرة وفق معايير:

OWASP Top 10 2021: A03 – Injection

CVSS v3.1 Score: 9.8 (Critical)

التوصيات التي قدمتها لمعالجة الثغرة:

الاستغناء الكامل عن تمرير مدخلات المستخدم إلى shell_exec()

استخدام دالة escapeshellarg() لضمان معاملة المدخل ككتلة نصية واحدة آمنة

تطبيق مبدأ Whitelist Validation بدلاً من Blacklist (السماح بالأرقام والنقاط فقط لصحة تنسيق الـ IP)

تطبيق مبدأ الحد الأدنى من الصلاحيات (Least Privilege) على حساب تشغيل الخادم

بطاقة العمل

اسم المستقل
عدد الإعجابات
0
تاريخ الإضافة
تاريخ الإنجاز