
WordPress CVE-2026-87902 LFI-to-RCE-набор инструментов с вооружённой цепочкой эксплойтов (PEAR RCE, веб-шелл, создание администратора, сбор данных) и неинтрузивной версией SafeChecker и аудитором рисков.

ТОЛЬКО ЭТИЧНОЕ ИСПОЛЬЗОВАНИЕ – АВТОРИЗОВАННОЕ ТЕСТИРОВАНИЕ БЕЗОПАСНОСТИ
Этот репозиторий предоставляет инструменты только для авторизованных специалистов по безопасности, blue teams и пентестеров.
Несанкционированный доступ к компьютерным системам является незаконным в соответствии с CFAA (США), Computer Misuse Act (Великобритания), TCK 243/244 (Турция) и аналогичными законами по всему миру.
CVE‑2026‑87902 — это критическая уязвимость неаутентифицированного обхода пути и локального включения файлов (LFI) в WordPress Core (версии 4.7.0 – 7.1.1), которая позволяет неаутентифицированному злоумышленнику включать произвольные локальные .php-файлы через параметр запроса pagename, а при определённых условиях на сервере — повысить привилегии до удалённого выполнения кода (RCE), используя цепочку с файлом PEAR pearcmd.php. Оценка CVSS: 9.2 (критическая). Обнаружена Robert Ressl через программу HackerOne WordPress в июле 2026 года. Исправлена в 7.1.2 22 сентября 2026 года с бэкпортами вплоть до 4.7.
Уязвимость затрагивает каждый релиз WordPress с 2016 года — десятилетие версий, прошедших проверку кода без обнаружения. Первопричина — единственный пропущенный вызов валидации в одном из наиболее часто используемых путей кода CMS.
Несанитизированное разрешение шаблонов – get_page_template() в wp-includes/template.php формирует кандидатов шаблонов из переменной запроса pagename. Соседний путь кода в той же функции применяет validate_file() для блокировки последовательностей ../, но ветка $pagename не вызывает её. Любой обход пути в pagename проходит без проверки.
Обход двойного кодирования – WordPress применяет sanitize_title_for_query() к pagename, которая заменяет литеральные точки (.) на дефисы для предотвращения обхода пути. Но функция работает с уже декодированным вводом и не выполняет рекурсивное декодирование. Злоумышленник отправляет %252e%252e%252f; веб-сервер декодирует его один раз в %2e%2e%2f; санитайзер не видит литеральных точек и пропускает его; затем get_page_template() вызывает urldecode() снова внутри функции, получая ../.
Предварительное условие директории темы – Активная тема должна содержать директорию верхнего уровня, имя которой начинается с page- (например, page-templates/). Сформированное имя файла page-{pagename}.php затем выходит за пределы корня темы через обход пути. Старые темы по умолчанию (Twenty Twelve, Twenty Fourteen) и популярные сторонние темы (Neve, Hestia, Sydney) содержат эту директорию. Дочерние темы, наследующие от таких родителей, также удовлетворяют этому условию.
LFI-сток в locate_template() – Путь-кандидат передаётся в locate_template(), которая ищет в директориях темы. Поскольку обход пути разрешается в файл вне этих директорий, а функция проверяет только file_exists(), любой читаемый .php-файл включается с полными привилегиями веб-сервера. Это делает LFI безусловной на любом неисправленном сайте, удовлетворяющем условию темы — включая wp-config.php с учётными данными базы данных и солями аутентификации.
Эскалация RCE через PEAR pearcmd.php – PEAR поставляется со многими установками PHP. Его pearcmd.php обычно предназначен только для CLI, но когда register_argc_argv=On, PHP заполняет $_SERVER['argv'] из строки запроса URL. Злоумышленник включает pearcmd.php через LFI, передаёт config-create в качестве аргумента и предоставляет PHP-код вместе с путём вывода (/tmp/shell.php). PEAR записывает код злоумышленника на диск; второе включение выполняет его.
Второй маршрут эксплуатации – Запрос, объединяющий name (слаг главной страницы), page_id (ID страницы записей), preview=true и полезную нагрузку pagename, перенаправляет WP_Query в ветку post_name, которая никогда не перезаписывает pagename через sanitize_title_for_query(). Это позволяет использовать литеральные точки в обходе пути. Требуется тема без single.php.
Требования к конфигурации сервера – RCE зависит от двух условий, распространённых в реальных развёртываниях: наличие/читаемость pearcmd.php (часто на shared-хостинге, cPanel, официальных Docker-образах PHP) и register_argc_argv=On (по умолчанию в PHP ниже 8.5). PHP 8.5 изменил значение по умолчанию на Off. На современном сервере PHP 8.5+ без PEAR эксплуатация останавливается на LFI.
Патч – WordPress 7.1.2 добавляет два уровня защиты: (a) пропущенный вызов validate_file() в ветке pagename и (b) новую функцию _wp_is_template_path_allowed(), вызываемую locate_template() для каждого разрешённого шаблона. Функция отклоняет пути, содержащие .., затем разрешает реальный путь через realpath() и проверяет, что он находится внутри одной из разрешённых директорий темы. Эта эшелонированная защита закрывает сток, а не только один маршрут к нему.
Активная эксплуатация в дикой природе – Первые вредоносные запросы зафиксированы через 5 часов после выпуска патча (17:44 UTC, 22 сентября 2026 года). Трафик вырос в десять раз в течение следующего дня. Наблюдались три этапа: разведка config-show → обнаружение основных файлов → вооружение config-create. Имена файлов полезной нагрузки включали wp-pear-rce-flag.php, poc87902.php, luci_*.php, zeta_*.php, записанные в /tmp и /var/tmp. Атакующие IP: 169.58.48.193, 169.58.48.195, 2001:df1:e8c0::106b.
Воздействие – Выполнение кода с привилегиями веб-сервера. Полный захват сайта, кража учётных данных wp-config.php, эксфильтрация данных, установка веб-шелла, создание административного пользователя, обратный шелл, атаки на цепочку поставок через изменённые плагины/темы и боковое перемещение в подключённые сервисы. Оценка CVSS 9.2 отражает сетевую эксплуатируемость, отсутствие аутентификации, высокое воздействие на конфиденциальность/целостность/доступность. Высокая сложность атаки отражает предварительные условия темы и сервера, но на типичном shared-хостинге эти условия часто выполняются.