Новости · Безопасность файлов

WordPress закрыл критическую уязвимость: сайт сам подключал чужой PHP-файл

22 сентября 2026 года вышел WordPress 7.1.2 — экстренный патч для CVE-2026-87902 (CVSS 9.2). Функция get_page_template() позволяла подключить произвольный читаемый PHP-файл с диска сервера в обход каталога темы — без авторизации и без действий пользователя. Уже в день релиза патча начались первые попытки эксплуатации, а 25 сентября CISA внесла уязвимость в федеральный каталог активно эксплуатируемых угроз (KEV).

27 сентября 2026 Редакция Loadfile Чтение 6 мин
Взломанный файл вырывается из цифровой папки на фоне серверной — уязвимость подключения файлов CVE-2026-87902 в WordPress

Коротко: CVE-2026-87902 (CVSS 9.2) — уязвимость в ядре WordPress, из-за которой функция get_page_template() могла подключить произвольный читаемый PHP-файл вне каталогов активной темы, не спрашивая ни логина, ни действий посетителя. При совпадении условий на сервере это превращалось в выполнение произвольного кода. Патч — версии 7.1.2, 7.0.6, 6.9.9 и 6.8.10, вышли 22 сентября 2026 года. 25 сентября CISA включила баг в каталог KEV: эксплуатация началась в тот же день, когда вышел патч.

Содержание
  1. Что произошло
  2. Механизм: как get_page_template() подключает чужой файл
  3. От подключения файла до выполнения кода: gadget pearcmd.php
  4. Кого касается и что уже происходит
  5. Что делать прямо сейчас
  6. Источники

Что произошло

22 сентября 2026 года команда WordPress выпустила версию 7.1.2 — внеплановое обновление безопасности с единственным, но критически опасным исправлением. CVE-2026-87902 получила оценку CVSS 9.2 из 10 — это близко к максимуму шкалы.

Патч бэкпортирован во все поддерживаемые ветки — вплоть до версии 4.7.0, выпущенной ещё в 2016 году: в зоне риска оказались практически все живые инсталляции WordPress, включая сайты, которые годами не обновлялись до последней major-версии. Параллельно вышли исправленные сборки 7.0.6, 6.9.9 и 6.8.10.

Главная тревожная деталь — скорость эксплуатации. По данным нескольких независимых команд мониторинга, первые попытки атак зафиксированы в тот же день, когда был опубликован патч: злоумышленники сравнивают старую и новую версию кода (diff), находят исправленную строку и за считаные часы превращают её в рабочий эксплойт. 25 сентября 2026 года американское агентство CISA включило CVE-2026-87902 в каталог Known Exploited Vulnerabilities (KEV) — официальное подтверждение того, что уязвимость активно используется в реальных атаках, а не только в теории.

Механизм: как get_page_template() подключает чужой файл

Проблема — в функции ядра get_page_template(), которая отвечает за выбор PHP-шаблона для отображения страницы. WordPress ищет файлы шаблонов внутри активной темы, но при определённой комбинации входных данных функция может быть перенаправлена на файл вне каталогов темы — на любой другой читаемый веб-сервером PHP-файл на диске.

Для срабатывания нужны два условия одновременно:

  • Условие темы. Активная тема должна содержать папку верхнего уровня, имя которой начинается с page- (например, каталог шаблонов страниц) — довольно частая практика в готовых темах и фреймворках тем.
  • Условие сервера. На диске должен существовать читаемый веб-сервером PHP-файл с предсказуемым путём — в реальных атаках чаще всего используется системный pearcmd.php, о нём — ниже.
!
Уязвимость не требует авторизации

В отличие от многих прошлых уязвимостей WordPress, эксплуатирующихся через загрузку файла автором или редактором сайта, CVE-2026-87902 не требует ни учётной записи, ни действий посетителя. Это классическая local file inclusion (LFI) — подключение локального файла по неконтролируемому пути, один из самых опасных классов веб-уязвимостей.

