Websocket response manipulation leads to access admin panel (Arabic)
وأنا أشتغل على هدف في برنامج باونتي، وصلت لموقع فرعي شكله عادي، بس بعد ما تصفحته شوي لاحظت إن فيه نظام صلاحيات، يعني المستخدمين مو كلهم نفس الشي.
وأنا أشيّك على المحتوى لفت نظري دومين ثاني يخص نفس الشركة، دخلت عليه ولقيت موقع فيه تسجيل وتسجيل دخول.
كالعادة أول شي أسويه إني أشوف ريكوست تسجيل الدخول، وهنا كانت المفاجأة: الريكوست ما كان HTTP عادي، كان يستخدم WebSocket، وذي نادر تمر علي في تسجيل الدخول.
وش هو WebSocket؟ وش الفرق بينه وبين HTTP؟
WebSocket هو بروتوكول يفتح اتصال دايم بين المتصفح والسيرفر، يعني يقدر الطرفين يرسلون بيانات لبعض بأي وقت بدون ما يحتاجون يسوون طلب جديد كل مرة، مثل ما يصير في HTTP.
أما HTTP، فهو يعتمد على نظام “طلب — رد”، يعني المتصفح يطلب والسيرفر يرد، وكل مرة لازم يعيد فتح الاتصال.
وأنا أتفحص ريكوست الـ WebSocket الخاص بتسجيل الدخول، لاحظت فيه باراميتر اسمه role
وكان فيه القيمة visitor
.
قلت خل أجرب أشوف وش باقي الأدوار، ففتحت ملف الجافاسكربت الأساسي main.js
وبحثت عن كلمة visitor
. طلع لي إن النظام يعرف ثلاث صلاحيات:
- visitor
- manager
- admin
وقتها شكيّت إن الباراميتر هذا ممكن يكون تحت تحكم المستخدم، يعني لو غيرته يمكن النظام يعطيني صلاحية أعلى.
بس المشكلة إن ريكوستات WebSocket كثيرة ومتكررة، وما أقدر أعدلها يدويًا كل مرة، فبدأت أدوّر حل.
بعد بحث طويل (يوم كامل تقريبًا )، اكتشفت إن Burp Suite فيه خاصية اسمها Match & Replace تشتغل على WebSocket، مو بس على HTTP.
ضبطت قاعدة تستبدل "role":"visitor"
بـ "role":"admin"
في كل ريكوست WebSocket يطلع من جهازي.
سجلت دخولي بحساب عادي، وفجأة دخلني كأدمن
التأثير
الثغرة كانت تسمح لي أرفع صلاحياتي من visitor
إلى admin
بدون ما أحتاج أكون عندي بيانات دخول أدمن أو أخترق الحساب.
بمجرد ما صرت أقدر أدخل كأدمن، صرت أتحكم في كل شي بالموقع، منها:
- الوصول لبيانات كل المستخدمين
- حذف الحسابات
- التعديل على المحتوى
- تنفيذ أوامر إدارية كاملة
الثغرة خطيرة جدًا، لأنها تعني تحكم كامل في الموقع وممكن تسبب ضرر كبير على البيانات والمستخدمين.