Исследователь с помощью GPT-5.6 Sol Ultra обнаружил критическую цепочку уязвимостей в WordPress, позволяющую выполнить код

WordPress

Независимый исследователь Адам Кьюс (Adam Kues) выявил новый класс уязвимостей в системе управления контентом WordPress, который позволяет неавторизованному злоумышленнику выполнить удалённый код на типовой установке с MySQL. Для обнаружения цепочки, получившей название wp2shell, исследователь использовал языковую модель GPT-5.6 Sol Ultra в режиме многоагентного аудита. Проблема затрагивает все установки WordPress, начиная с версии 5.6, и может быть использована в атаке без предварительной аутентификации.

Детали уязвимости

Уязвимость связана с механизмом Batch API - конечной точкой "/wp-json/batch/v1", которая позволяет отправлять несколько виртуальных REST-запросов за один HTTP-запрос. В функции "class-wp-rest-server.php" при обработке пакетных запросов используется два массива: один для результатов сопоставления маршрутов ("$matches"), второй для результатов проверки параметров ("$validation"). При нормальной работе каждый индекс в этих массивах соответствует одному и тому же подзапросу. Однако из-за ошибки в коде при обнаружении некорректного запроса массив проверки обновляется, но соответствующий элемент массива сопоставления пропускается из-за оператора "continue". Это приводит к рассогласованию индексов: последующие запросы могут быть проверены по правилам одной конечной точки, но выполнены обработчиком другой.

Благодаря десинхронизации злоумышленник может обойти механизм проверки параметров для всех конечных точек, поддерживающих пакетный режим. В качестве точки внедрения используется маршрут "GET /wp/v2/posts", который предоставляет параметр "author_exclude" для исключения определённых авторов. В обычных условиях REST API проверяет, что "author_exclude" является массивом целых чисел. Однако при обходе этой проверки параметр может быть передан как скалярная строка, которая напрямую интерполируется в SQL-запрос без экранирования. Это создаёт возможность для SQL-инъекции в "NOT IN"-клаузу.

Дополнительным препятствием является то, что Batch API не поддерживает GET-запросы напрямую. Исследователь обходит это ограничение, рекурсивно вызывая тот же пакетный эндпоинт: внешний вызов использует десинхронизацию для пропуска проверки метода, а внутренний - для пропуска проверки "author_exclude". В результате формируется пред-аутентификационная SQL-инъекция с использованием UNION-запроса, что позволяет подделывать объекты "WP_Post" в кэше текущего запроса.

Полученная SQL-инъекция является только для чтения, однако последующая цепочка делает её более опасной. Подделанные объекты "WP_Post" могут взаимодействовать с механизмом oEmbed-кэширования WordPress. Злоумышленник создаёт записи типа "oembed_cache" в базе данных, а затем, используя рассогласование между кэшем в памяти и базой данных, преобразует их в записи типа "customize_changeset". Этот тип записей позволяет временно применить изменения настроек сайта с правами администратора.

Кульминация цепочки - использование динамических хуков WordPress. Когда система обрабатывает изменения для подделанной записи "customize_changeset", она вызывает хук, сформированный из полей "post_status" и "post_type". Злоумышленник может принудительно вызвать хук "parse_request", который повторно запускает обработку исходного Batch API-запроса, но уже с временными правами администратора. В повторном цикле злоумышленник может создать новую учётную запись администратора, войти в панель управления и установить вредоносный плагин в виде ZIP-архива, что и приводит к выполнению произвольного кода.

"Я могу с полной уверенностью сказать, что ни один исследователь безопасности не смог бы найти и завершить эту цепочку эксплойтов за 10 часов без ИИ, - заявил Адам Кьюс. - Даже если бы я отдал им исходный баг и попросил сделать RCE, я не уверен, что это было бы возможно в такие сроки".

На данный момент компания WordPress выпустила обновление для своей системы управления контентом. Администраторам настоятельно рекомендуется установить его в кратчайшие сроки. В качестве временной меры защиты можно ограничить публичный доступ к REST-эндпоинтам, а также проверить журналы сервера на наличие подозрительных запросов к "/wp-json/batch/v1". Особое внимание следует уделить внезапно появившимся учётным записям администраторов и фактам установки плагинов без ведома владельца сайта.

Этот случай - один из первых, когда большая языковая модель, работающая по специально составленному промпту, смогла самостоятельно обнаружить и соединить несколько сложных уязвимостей в одном из наиболее защищённых программных продуктов. Можно ожидать, что в ближайшее время количество подобных находок, сделанных при участии ИИ, будет только расти.

Ссылки

Комментарии: 0