Ветка WordPress 7.1.3 вышла 6 октября 2026 года. Это обслуживающее обновление с семью исправлениями безопасности и четырьмя исправлениями ошибок. Однако большинство проблем требует учётной записи определённого уровня либо действий администратора. Поэтому патч стоит поставить в ближайшее время, но превращать установку в аврал не нужно. Затронуты прежде всего сайты, где роли участника или автора выдают подрядчикам, гостям и внешним авторам материалов.
Детали уязвимостей
Самое заметное исправление касается хранимого межсайтового скриптинга, он же XSS (тип атаки, при которой чужой код исполняется в браузере жертвы). Речь о странице управления комментариями. Злоумышленник оставляет комментарий, ожидающий модерации, и вкладывает в него ссылку. Когда редактор или администратор по ней нажимает, скрипт срабатывает в его браузере. Для атаки нужны два условия: текст должен быть обёрнут элементом с определённым классом, а модератор обязан кликнуть по ссылке. Поддержка такого класса появилась в версии 7.1.0 вместе с разметкой для упоминаний. Значит, проблема затрагивает выпуски с 7.1.0 по 7.1.2. Нашёл её Томас Шошфуэн из Trail of Bits. В 7.1.3 обработчик ссылок читает только селекторы и больше не собирает разметку из строки.
Второй дефект не требует вообще никаких прав. Из комментариев к записям, закрытым от посторонних, утекает их содержимое. Лента комментариев к отдельной записи запрашивала их до проверки, может ли посетитель видеть саму публикацию. Проверка затем обнуляла запись, но не комментарии. Ленты никогда не отдают код 404, поэтому текст уходил наружу. Проблему нашёл Ананда Дхакал из Patchstack. Теперь выборка комментариев идёт после проверки видимости.
Отказ в обслуживании связан с обработкой относительных адресов. Цикл, который сворачивает пары "сегмент плюс две точки", не завершается на адресе вида a//../b: регулярное выражение не находит совпадений, а строка не меняется. Участник проекта запускает этот цикл через предпросмотр ссылки в редакторе блоков, указав адрес на собственной странице. Исправление прерывает цикл, если проход ничего не заменил.
Три уязвимости требуют учётной записи участника или автора, и все три обнаружили специалисты Anthropic. Первая - внедрение SQL-кода, или SQL-инъекция (подстановка команд базы данных через поле ввода), при экспорте содержимого в служебный формат WXR. Экспорт брал идентификаторы изображений прямо из метаданных и подставлял их в строку запроса, не проверяя, что это число. Ошибка существует с версии 6.5.0. Срабатывает она только при выгрузке одного типа содержимого. Стандартный экспорт "всего" до этого участка кода не доходит.
Вторая позволяет автору закреплять записи наверху ленты. Программный интерфейс WordPress (REST API, способ обмена данными между сайтом и внешними приложениями) отказывал в закреплении, только когда у пользователя не было сразу двух прав: на редактирование чужих записей и на публикацию. У авторов второе право есть, поэтому запрос проходил. Разработчики поменяли логическую связку с "и" на "или".
Третья связана с встраиванием изображений с Imgur. Разметку от недоверенных поставщиков встраивания WordPress пропускает через фильтр, сводящий её к изолированному фрейму. Imgur входил в список доверенных, а для них фильтр не работает. Ответ чужого сервиса содержит текст, который задал загрузивший изображение или альбом, поэтому произвольное содержимое попадало на страницу без очистки. Теперь Imgur исключён из доверенных, и его ссылки больше не встраиваются напрямую. Обновление при этом не удаляет уже сохранённые копии встроенного содержимого. Если вредоносный блок отрисовался на сайте раньше, он продолжит отображаться, пока не будет очищен кеш.
Ещё одно исправление затрагивает не столько сам WordPress, сколько плагины. Ядро собирает имена действий из данных записи: смена статуса на "опубликовано" вызывает действие публикации. По той же схеме называют посторонние события, включая удаление записи и добавление комментария. До 7.1.3 ядро не проверяло, зарегистрированы ли статус и тип записи, из которых складывается имя. Запись со статусом удаления и типом записи запускала действие удаления, и все подписанные на него обработчики срабатывали как при настоящем удалении. Теперь такие обработчики вызываются только для зарегистрированных значений. Правка важна для плагинов, которые передают в ядро необработанные статус или тип записи.
Контекст добавляет соседнее обновление. Двумя неделями раньше 7.1.2 закрыл единственную уязвимость CVE-2026-87902: неаутентифицированный посетитель мог вызвать локальное включение файлов, а при определённых настройках PHP это вело к удалённому выполнению кода. Тот случай был тяжелее нынешних. Зато выпуск 7.1.3 перенесли в старые ветки вплоть до 6.6, а ветки с 4.7 по 6.5 на момент публикации остаются без патчей.
Обновление доступно в панели управления, в разделе обновлений, и на сайте WordPress.org. Сайты с автоматическими фоновыми обновлениями получат его сами. Пока открыта панель управления, полезно проверить, у кого на площадках есть роль участника или выше. Большая часть этих исправлений ограничивает именно то, что доступно таким ролям, и это уже сложившаяся практика для WordPress: основной риск создают не анонимные посетители, а те, кому выдали право писать.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-87902
- https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
- https://patchstack.com/articles/wordpress-7-1-3-security-release/