Критична уязвимост в Elementor Pro позволява качване на произволни файлове
Критична уязвимост в Elementor Pro засяга всички версии до и включително 4.2.1. Тя позволява на неавтентикиран нападател да качи произволен файл, включително изпълним PHP скрипт, и така да постигне отдалечено изпълнение на код на сървъра.
Проблемът има оценка 9,8 от 10 по CVSS и идентификатор CVE-2026-32475. Elementor Pro има приблизително 6 милиона активни инсталации, затова провери версията на разширението веднага.
Незабавно действие
Обнови Elementor Pro до версия 4.2.2 или по-нова. Версия 4.2.2 отстранява уязвимостта; всички версии до 4.2.1 са засегнати.
Кои сайтове са изложени на риск
Експлоатацията не изисква профил в WordPress. Нападателят може да използва уязвимостта, ако сайтът има публикувана страница с джаджа Form от Elementor Pro и поне едно поле File Upload, което не е отбелязано като задължително.
Самото наличие на Elementor Pro не е достатъчно за атаката. Нужна е конкретната конфигурация: посетителите трябва да достигат до публикувана форма с незадължително поле за качване на файл.
Как възниква проблемът
Elementor Pro обработва изпращането на формата чрез ajax_send_form() от класа Ajax_Handler, до който имат достъп и неавтентикирани посетители. Подадените данни и качените файлове влизат във Form_Record, след което полето за качване преминава през validation() и process_field() в класа ElementorProModulesFormsFieldsUpload.
В validation() разширението първо поправя индексите на файловете и взема данните от $_FILES['form_fields']. Ако броят на файловете надхвърля зададената стойност max_files, то връща грешка и прекратява обработката.
След това цикълът проверява всеки файл: дали липсва задължителен файл, дали PHP е върнал грешка при качването, дали разширението е позволено и дали размерът влиза в лимита. Грешката е в клона за празен слот при незадължително поле:
foreach ( $files[ $id ] as $index => $file ) {
// Незадължително поле без избран файл.
if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
return;
}
if ( ! $this->is_file_type_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, 'This file type is not allowed.' );
}
if ( ! $this->is_file_size_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, 'This file exceeds the maximum allowed size.' );
}
}При UPLOAD_ERR_NO_FILE кодът трябва да използва continue, за да прескочи само празния елемент и да провери следващия. Вместо това return прекратява цялата validation() функция. Така разширението не изпълнява проверките за тип и размер за всички оставащи файлове в същото поле.
Как протича атаката
Нападателят подава полето за качване като масив с две части. Първата остава празна и задава UPLOAD_ERR_NO_FILE, което задейства ранното прекратяване; във втората се поставя PHP payload с избрано от нападателя разширение на файла.
process_field() се държи различно: там празният първи елемент се прескача с continue. Затова функцията продължава към втория, непроверен файл, взема разширението директно от подаденото име и го записва на диска.
foreach ( $files[ $id ] as $index => $file ) {
if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
continue;
}
$uploads_dir = $this->get_ensure_upload_dir();
$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
$filename = uniqid() . '.' . $file_extension;
$filename = wp_unique_filename( $uploads_dir, $filename );
$new_file = trailingslashit( $uploads_dir ) . $filename;
Plugin::instance()->php_api->move_uploaded_file(
$file['tmp_name'],
$new_file
);
}Функцията задава права 0644 на успешно преместения файл и добавя неговия път и URL към записа на формата. Ако директорията липсва или не позволява запис, тя добавя администраторска грешка; при неуспешно преместване добавя грешка към полето.
Тъй като Elementor Pro запазва разширението от името, подадено от клиента, файл с разширение .php попада в /wp-content/uploads/elementor/forms/. Нападателят може да заяви този файл през браузър и да изпълни PHP payload-а на сървъра. Подобен неограничен upload често води до пълно компрометиране на сайта чрез webshell и други техники.
Версии, срокове и CVE
- Засегнат софтуер: Elementor Website Builder Pro (
elementor-pro). - Засегнати версии: всички до и включително 4.2.1.
- Поправена версия: 4.2.2.
- Тежест: CVSS 9,8 – критична.
- CVE: CVE-2026-32475.
Сигналът за уязвимостта е получен на 24 юли 2026 г. На 27 юли докладът и proof-of-concept експлойтът са потвърдени, а разработчиците на Elementor са уведомени.
На 2 август разработчикът съобщава, че и друг изследовател е докладвал същия проблем и че работи по поправка. Първоначално определеният CVE е отхвърлен и се използва CVE идентификаторът от другия доклад. Elementor Pro 4.2.2 с пълната поправка излиза на 19 август 2026 г.
Какво да направиш сега
Провери всички сайтове, на които поддържаш Elementor Pro, и обнови разширението до 4.2.2 или по-нова версия. Приоритетно прегледай сайтовете с публикувани Form джаджи, които приемат незадължителни файлове, защото това е необходимото условие за експлоатация.
След обновяването потвърди, че активната версия вече не е 4.2.1 или по-стара. Не отлагай тази актуализация: уязвимостта позволява изпълнение на код без вход в сайта.
Препратки / Източници
Мария Иванова
Главен редактор на българския екип, разработчик на AI и машинно обучение. PyTorch и обработката на естествен език са моите основни области. Бъдещето вече е тук.
Всички публикации