В Elementor Pro нашли критическую дыру для RCE через загрузку файлов

В Elementor Pro нашли критическую дыру для RCE через загрузку файлов

В Elementor Pro обнаружили критическую уязвимость в модуле форм: неавторизованный злоумышленник мог загрузить PHP-файл и выполнить код на сервере. Проблема затрагивала версии плагина до 4.2.2 и была связана с полем File Upload. Patchstack уже выпустила правила защиты, а разработчик закрыл дыру обновлением.

Уязвимость получила идентификатор CVE-2026-32475. По данным Patchstack, проблема возникала из-за того, что проверка расширения файла и перенос загруженного файла выполнялись в двух разных циклах, а пустые элементы в multipart-запросе обрабатывались по-разному.

Атакующему хватало отправить два фрагмента файла для одного и того же поля. Если первый приходил пустым, с ошибкой UPLOAD_ERR_NO_FILE, то проверка могла завершиться раньше времени, а второй, уже с вредоносным PHP-кодом, всё равно попадал в папку с публично доступными загрузками. После этого код исполнялся при обращении к файлу напрямую.

Как сработала уязвимость в Elementor Pro

Patchstack описывает уязвимость как рассинхронизацию между двумя частями одного механизма. Валидация в модуле Forms проверяла список загруженных файлов отдельно, а перенос в каталог uploads выполнялся позже и по своим правилам. Пустой элемент в начале последовательности ломал логику проверки, но не мешал шагу с переносом продолжить работу.

Читайте также:
  • Проблема затрагивала Elementor Pro 4.2.1 и более ранние версии.
  • Уязвимость работала без авторизации и без cookie.
  • Для атаки нужен был опубликованный Form widget с полем File Upload.
  • Загруженный файл попадал в wp-content/uploads/elementor/forms/.

Поле загрузки в Elementor Pro используется в обычных сценариях вроде форм отклика на вакансии, заявок в поддержку и отправки вложений. По описанию Patchstack, поле Required по умолчанию выключено, поэтому атаке не требовалась редкая конфигурация.

Имя сохраненного файла формировалось через PHP-функцию uniqid(), а исходное имя из запроса отбрасывалось. В опубликованном отчете указано, что это позволяло восстанавливать имя payload’а по времени либо через письмо с автоответом, если на форме была включена такая отправка.

Patchstack сообщает, что исправление вышло в Elementor Pro 4.2.2. В новой версии проверка расширения повторяется и внутри процесса переноса, так что пустой элемент больше не может пройти валидацию и одновременно добраться до места записи файла.

В компании также рекомендуют проверить каталог wp-content/uploads/elementor/forms/ на наличие PHP-файлов и других лишних объектов. Обновление закрывает саму дыру, но не удаляет уже загруженные при атаке файлы.

Источники: Patchstack, Bleepingcomputer
Опубликовано:
Марта Баринова