CVE-2025-60500 — Небезопасная загрузка файлов / логическая ошибка в QDocs Smart School (Smart School 7.1)
Дата публикации: 2025-10-17
Автор / Исследователь: Lebas Vivien
Статус: Зарезервирован
CVE: CVE-2025-60500 (зарезервирован)
Краткое описание
Небезопасная загрузка файлов / логическая ошибка в QDocs Smart School — School Management System 7.1 позволяет аутентифицированным пользователям с ролями accountant, admin или superadmin обойти ограничения на типы файлов в функции загрузки медиафайлов, злоупотребляя альтернативной опцией YouTube URL. Эта ошибка позволяет злоумышленнику сохранить произвольные PHP-файлы в каталоге, доступном через веб, что обеспечивает удалённое выполнение кода при обращении к загруженному файлу.
Затронутый продукт: Smart School : School Management System 7.1 (QDocs)
Подтверждено поставщиком: Да
Воздействие
- Удалённое выполнение кода (RCE) через загруженные PHP-файлы, размещённые в каталоге, доступном через веб.
- Аутентифицированный пользователь с указанными ролями может загрузить произвольный PHP-файл, который будет сохранён по предсказуемому пути, доступному через веб.
- Злоумышленники могут выполнять системные команды или продвигаться дальше в среде, обращаясь к загруженному файлу.
Затронутый компонент
- Функция загрузки файлов — Download Center > Upload Share Content (загрузка медиафайлов / поток общего доступа к контенту)
Тип атаки / Вектор
- Тип атаки: Удалённая (требуется аутентифицированная учётная запись с ролью: accountant/admin/superadmin)
- Векторы атаки: Поток загрузки в сочетании с альтернативной опцией YouTube URL; при отправке как загруженного файла, так и поля ссылки YouTube сервер сохраняет загруженный файл с расширением
.php в каталоге, доступном через веб.
Воспроизведение (концептуальный PoC — исполняемая нагрузка не включена)
- Войдите в Smart School как пользователь с ролью
accountant, admin или superadmin.
- Перейдите в Download Center → Upload Share Content.
- Перехватите HTTP-запрос (например, с помощью прокси, такого как Burp) во время рабочего процесса загрузки/обмена.
- Загрузите файл, имя которого заканчивается на
.php (серверные проверки/фильтры пытаются заблокировать загрузку PHP через обычную проверку типов файлов).
- В том же запросе загрузки/отправки также заполните альтернативное поле YouTube URL (логический путь, который обрабатывает опцию YouTube, ошибочно позволяет принять и сохранить загруженный файл).
- Завершите поток обмена/загрузки; обратите внимание на ответ сервера или наблюдайте возвращённый путь сохранённого файла (приложение раскрывает путь хранения). Пример наблюдаемого шаблона пути хранения: /uploads/school_content/material/media/!file.php
- Обратитесь к сохранённому
.php-файлу через возвращённый URL, чтобы вызвать выполнение кода (если файл содержит исполняемый PHP-код).
Доказательство концепции (высокоуровневое)
- PHP-файл, загруженный через уязвимый поток, записывается в каталог, доступный через веб, и может быть вызван напрямую по HTTP.
- Уязвимость представляет собой обход логики/проверки (путь кода с альтернативным YouTube URL не обеспечивает соблюдение тех же строгих ограничений на типы файлов, что и обычный поток загрузки).
Смягчение / Рекомендуемые исправления
Исправления на стороне поставщика (рекомендуемые):
- Исправьте логическую ошибку, чтобы альтернативный путь YouTube URL и любые другие специальные пути загрузки обеспечивали ту же проверку типов файлов и фильтрацию, что и обычный поток загрузки. Также проверяйте, является ли YouTube URL действительным/существующим.
- Заблокируйте выполнение загруженных файлов, храня загруженный контент вне веб-корня или обеспечив обслуживание загрузок через безопасный обработчик, который никогда не выполняет серверный код.
- Внедрите серверные проверки MIME-типов и расширений, а также проверяйте по белому списку разрешённых типов файлов, а не по чёрному списку.
- Переименовывайте сохранённые файлы в безопасные расширения и/или рандомизируйте имена без сохранения исходного расширения.
- Установите правильные серверные разрешения, чтобы загруженные файлы не были исполняемыми (например,
chmod для удаления разрешения на выполнение; настройте веб-сервер так, чтобы он не выполнял PHP из каталогов загрузки).
- Добавьте журналирование и мониторинг подозрительных загрузок и попыток доступа к загруженным файлам.
- Примените ограничения на основе ролей — ужесточите, каким ролям разрешено загружать контент, и требуйте дополнительную проверку для привилегированных ролей.
Обходные пути для администраторов:
- Временно отключите проблемную функцию загрузки/обмена, если это возможно.
- Ограничьте доступ к загрузке меньшим числом доверенных учётных записей.
- Настройте веб-сервер на запрет выполнения
.php в каталоге /uploads/....
Ссылки
- Сообщённый демонстрационный экземпляр:
https://smart-school.in/demo
- Зарезервированный идентификатор CVE MITRE: CVE-2025-60500