
يحتوي هذا المستودع على جميع الأعمال المتعلقة بتطوير PoC لثغرة CVE-2024-48208، وكيف يمكن لقراءة بسيطة خارج الحدود (OOB) أن تؤدي إلى عمليات هروب من بيئة الحماية (jail escapes) بالإضافة إلى كسر التحكم في الوصول.
يحتوي هذا المستودع على جميع الأعمال المتعلقة بتطوير إثبات المفهوم (PoC) لكيفية أن قراءة بسيطة خارج الحدود (OOB) يمكن أن تؤدي إلى الهروب من العزلة وكذلك كسر التحكم في الوصول.
وصف الثغرة (CVE) الأصلي كما يلي:

يوضّح الطلب المدمج على GitHub في المستودع الرسمي كيف أن الدالة domlsd() في ملف ls.c معرّضة لثغرة قراءة خارج الحدود (OOB)، وذلك بسبب زيادة غير مفحوصة لمؤشر القاعدة، مما قد يؤدي بالمؤشر إلى الإشارة إلى مخزن خارج مخزن cmd، كما يمكن ملاحظته في السطرين رقمي 1053 و1054.

أثناء تصحيح أخطاء المخزن في GDB، لاحظنا أن القراءة خارج الحدود كانت تجعل المستخدم يقع في ما يُسمى replybuf.
وبعد مزيد من التحليل، وجدنا أن replybuf هو مخزن يتم تعبئته بالرد الذي يقدمه الخادم إلى العميل. يتم تعريف replybuf في ملف ftpd.c، كما هو موضح أدناه:

إذن لتلخيص ما سبق:
base يشير إلى جزء من replybuf.replybuf على الاستجابة المقدمة إلى العميل.الآن، في الطلب المدمج الأصلي على GitHub، لم يأخذ مؤلف الثغرة (CVE) في الاعتبار/يوضح ما الذي قد يحدث إذا عاد الشرط التالي في ls.c:1055 بالقيمة true؟

بدأنا نأخذ الأمر في الاعتبار، واتضح أنه إذا تمكن المهاجم من جعل chdir(base) يُرجع قيمة true، فإن الدالة domlsd() تمضي قدمًا في سرد الملف.
أخذ الفريق في الاعتبار السيناريوهات المُقدَّمة في VMsetup.txt، والتي تتعلق بقيام مسؤولي الأنظمة بإعداد بيئات مقيدة، وقرر بناء استغلال يعمل على النحو التالي:
سيتصل المستخدم المقيد بخادم FTP المعرّض للثغرة، ويسجل الدخول باستخدام بيانات اعتماده.
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
سينتقل المستخدم بعد ذلك إلى وضع EPSV.
EPSV
يسجل المستخدم رقم المنفذ المُعاد، حيث سيتعين عليه الاتصال به لقراءة نتائج السرد.
يمكن للمستخدم الآن إنشاء ملف رابط (يعتمد على إزاحة المخزن التي يمكن أتمتتها بسهولة وفقًا لآخر رد تم استلامه) يشير إلى الدليل الذي يرغب في سرد الملفات منه.
يرسل المستخدم الأمر الخبيث (يعتمد على الإزاحة المحددة).
MLSD -........<more than 4096 to overflow the cmd buffer>
يمكن للمستخدم بعد ذلك إنشاء اتصال آخر بمنفذ الرقم الذي تم تسجيله سابقًا لقراءة السرد.
لقد طوّرنا سكربت استغلال آلي pure.py ينفذ الخطوات نفسها، وهو مبني على سكربتات أخرى طوّرناها أثناء العمل للاختبار، ويمكن العثور عليها في دليل dev_files.
لإعادة إنتاج الثغرة، يمكنك اتباع دليل خطوة بخطوة لإعداد جهاز افتراضي في VMsetup.txt
لإنشاء حاوية Docker للنسخة المعرّضة للثغرة، يمكنك الرجوع إلى Dockersetup.txt