
Технический разбор и proof-of-concept для CVE-2023-46474, уязвимости удалённого выполнения кода в PMB <=7.5.3 через неограниченную загрузку файлов, включая шаги воспроизведения и рекомендации по устранению.
CVE-2023-46474
| Вектор CVSS v3.1 | Оценка CVSS v3.1 |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
Обнаружено в ходе теста на проникновение Маркусом Рейно из Devensys Cybersecurity
Скрипт pmb/admin/convert/start_import.php уязвим к ошибке типа , что позволяет получить выполнение произвольного кода на сервере.
Unrestricted File Upload
Атакующему необходимо предварительно получить административный доступ к платформе, чтобы использовать эту функциональность.
PHP-скрипт не проверяет расширение файла, загружаемого пользователем, и сохраняет его в каталог, доступный веб-серверу, сохраняя его расширение. Таким образом, можно загрузить PHP-скрипт, а затем выполнить его, посетив место, куда он был загружен.
Это поведение можно воспроизвести следующим образом:
Отправляем файл с расширением .php, содержащий код, который мы хотим выполнить в системе. Здесь мы выполним системную команду id.

Наблюдая за ответом, мы можем получить имя файла, как он был записан на сервере.

Чтобы выполнить наш код, достаточно посетить /pmb/temp/[имя_файла].php в браузере.

Результат команды возвращается сервером.
Причиной этой уязвимости является отсутствие контроля над файлом перед его записью на диск:

Для устранения этой уязвимости необходимо реализовать контроль расширений для файлов, загружаемых пользователями.
Мы рекомендуем использовать систему белого списка, которая разрешает только определённые расширения файлов.
Вы также можете записывать файл на диск без расширения (учитывая, что это временное хранилище).
Также возможно записывать файл в каталог, находящийся вне области действия веб-сервера, что сделает файл недоступным в Интернете, и код не сможет быть выполнен.
Версии 7.5.4 и выше не уязвимы, скрипт был полностью переписан.