В плагине Forminator Forms, установленном более чем на 600 000 сайтов, обнаружена уязвимость CVE-2026-15748 с оценкой 9,8 из 10,0 по шкале CVSS. Исследователь под псевдонимом daroo сообщил о ней компании Wordfence. Уязвимы все версии вплоть до 1.56.1 включительно; исправление вошло в версию 1.56.2, выпущенную 31 июля 2026 года. Ошибка позволяет посетителю без учётной записи загрузить на сервер произвольный файл, в том числе исполняемый PHP-код, и при подходящей конфигурации захватить сайт.

Атака начинается с отправки специально подготовленной формы. Для неё на сайте должна существовать форма сразу с двумя элементами: полем File Upload для загрузки файла и полем Select для выбора значения. Если такого сочетания нет, описанный путь эксплуатации недоступен. При наличии обоих полей злоумышленник подменяет значение Select, внедряет собственную конфигурацию поля загрузки и передаёт PHP-файл, который плагин ошибочно принимает.
Ошибка находится в функции handle_file_upload(). Проверка опасных расширений устроена как сопоставление точных ключей, поэтому её можно обойти ключами MIME-типов с альтернативами, разделёнными вертикальной чертой. Публичный обработчик отправки формы при этом доверяет конфигурации загрузочного поля, поступающей от пользователя. Wordfence описала причину так: «Это происходит из-за недостаточной проверки типов файлов в handle_file_upload, где чёрный список опасных расширений использует точное сопоставление ключей, обходящееся с помощью ключей MIME-типов с альтернативами через вертикальную черту; одновременно публичный обработчик отправки доверяет управляемой атакующим конфигурации поля загрузки, внедрённой через поддельное значение поля Select».
Результат зависит от того, может ли веб-сервер исполнить загруженный файл. По формулировке Wordfence, «эта уязвимость позволяет неаутентифицированным злоумышленникам загружать на уязвимый сайт произвольные файлы, включая исполняемые PHP-файлы, что может привести к удалённому выполнению кода и полной компрометации сайта». После загрузки достаточно обратиться к файлу по его адресу: сервер запускает PHP-код с доступными ему правами, после чего атакующий способен менять WordPress, создавать учётные записи, читать конфигурацию и закрепляться в системе.
Стандартная конфигурация Forminator частично сдерживает атаку. Загруженные файлы помещаются в каталог с защитным файлом .htaccess, запрещающим исполнение PHP. Проблема обостряется при использовании настройки Custom File Upload Storage, задающей собственный корневой каталог для загрузок. Такой каталог может появиться без нужного .htaccess. Как пояснила Wordfence, файл создаётся «только тогда, когда он впервые требуется, во время запроса с фронтенда, где не загружен вспомогательный компонент WordPress, отвечающий за запись файла.htaccess». В итоге PHP попадает в незащищённое место и исполняется при прямом запросе.
Вторая критическая ошибка затронула User Profile Builder с более чем 40 000 активных установок. Wordfence раскрыла её раньше уязвимости Forminator. Ошибка обхода аутентификации зарегистрирована как CVE-2026-15826 и также получила 9,8 из 10,0 по CVSS. Уязвимы все выпуски до 3.16.5; исправленная версия 3.16.5 вышла 16 июля 2026 года. Эксплуатация возможна, если в плагине включена настройка Automatically Log In.
Сбой скрывается в функции wppb_log_in_user(). Атакующий отправляет регистрацию с именем пользователя длиной от 61 до 70 символов. Ядро WordPress отвергает такое имя, а функция wp_insert_user() возвращает объект WP_Error. Плагин должен сначала проверить результат через is_wp_error(), но вместо этого передаёт его функции absint(). Та приводит объект ошибки к целому числу 1, и лишь после этого код пытается проверить, не произошла ли ошибка.
Wordfence изложила цепочку так: «Причина заключается в том, что функция wppb_log_in_user() вызывает absint() для значения, возвращённого wp_insert_user(), до выполнения проверки is_wp_error(): когда отправляется регистрация с именем пользователя длиной 61–70 символов, ядро WordPress отклоняет его объектом WP_Error, однако absint() приводит этот объект к целому числу 1 прежде, чем проверка ошибки успевает прервать выполнение. В результате плагин привязывает и возвращает поддерживаемый transient-механизмом nonce автоматического входа, связанный с идентификатором пользователя 1».
В WordPress идентификатор user ID 1 обычно принадлежит первой учётной записи администратора. Получив временный nonce автоматического входа, посторонний человек авторизуется именно под этой записью, хотя не знает её пароль. Wordfence резюмировала последствие: «Это позволяет неаутентифицированным злоумышленникам войти в учётную запись администратора сайта с идентификатором пользователя 1, что приводит к полному административному захвату сайта». В отличие от Forminator, здесь не требуется загрузка исполняемого файла: административные права выдаются из-за неверного порядка преобразования и проверки результата.
Для Forminator Forms требуется обновление до 1.56.2 или более новой версии. Владельцам сайтов также нужно проверить все каталоги Custom File Upload Storage и на уровне веб-сервера запретить исполнение PHP в местах загрузки файлов; одного наличия каталога недостаточно, следует убедиться, что защитный .htaccess действительно создан и применяется. User Profile Builder следует обновить до 3.16.5 или новее. Если немедленная установка исправления невозможна, настройку Automatically Log In необходимо отключить. Остальные плагины и сам WordPress также должны оставаться обновлёнными: обе ошибки доступны без предварительной аутентификации и при выполнении своих условий ведут к полному захвату сайта.