От подключения файла до выполнения кода: gadget pearcmd.php

Сама по себе LFI ещё не значит «выполнение произвольного кода» — многое зависит от того, какой именно файл удаётся подключить. В большинстве описанных атак используется pearcmd.php — служебный скрипт менеджера пакетов PEAR, который годами присутствует на многих PHP-хостингах по предсказуемому пути (обычно /usr/local/lib/php/pearcmd.php) и сам по себе уязвимостью не считается.

Цепочка атаки выглядит так:

  1. Атакующий формирует запрос, который заставляет get_page_template() подключить pearcmd.php вместо шаблона темы.
  2. Если на сервере включена директива PHP register_argc_argv, параметры GET-запроса преобразуются в аргументы командной строки — так, как если бы скрипт запустили из терминала.
  3. Через эти «аргументы» PEAR-командой можно записать произвольное содержимое в выбранный путь — например, во временную директорию /tmp.
  4. Записанный файл — это уже веб-shell: обратившись к нему напрямую, злоумышленник получает выполнение произвольных команд с правами веб-сервера.

Это редкий случай, когда безобидный по отдельности служебный файл превращается в инструмент атаки из-за сочетания с другой уязвимостью — паттерн, который в индустрии называют «gadget chain». Похожая логика встречается и в других экосистемах: например, в директиве include формата Org-mode в Gitea тоже эксплуатируется не сам факт подключения файла, а то, какой конкретно файл оказывается доступен для чтения.

Кого касается и что уже происходит

Формально в зоне риска — все версии WordPress с 4.7.0 по 7.1.1 включительно, то есть практически любая живая инсталляция, которую не обновили в последние дни. Практическая эксплуатация возможна только при совпадении условий темы и наличии подходящего PHP-файла на сервере, но это сочетание оказалось достаточно распространённым: pearcmd.php входит в стандартный набор пакетов на многих shared- и VPS-хостингах, а темы с папками page-* — обычная практика, а не редкость.

Уязвимость сравнивают с CVE-2026-65640 — августовской дырой в связке WordPress → Imagick → Ghostscript, о которой мы писали ранее. Разница принципиальна: там для атаки требовались права автора и загрузка файла, здесь — не требуется ничего, кроме доступности сайта в сети. Именно поэтому CISA присвоила текущей уязвимости приоритет федерального KEV-каталога — для государственных систем США это означает обязательный срок устранения.

Что делать прямо сейчас

Единственное надёжное решение — обновить WordPress до версии 7.1.2 или до соответствующего бэкпорта своей ветки (7.0.6, 6.9.9, 6.8.10 и далее по списку поддерживаемых версий).

  • Панель администратора: «Консоль → Обновления» → «Обновить сейчас».
  • WP-CLI: wp core update
  • Managed hosting: уточните у провайдера — многие уже применили патч в фоне.
✓
Автообновления безопасности срабатывают сами

Если на сайте включены фоновые обновления безопасности (по умолчанию включены в большинстве установок WordPress), патч, скорее всего, уже применился без вашего участия — версию стоит перепроверить в «Консоль → Обновления».

Дополнительные меры для администраторов серверов, если обновление откладывается: удалить или ограничить доступ к pearcmd.php через правила веб-сервера и отключить директиву register_argc_argv в конфигурации PHP — это не устраняет саму LFI, но разрывает цепочку до RCE через этот конкретный gadget. Похожие рекомендации «ограничить доступ к вспомогательным служебным скриптам» применимы и при защите от атак через неконтролируемые пути в архивах и синхронизации — принцип везде один: не доверять пути к файлу, пришедшему из внешнего запроса.

Проверить журналы сервера стоит на предмет обращений к wp-admin с необычными параметрами шаблона и к нестандартным путям вроде pearcmd.php — это типичные следы попыток эксплуатации CVE-2026-87902.

Источники

Читайте также