HTTP Header يمكنك أيضًا التحقق من قيمة الـHTTP header التالي "Content-type" الموجود في الرد القادم من الـweb server إذا كان قيمته كالتالي: application/x-java-serialized-object ، فقد يشير إلى أن هذا serialized object
تأثير الثغرة الآن بما أننا نعرف كيفية إجراء serialization & deserialization لـobject ، فما الضرر الذي يمكن أن يسببه لنا هذا الخاصية، عمل الـdeserialization بدون التحقق من القيمة المدخلة قد تؤدي إلى الكثير من الثغرات الخطيرة مثل privilege escalation أو arbitrary file access أو هجمات denial-of-service ، وعادة ما تؤدي هذه الثغرة إلى تنفيذ الأوامر عن بعد (Remote Code Execution).
حل للثغرة ضع في اعتبارك أنه لا يوجد "حل سحري" يمكن أن يمنع هجمات الـinsecure deserialization. من الأفضل تجنب أخذ أي مدخلات serialized من المستخدمين أو مصادر غير موثوق بها وعمل deserialization عليها، ولكن إذا كان الـdeserialization أمرًا ضروريًا ، فإن تنفيذ بعض الأساليب التالية يعد طريقة جيدة لتخفيف هجمات insecure deserialization في Java:
- يجب أخذ logs خلال عملية الـdeserialization في حال كان هنالك فشل(exceptions)، مثل عندما لا يكون النوع القادم هو النوع المتوقع، أو أن علمية الـdeserialization تظهر العديد من الـexceptions.
- عزل وتشغيل الـcode التي تقوم بالـdeserialization في بيئة ذات صلاحيات منخفضة عندما يكون ذلك ممكنًا.
- إذا كان ذلك ممكنًا ، فلا تسمح إلا بأنواع البيانات الأولية(primitive data types) مثل byte, short, int, long, float, double, boolean, and char.
- داخل الـcode الخاص بك ، قم بعمل override للـObjectInputStream.resolveClass لمنع الـdeserialization بشكل عشوائي ويمكن ذلك عن طريق تغليف(wrap) هذا الطريقة من خلال مكتبة مثل الـSerialKiller.
- تقييد أو مراقبة اتصال الشبكة الواردة والصادرة من الcontainers أو الـweb server التي تقوم بالـdeserialization.
إستغلال ثغرة الـInsecure Deserialization هنا، سأوضح كيفية استغلال هذه الثغرة من خلال القيام بحل هذا الـ
lab من أكاديمية Port-swigger. لكن أولاً ، دعنا نتعرف على ماهي الـgadgets ولماذا نحتاج إليها.
ماهي الـgadgets؟ gadgets هي عبارة عن code موجود داخل التطبيق. يستخدمه المهاجمون لتحقيق أهدافهم، ولكن يمكن للـgadget بمفردها أن لا تفعل أي شيء ضار بإدخالات المستخدم(user inputs). ومع ذلك ، يمكن للمهاجم تمرير قيمة الإدخال إلى gadget خطيرة من خلال ربط عدة gadgets معًا. لكن تحديد سلسلة من الـgadgets يدويًا يتطلب الوصول إلى الـsource code ويمكن أن يكون أيضًا مهمة صعبة تستهلك الكثير من الوقت والجهد؛ لحسن الحظ ، هناك بعض الأدوات لأتمتة عملية البحث عن الـgadgets مثل
gadgetinspector ، وهناك أيضًا أدوات مثل
ysoserial تحتوي على مجموعة من الـgadgets المكتشفة مسبقًا والتي تم اختبارها واستغلالها بنجاح على مواقع ويب أخرى.
تطبيق عملي لاستغلال الثغرة الهدف من هذا المعمل هو حذف ملف من الـserver ، كما هو موضح في الصورة أدناه