
Версии BigBlueButton ниже 2.2.4 имеют уязвимость LFI, которая позволяет получить доступ к конфиденциальным файлам. 🚨
Версии BigBlueButton ниже 2.2.4 содержат уязвимость LFI, позволяющую получить доступ к конфиденциальным файлам.
Во время курса дистанционного обучения на экземпляре BigBlueButton один из студентов моего курса поделился ссылкой на слайд-презентацию моего преподавателя, и я заметил, что имя файла было включено в URL.

Student: "No need to write notes, I've got the slide."
Me: Well, I've got a security report to make. 😂
Немного поиграв с этим, я смог получить доступ к файлу /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), регулярного выражения и точного формата имени файла.
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"';
}