невзлом

К сведению · Advanced Custom Fields (ACF)

CVE-2026-110813 — ACF < 6.8.11 unauth stored XSS via field definition, fix 6.8.11

· CVE-2026-110813, CVE-2026-97189, CVE-2026-97190, CVE-2026-97191

← Простая версия для всех

Суть

Stored XSS: до 6.8.11 ACF неверно санитизировал stored field definition, изменяемый через comment handling / custom values у Checkbox, Radio, Select («Save Custom Values»). Unauth мог внедрить значение, которое уходит в имя HTML-атрибута и исполняется как JS у visitor или admin на странице с полем. CVSS 7.5 (CNA WPScan, v3.1).

Тот же релиз 6.8.11 закрывает связанные низкие CVE (Contributor+): CVE-2026-97189 (relational fields — titles/statuses чужих unpublished), CVE-2026-97190 (bidirectional sync пишет ссылку на объект без права edit), CVE-2026-97191 (не перепроверяются location rules field group при save из post editor). CVSS у всех трёх 2.7.

Затронуто и исправлено

КомпонентУязвимо (CNA)Закрытие
ACF free (advanced-custom-fields)< 6.8.11≥ 6.8.11
ACF PRO (advanced-custom-fields-pro)тот же номер ветки < 6.8.11≥ 6.8.11 из кабинета ACF

wordpress.org: 2+ million Active Installations, Current Version 6.8.11. Changelog 6.8.11 (Release Date 2nd November 2026): custom choices больше не портят field settings / wrapper HTML attributes; sanitize settings для пользователей без unfiltered_html; on* в wrapper не выводятся. Disclosure (XSS / custom choices): по WPScan.

Эксплуатация

  • CISA KEV — нет.
  • Подтверждённых атак в ленте / changelog — нет.
  • Публичный разбор PoC у WPScan отложен до 04.12.2026.

Как проверить

wp plugin get advanced-custom-fields --fields=name,status,version
wp plugin get advanced-custom-fields-pro --fields=name,status,version
# закрыто патчем: version ≥ 6.8.11 (сравнивать как semver / глазами, не строкой shell)
# Error на одном из slug = этот вариант не установлен — смотреть второй

wp plugin list --field=name | grep -i acf

UI: Плагины → Advanced Custom Fields / Advanced Custom Fields PRO. Multisite — Network Admin. PRO: версию смотреть в списке плагинов / кабинете лицензии; номер должен быть ≥ 6.8.11.

Как исправить

  1. Staging → обновить free до ≥ 6.8.11 (wp plugin update advanced-custom-fields или UI «Обновления»). PRO — официальный пакет/кабинет ACF (advanced-custom-fields-pro), не сторонние zip. Per-plugin auto-updates в WordPress по умолчанию выключены. После обновления при PHP opcache / page cache / CDN — сбросить opcache и кэш приложения.
  2. Smoke: фронт страниц с ACF-полями; админка field groups (аномальные wrapper-атрибуты); Checkbox/Radio/Select с Save Custom Values (если используются); shortcode [acf] / block bindings при наличии.
  3. Prod: бэкап БД+файлов → update → сброс opcache + page cache/CDN → smoke. При признаках прошлой XSS-компрометации админки — ротация паролей администраторов / сессий отдельно от патча.
  4. Массово / Bedrock / образ / DISALLOW_FILE_MODS / хостинг-Toolkit: UI и wp plugin update могут не сработать. Путь: constraint (например composer update wpackagist-plugin/advanced-custom-fields; PRO — свой пакет/кабинет, не wpackagist) → пересборка / Toolkit → выкат. На каждом стенде сверить wp plugin get advanced-custom-fields и/или …-pro --fields=name,status,version и сбросить opcache/page cache. Автообновление панели не считать закрытием без сверки версии. Не путать с сторонними плагинами «ACF Extended» и т.п. — у них свои CVE.

Если обновить нельзя

Отдельного официального hotfix кроме 6.8.11 нет. Compensating (неполная): отключить Save Custom Values у затронутых типов полей; ограничить неавторизованный ввод, влияющий на field definitions. WAF как замену патчу не обещать. Неофициальные сборки — запрещены стандартом.

Признаки взлома и что делать

IoC вендор/CNA не публиковали. Ориентир: неожиданные правки field groups / wrapper; аномальный JS на страницах с ACF; странные admin-сессии. При признаках: ≥6.8.11; сменить пароли администраторов; проверить плагины/темы/mu-plugins; сессии/ключи приложений; логи за период; одного обновления может быть мало.

Источники