فك التسلسل غير الآمن Insecure Deserialization
الثقة بكائن معاد بناؤه ومسار قديم بلا توقيع ونوع gadget ينفذ عند فك التسلسل ولماذا إعادة بناء الكائنات من بيانات المستخدم خطر
- المسار
- أمن الويب
- الوقت المتوقع
- 25 د
- المستوى
- متوسط
قبل هذا الدرس
التسلسل يحول الكائن إلى بايتات للتخزين أو الإرسال وفك التسلسل يعيد بناءه وفك التسلسل غير الآمن إعادة بناء كائن من بيانات يتحكم بها المهاجم ثم الثقة به حقوله أو توقيعه أو حتى الفئة التي يسميها وفي أسوأ الحالات في اللغات ذات التسلسل الغني يقود اختيار النوع المناسب عند العودة إلى تنفيذ شيفرة مباشرة
هذه اللابات تحاكي التسلسل base64 لـ JSON وسجل gadget فلا ينفذ شيء حقيقي ولا يمس محرك اللابات والسلوك كائن معاد بناؤه موثوق وتوقيع متخطى ونوع gadget يشغل فعلا يطابق الثغرة الحقيقية
ما هي الثغرة؟
- الثقة بالكائن المعاد بناؤه الجلسة كائن متسلسل فيه المستخدم والدور يفككه الخادم ويثق بالدور اقلبه إلى admin
- مسار قديم بلا توقيع يضاف توقيع لكنه يتحقق فقط حين يوجد جرده يمر الكائن المزور
- gadget عند فك التسلسل يبني فك التسلسل الفئة التي يسميها حقل __type ويشغل سلوكها نوع Report بريء لكن gadget من نوع Command ينفذ فعلا على الخادم ويسرب بيانات
لماذا تحدث؟
تعامل الصيغة كأنها حالة داخلية موثوقة لكنها مرت عبر العميل والتوقيع ينفع فقط إن كان إلزاميا وفك التسلسل الذي يبني أنواعا عشوائية يعطي المهاجم أداة بناء سلاسل الgadget الشهيرة
كيف تتوقف؟
احفظ الحالة الحساسة في الخادم ومعرف عشوائي فقط عند العميل أو وقعها واطلب توقيعا صالحا كل مرة ولا تفك تسلسل بايتات غير موثوقة إلى أنواع بسلوك بل حلل بيانات خالصة بمخطط وابن كائناتك من الحقول المتحقق منها
اللابات الثلاثة أدناه تمشي هذا زور كائن جلسة وجرد توقيعا وأطلق gadget
اللابات
كائن جلسة موثوق
محلولسهللاب في المتصفح
زور كائن الجلسة لتصبح admin
ادخل اللابمقفلتجريد التوقيع
محلولمتوسطلاب في المتصفح
زور الكائن بلا توقيع لتصبح admin
ادخل اللابمقفلسلسلة gadget
محلولصعبلاب في المتصفح
اصنع كائن gadget من نوع Command ينفذ ويسرب سر الخادم
ادخل اللابمقفل
