Обход авторизации в AJAX-роутере Pods позволяет захватить сайт WordPress

WordPress

В плагине Pods для управления пользовательскими типами записей и полями обнаружили уязвимость, которая позволяет неаутентифицированному злоумышленнику повысить привилегии до администратора и полностью захватить сайт. Плагин установлен более чем на 100 000 сайтов WordPress, поэтому потенциальное количество жертв велико. Проблема затрагивает все версии вплоть до 3.3.9, а связана она с обходом проверок прав в AJAX-роутере административных функций.

Уязвимость CVE-2026-19598

AJAX-роутер - это механизм обработки асинхронных запросов, которые отправляются без перезагрузки страницы. В плагине он доступен публично, то есть любой посетитель сайта может послать к нему HTTP-запрос. Внутри роутера разработчики предусмотрели несколько барьеров: проверку того, что запрошенный метод входит в список разрешённых, проверку входа пользователя, проверку одноразового токена nonce и проверку прав. Каждый барьер должен был останавливать обработку при неудаче.

Однако из-за логической ошибки все эти барьеры оказались неэффективными. Когда плагин определяет запрос как JSON, то есть как запрос в формате обмена данными, и в нём присутствует специальный параметр, используемый для совместимости с редактором контента, функция вывода ошибок лишь записывает сообщение в журнал и возвращает управление. Проще говоря, вместо того чтобы прекратить выполнение, функция сообщает об ошибке, но код продолжает работать дальше. Поскольку обработчик вызывает её без возврата результата, запрос не прерывается, и выполнение доходит до вызова указанного метода.

Злоумышленник может воспользоваться этим обходом, чтобы вызвать метод сохранения пользователя. Этот метод в плагине не имеет собственных проверок прав и обращается непосредственно к функциям WordPress для обновления данных учётной записи. В результате атакующий может указать идентификатор любого пользователя, например владельца сайта, и установить для него новый пароль. После этого остаётся только войти под этой учётной записью и получить полный контроль над сайтом. Более того, если злоумышленник заранее знает имя пользователя администратора, для атаки не требуется даже перебора.

Важно понимать, что сохранение пароля - не единственное действие, которое становится возможным. Через эту же брешь открываются и другие методы административного управления, включая запись PHP-кода в файлы или удаление произвольных файлов. Это означает, что уязвимость позволяет не просто захватить учётную запись, но и выполнить произвольный код на сервере. Полная компрометация сайта в таком случае неизбежна.

Уязвимость получила оценку 9.8 балла по шкале CVSS (система оценки критичности уязвимостей), что считается критическим уровнем. Главная причина столь высокой оценки - отсутствие необходимости в аутентификации. Подобные уязвимости в плагинах WordPress регулярно становятся целью массовых автоматических сканирований, поэтому риск реальной эксплуатации очень высок. Атака не требует от злоумышленника никаких привилегий, а сложность её выполнения минимальна, что повышает её привлекательность для автоматических ботов.

Обнаружил проблему исследователь Nhien Pham (nhienit) в рамках программы bug bounty компании Wordfence. Так называют программы вознаграждения за обнаруженные уязвимости, где исследователи получают деньги за ответственное раскрытие проблемы.

Разработчик плагина отреагировал быстро: уязвимость подтвердили 12 августа, а уже 14 августа вышло исправление. Патч включён в версию 3.3.9.1 и в версии для всех предыдущих поддерживаемых веток: 2.8.23.4, 2.9.19.4, 3.0.10.4, 3.1.4.2 и 3.2.8.3. Команда WordPress.org также начала принудительное обновление всех сайтов с уязвимой версией плагина. Это означает, что большинство сайтов уже должны получить исправление автоматически, однако полагаться только на это не стоит.

Владельцам сайтов необходимо проверить, какая версия Pods установлена, и при необходимости обновить её вручную. Особенно это важно для сайтов, где отключены автоматические обновления или используются сторонние системы управления обновлениями. Даже при наличии защитного правила межсетевого экрана установка патча остаётся главной мерой защиты, потому что правило не защищает от всех возможных вариантов атаки. В первую очередь обновление должно затронуть сайты с высокой ценностью, такие как интернет-магазины или корпоративные порталы.

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

Ссылки

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