В популярном дополнении к конструктору сайтов WordPress обнаружена уязвимость, которая позволяет неавторизованному посетителю загрузить на сервер исполняемый PHP-файл и выполнить произвольный код. Проблема связана с обработкой пустых значений в поле загрузки файлов и затрагивает версии плагина до 4.2.1. Создатели плагина уже выпустили исправленную версию 4.2.2, а исследователи Patchstack опубликовали правила защиты.
Уязвимость CVE-2026-32475
Elementor Pro - это платное расширение конструктора Elementor, одного из самых распространенных инструментов для создания сайтов на WordPress. Среди его функций есть виджет Forms, который позволяет встраивать в страницы формы для приема откликов на вакансии, заявок в поддержку, обращений с прикреплением документов. В этих формах широко используется поле File Upload, чтобы посетитель мог приложить файл к сообщению.
Уязвимость кроется в логике обработки загружаемых файлов. Когда пользователь отправляет форму, плагин выполняет два независимых прохода по данным. На первом этапе код проверяет расширение файла по списку разрешенных и запрещенных типов. На втором этапе загруженный файл перемещается в общедоступную директорию на сервере. Оба прохода по-разному реагируют на пустую запись файла - ситуацию, когда одно из полей формы не содержит файла. В первом цикле при обнаружении пустой записи проверка прекращается, а во втором цикле такая запись просто пропускается, и код переходит к следующему элементу.
Именно это несоответствие позволяет обойти защиту. Злоумышленнику достаточно отправить форму с двумя частями одного поля. Первая часть является пустой записью, вторая содержит файл с расширением PHP. Функция проверки расширения натыкается на первую запись и завершает работу, поэтому вторая часть остается непроверенной. Обработчик перемещения, напротив, пропускает пустую запись и обрабатывает следующую, сохраняя PHP-файл в открытой для доступа папке. В итоге на сервере оказывается исполняемый файл, который можно запросить по прямой ссылке и добиться выполнения произвольного кода.
Важно отметить, что защита от загрузки исполняемых расширений в плагине предусмотрена. В списке запрещенных типов есть PHP, PHTML и ряд других опасных форматов. Однако из-за логической ошибки эта проверка не срабатывает для конкретной последовательности записей. Само по себе имя загружаемого файла генерируется на основе времени, что делает его предсказуемым. Помимо этого, плагин по умолчанию включает в уведомление о новой заявке строку со ссылкой на загруженный файл. Если форма также отправляет автоматическое письмо самому отправителю, злоумышленник может получить точный URL файла безо всякого перебора.
Для эксплуатации уязвимости необходимо лишь одно условие: на сайте должна быть опубликована страница с формой, содержащей поле загрузки файла. Это стандартная конфигурация, которую используют для приема резюме, сканов документов, квитанций и заявок в техподдержку. Поле не обязательно делать обязательным - по умолчанию оно таковым не является. Более того, все параметры, необходимые для атаки, видны в HTML-коде страницы любому посетителю. Аутентификация и какие-либо специальные токены не нужны, поэтому уязвимость может эксплуатироваться полностью удаленно и без участия авторизованных пользователей.
Разработчики устранили проблему в версии 4.2.2. Исправление согласовывает поведение циклов проверки и перемещения файлов, а также добавляет повторную проверку расширения непосредственно перед перемещением. Теперь пустая запись не может привести к пропуску проверки следующего элемента. В то же время обновление не удаляет файлы, которые могли быть загружены злоумышленниками ранее. Владельцам сайтов, на которых использовались уязвимые версии, стоит просмотреть директорию загрузок форм и удалить все файлы, не соответствующие разрешенным типам документов или изображений, особенно с расширением PHP.
Компания Patchstack, обнаружившая уязвимость, уже выпустила правила для своих продуктов, которые блокируют попытки атаки. Проблеме присвоен идентификатор CVE-2026-32475. Эта находка наглядно показывает, как небольшая логическая ошибка в обработке данных превращает ограниченную загрузку файлов в серьезную угрозу выполнения кода на сервере. Особую ценность имеет тот факт, что рассинхронизация между этапами проверки и обработки может быть незаметна при чтении каждого фрагмента кода по отдельности, однако именно в такой стыковке часто рождаются реально опасные уязвимости.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-32475
- https://patchstack.com/articles/critical-unauthenticated-file-upload-to-rce-in-elementor-pro-plugin/