Обновление ядра WordPress идёт в два шага: сначала архив распаковывается, потом файлы копируются на место. Между этими шагами остаётся окно, в котором злоумышленник без учётной записи может подменить файл конфигурации сайта. Однако первые попытки эксплуатации заметили через несколько дней после раскрытия. Третьего ноября 2026 года CISA внесла уязвимость в каталог известных эксплуатируемых уязвимостей. Ведомство подтвердило атаки в реальных условиях.
Гонка в установщике обновления WordPress CVE-2026-119977
Проблема затрагивает механизм обновления, который годами считался служебным. По оценке CVSS 3.1, уровень составляет 8.1. Атака идёт по сети, учётные данные не нужны, участие пользователя не требуется. При этом сложность высокая. Злоумышленнику нужно успеть в короткое окно между распаковкой и копированием.
При обновлении ядра архив распаковывается в каталог внутри общедоступного содержимого сайта. Внутри оказывается полная временная копия WordPress. Её установщик проверяет только два места и не видит конфигурацию живого сайта. В результате он считает установку незавершённой и запускает мастер настройки.
Мастер настройки не требует входа. Поэтому злоумышленник отправляет ему параметры своей базы данных. Если база доступна, установщик пишет файл конфигурации внутри временной копии. Затем WordPress копирует распакованные файлы поверх рабочей копии.
При этом список исключений защищает каталог содержимого и файл версии. Файл конфигурации в него не входит. В результате подготовленный злоумышленником файл занимает место живого. Сайт подключается к чужой базе, видит пустые таблицы и показывает мастер установки. Через него злоумышленник создаёт учётную запись администратора и ставит плагин.
Уязвимость касается сайтов, которые обновляют ядро штатными средствами. В записи CVE уязвимыми указаны ветки с 4.7.0 по 7.1.3. Сам механизм работает так с версии 2.7.0, выпущенной в 2008 году. Однако одной версии мало. Пакет обновления должен содержать файлы установщика.
Кого затрагивает уязвимость
Подходят полные пакеты, пакеты без каталога содержимого и пакеты с новыми темами. Кроме того, частичные пакеты и пакеты отката зависят от состава архива. Второе условие - предсказуемый путь распаковки. В старых ветках он складывался из имени загруженного файла.
С версии 4.4 имя файла получало случайный суффикс из шести символов. Позже WordPress начал учитывать заголовок ответа сервера с именем пакета. Из-за этого путь снова стал выводимым. В версиях с 5.9.0 по 7.1.3 каталог можно угадать заранее.
Что исправляет WordPress 7.1.4
Исправление вышло 28 октября 2026 года в WordPress 7.1.4. В записи CVE номер исправленной версии не указан. Вендор добавил к имени каталога распаковки случайный суффикс из 16 символов. Кроме того, файл конфигурации попал в список исключений при копировании. Ещё одна правка сохраняет служебный файл, который закрывает листинг каталога.
Первое обновление всё равно идёт под старым кодом: распаковку выполняет установщик, который уже стоит на сайте. Поэтому случайное имя каталога появится только при следующем обновлении. Зато подмена файла конфигурации блокируется сразу. При этом временный установщик остаётся доступен. Злоумышленник может выполнить свой код с правами веб-сервера.
Как пройти первое обновление
Самый простой шаг - закрыть веб-доступ к каталогу промежуточной распаковки. С ним WordPress работает через файловую систему, поэтому HTTP-запросы туда не нужны. Правило задаётся в конфигурации Nginx или Apache. После этого проверьте, что запрос к каталогу возвращает ошибку 403.
Второй путь - ручное обновление вне веб-корня. Его распаковывают в отдельном каталоге и переносят только файлы ядра. Файл конфигурации и каталог содержимого при этом не трогают. Обновление через WP-CLI не подходит: оно использует тот же механизм распаковки.
Исправление перенесли во все поддерживаемые ветки вплоть до 4.7. Ветки с 2.7 по 4.6 обновления не получили. Их стоит перевести на поддерживаемую версию. Если обновить сайт нельзя, проверьте правила блокировки и сигнатуры защиты. Они должны срабатывать на запросы к временному установщику.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-119977
- https://www.wordfence.com/threat-intel/vulnerabilities/id/4b4da0cf-d9f4-47c4-a0e8-6c4dc5a6f250
- https://wordpress.org/news/2026/10/wordpress-7-1-4/
- https://www.picussecurity.com/resource/blog/cve-2026-119977-when-updating-wordpress-becomes-the-vulnerability