Изображение носит иллюстративный характер
Атака начинается с отправки специально подготовленной формы. Для неё на сайте должна существовать форма сразу с двумя элементами: полем File Upload для загрузки файла и полем Select для выбора значения. Если такого сочетания нет, описанный путь эксплуатации недоступен. При наличии обоих полей злоумышленник подменяет значение Select, внедряет собственную конфигурацию поля загрузки и передаёт PHP-файл, который плагин ошибочно принимает.
Ошибка находится в функции handle_file_upload(). Проверка опасных расширений устроена как сопоставление точных ключей, поэтому её можно обойти ключами MIME-типов с альтернативами, разделёнными вертикальной чертой. Публичный обработчик отправки формы при этом доверяет конфигурации загрузочного поля, поступающей от пользователя. Wordfence описала причину так: «Это происходит из-за недостаточной проверки типов файлов в handle_file_upload, где чёрный список опасных расширений использует точное сопоставление ключей, обходящееся с помощью ключей MIME-типов с альтернативами через вертикальную черту; одновременно публичный обработчик отправки доверяет управляемой атакующим конфигурации поля загрузки, внедрённой через поддельное значение поля Select».
Результат зависит от того, может ли веб-сервер исполнить загруженный файл. По формулировке Wordfence, «эта уязвимость позволяет неаутентифицированным злоумышленникам загружать на уязвимый сайт произвольные файлы, включая исполняемые PHP-файлы, что может привести к удалённому выполнению кода и полной компрометации сайта». После загрузки достаточно обратиться к файлу по его адресу: сервер запускает PHP-код с доступными ему правами, после чего атакующий способен менять WordPress, создавать учётные записи, читать конфигурацию и закрепляться в системе.
Стандартная конфигурация Forminator частично сдерживает атаку. Загруженные файлы помещаются в каталог с защитным файлом .htaccess, запрещающим исполнение PHP. Проблема обостряется при использовании настройки Custom File Upload Storage, задающей собственный корневой каталог для загрузок. Такой каталог может появиться без нужного .htaccess. Как пояснила Wordfence, файл создаётся «только тогда, когда он впервые требуется, во время запроса с фронтенда, где не загружен вспомогательный компонент WordPress, отвечающий за запись файла.htaccess». В итоге PHP попадает в незащищённое место и исполняется при прямом запросе.
Вторая критическая ошибка затронула User Profile Builder с более чем 40 000 активных установок. Wordfence раскрыла её раньше уязвимости Forminator. Ошибка обхода аутентификации зарегистрирована как CVE-2026-15826 и также получила 9,8 из 10,0 по CVSS. Уязвимы все выпуски до 3.16.5; исправленная версия 3.16.5 вышла 16 июля 2026 года. Эксплуатация возможна, если в плагине включена настройка Automatically Log In.
Сбой скрывается в функции wppb_log_in_user(). Атакующий отправляет регистрацию с именем пользователя длиной от 61 до 70 символов. Ядро WordPress отвергает такое имя, а функция wp_insert_user() возвращает объект WP_Error. Плагин должен сначала проверить результат через is_wp_error(), но вместо этого передаёт его функции absint(). Та приводит объект ошибки к целому числу 1, и лишь после этого код пытается проверить, не произошла ли ошибка.
Wordfence изложила цепочку так: «Причина заключается в том, что функция wppb_log_in_user() вызывает absint() для значения, возвращённого wp_insert_user(), до выполнения проверки is_wp_error(): когда отправляется регистрация с именем пользователя длиной 61–70 символов, ядро WordPress отклоняет его объектом WP_Error, однако absint() приводит этот объект к целому числу 1 прежде, чем проверка ошибки успевает прервать выполнение. В результате плагин привязывает и возвращает поддерживаемый transient-механизмом nonce автоматического входа, связанный с идентификатором пользователя 1».
В WordPress идентификатор user ID 1 обычно принадлежит первой учётной записи администратора. Получив временный nonce автоматического входа, посторонний человек авторизуется именно под этой записью, хотя не знает её пароль. Wordfence резюмировала последствие: «Это позволяет неаутентифицированным злоумышленникам войти в учётную запись администратора сайта с идентификатором пользователя 1, что приводит к полному административному захвату сайта». В отличие от Forminator, здесь не требуется загрузка исполняемого файла: административные права выдаются из-за неверного порядка преобразования и проверки результата.
Для Forminator Forms требуется обновление до 1.56.2 или более новой версии. Владельцам сайтов также нужно проверить все каталоги Custom File Upload Storage и на уровне веб-сервера запретить исполнение PHP в местах загрузки файлов; одного наличия каталога недостаточно, следует убедиться, что защитный .htaccess действительно создан и применяется. User Profile Builder следует обновить до 3.16.5 или новее. Если немедленная установка исправления невозможна, настройку Automatically Log In необходимо отключить. Остальные плагины и сам WordPress также должны оставаться обновлёнными: обе ошибки доступны без предварительной аутентификации и при выполнении своих условий ведут к полному захвату сайта.