
CVE-2026-32475 Поле загрузки файлов в формах Elementor Pro обрабатывает проверку и обработку файлов в двух отдельных циклах с различной обработкой пустых записей загрузки (UPLOAD_ERR_NO_FILE). Неаутентифицированный злоумышленник может отправить multipart
Поле загрузки файлов в формах Elementor Pro обрабатывает проверку и обработку файлов в двух отдельных циклах с различной обработкой пустых записей загрузки (UPLOAD_ERR_NO_FILE). Неаутентифицированный злоумышленник может отправить multipart-запрос с пустой первой частью файла, за которой следует PHP-полезная нагрузка для того же поля, что приводит к преждевременному завершению функции validation(), в то время как process_field() по-прежнему перемещает PHP-файл в публичный каталог: wp-content/uploads/elementor/forms/.php
Автоматически получает post_id, form_id и field_id с целевой страницы:
python poc.py -t http://localhost/wp --page-url "http://localhost/wp/?page_id=16" -c "whoami"
Или:
python poc.py -t http://localhost/wp --page-id 16 -c "whoami"
Запуск интерактивного сеанса:
python poc.py -t http://localhost/wp --page-id 16 -i
Суть уязвимости заключается в обходе самого механизма загрузки файлов. Эта часть не отличается независимо от того, выполняете ли вы тест в локальной лаборатории или против реального сервера: пустая первая часть файла + PHP-полезная нагрузка в поле загрузки обходят проверку расширения, однако файл по-прежнему обрабатывается функцией process_field(). Мы продемонстрировали, что файл успешно записывается, что именно это и описывает.
Что касается жёстко заданного пути Laragon:
Это было сделано только для упрощения локальной проверки.
На реальной цели шаблон каталога известен и фиксирован:
/wp-content/uploads/elementor/forms/
Не фиксировано только итоговое имя файла.
Elementor не сохраняет исходное имя файла. В функции process_field() сохраняемое имя файла генерируется следующим образом:
Поэтому, если вы загрузите shell.php, имя файла может стать примерно таким:
66f3a1c2e9b47.php
внутри:
/wp-content/uploads/elementor/forms/
uniqid() основан на времени и не является сильным случайным значением; он приблизительно основан на временной метке + микросекундах. Поэтому удалённое восстановление файла становится задачей поиска имени файла, а не проблемой загрузки.
Например, вы можете использовать временное окно на основе заголовка Date сервера и времени запроса, выполнить поиск в узком диапазоне вокруг времени загрузки или восстановить точный URL, если форма отправляет электронное письмо, содержащее [all-fields].
Я сохранил PoC сфокусированным на доказательстве самой сути проблемы, а именно на неаутентифицированной загрузке файлов, чётко и напрямую. Полное объяснение удалённого восстановления значения uniqid() сделало бы демонстрацию намного длиннее, чем необходимо для подтверждения самой уязвимости.