Если вы получили от меня письмо со ссылкой на эту страницу, это произошло потому, что ваш сайт, судя по всему, использует версию Ultimate Member (плагина членства и профилей пользователей для WordPress от Ultimate Member, который находится в ваших файлах в /wp-content/plugins/ultimate-member/), попадающую в диапазон, затронутый известной проблемой безопасности. Эта страница объясняет, в чем состоит проблема, как понять, касается ли она вашего сайта, как узнать свою версию, не дав себя запутать, и до какой версии обновиться.

Проблема представляет собой CVE-2026-19423: неаутентифицированную уязвимость повышения привилегий в формах регистрации и профиля плагина. Она затрагивает версии Ultimate Member с 2.6.7 по 2.12.1 и исправлена в 2.13.0, выпущенной 24 августа 2026 года. Если вы используете версию из этого диапазона, обновите Ultimate Member до 2.13.0 или новее. Для этой проблемы не опубликована оценка CVSS (идентификатор присвоен WPScan без вектора серьезности), поэтому я не буду называть вам никакую цифру, и мне не известен публичный код эксплойта для нее.

Версии старше 2.6.7 этой проблемой не затронуты, и здесь я хочу быть точным, а не позволять уведомлению звучать шире, чем оно есть. Это не изъян, существующий с самого начала плагина: путь в коде, на котором он основан, появился в 2.6.7. Поэтому установка старше 2.6.7 здесь не является целью, и сайтам с такой версией я не писал. Если ваша версия окажется ниже 2.6.7, вы можете не принимать это уведомление во внимание применительно к данной проблеме (хотя поддерживать настолько отставший плагин в актуальном состоянии стоит по другим причинам).

Прежде всего оговорка, которая определяет, насколько это важно для вашего сайта, потому что я предпочитаю сказать ее прямо, а не позволить уведомлению звучать масштабнее, чем оно есть: эта проблема достигает только того сайта, где одна из ваших форм регистрации или профиля Ultimate Member предлагает заполняющему ее человеку выбор роли и где регистрация открыта для всех. Стандартная настройка Ultimate Member не размещает селектор роли на форме регистрации (администратор должен добавить его намеренно), поэтому многие сайты с затронутой версией вовсе не подвержены проблеме. Я могу узнать версию вашего плагина из общедоступного файла, но не вижу, как устроены ваши формы и открыта ли регистрация, поэтому это уведомление является предупредительным, а не подтвержденным выводом о вашем сайте.

Несколько слов о срочности, потому что это условное уведомление. Если ни одна из ваших форм Ultimate Member не позволяет посетителю выбрать роль, обновление относится к обычному обслуживанию плагинов. Если какая-то позволяет, а регистрация открыта, отнеситесь к обновлению как к приоритету: в такой конфигурации посетитель, регистрирующий себе учетную запись, мог бы присвоить ей повышенные привилегии, вплоть до уровня, эквивалентного администратору, без какого-либо предварительного доступа к вашему сайту. Там, где это применимо, последствия серьезны, поэтому я и пишу, вместо того чтобы отложить это как малозначимое; но применимо это только при перечисленных условиях, а обновление устраняет проблему независимо от них.

Это изъян плагина, а не ядра WordPress. Полностью обновленный WordPress не защищает вас, если сам плагин Ultimate Member находится на затронутой версии.

Это письмо настоящее?

Да. Это добросовестное уведомление в рамках ответственного разглашения от независимого исследователя безопасности. Я не прошу у вас денег, паролей или доступа к сайту и не пытался взломать его, зарегистрироваться на нем или что-либо эксплуатировать.

Все, что я сделал, это посмотрел страницы и файлы, которые ваш сайт отдает каждому посетителю (так же публично, как ваша главная страница), и записал номер версии, который публикует плагин. Я намеренно не создавал учетную запись, не отправлял формы регистрации или профиля, не входил в систему и ничего не отправлял затронутой функциональности. Ничто в этой проверке не касается ваших данных, панели администратора или какой-либо приватной части сайта (подробнее в разделе Что я делал и чего не делал ниже).

Если вы хотите проверить, кто я, посмотрите контактные данные внизу этой страницы и страницу Обо мне.

Почему это важно

Ultimate Member формирует страницы регистрации, входа и профилей участников на очень многих сайтах WordPress. Когда кто-то регистрируется, плагин решает, какую роль должна получить новая учетная запись. На форме с селектором роли он должен принимать только те роли, которые эта форма была настроена разрешать.

В затронутых версиях, когда список разрешенных ролей такой формы оказывается пустым, плагин больше не отбрасывает роль, отправленную посетителем. Вместо этого он сохраняет это значение и проверяет его только по ролям, которые вообще существуют на вашем сайте, а не по ролям, которые должна была предлагать форма. Следствие таково: посетитель, регистрирующий себе учетную запись, мог направить ее к роли, которую никогда не должен был получить, вплоть до уровня, эквивалентного администратору.

Предварительное условие, повторенное потому, что именно его проще всего неправильно понять в обе стороны: нужны селектор роли на публичной форме и открытая регистрация. Ни то ни другое не является настройкой по умолчанию. Штатная форма регистрации Ultimate Member не содержит поля роли, поэтому на типичной установке здесь нечего достигать. Там, где администратор добавил поле роли и оставил регистрацию открытой, барьер ровно таков, каков ответ на вопрос, кто может отправить эту форму, а при открытой регистрации это кто угодно.

Я описываю это на уровне, который нужен владельцу сайта, чтобы действовать, и не дальше. Я не публикую детали, которые позволили бы кому-то воспроизвести проблему, и прошу вас не пробовать это ни на своем сайте, ни на чужом. Чтение номера версии и проверка собственных форм, как описано ниже, дает все, что нужно для решения, что делать.

Если в моем письме упоминалась эта проблема, это значит, что версия, которую сообщает ваш сайт, находится в диапазоне от 2.6.7 до 2.12.1. Я не проверял, эксплуатируем ли именно ваш сайт, и не вижу, как устроены ваши формы. Все, что я наблюдал, это версия.

Затронут ли я?

Это решают два вопроса, в таком порядке.

Первый: предлагает ли какая-либо из ваших форм выбор роли при открытой регистрации?

Это решающий вопрос, и ответить на него можете только вы, потому что он зависит от того, как устроены ваши формы, а снаружи этого не видно. Проверка совершенно безопасна и является главной целью этой страницы.

  1. В консоли WordPress перейдите в Ultimate Member, затем Формы (Forms) и по очереди откройте каждую форму регистрации и профиля.
  2. Просмотрите поля каждой формы в поисках поля выбора роли (выпадающего списка или набора вариантов, позволяющего регистрирующемуся человеку выбрать роль; иногда оно подписано «Роль»). На большинстве сайтов его нет, потому что стандартная форма регистрации его не включает.
  3. Проверьте, открыта ли регистрация: Настройки, затем Общие, затем Членство, флажок «Любой может зарегистрироваться» (ядро WordPress), а также доступна ли посетителям ваша форма регистрации Ultimate Member.
  4. Если выбор роли не предлагает ни одна форма, эта проблема не достигает вашего сайта даже на затронутой версии, хотя обновиться все равно стоит в порядке обычного обслуживания.
  5. Если выбор роли предлагает любая форма и регистрация открыта, отнеситесь к обновлению как к приоритету (см. Как обновиться). Если обновиться немедленно нельзя, промежуточный шаг состоит в том, чтобы убрать поле роли из всех общедоступных форм регистрации и профиля или закрыть публичную регистрацию, пока вы не обновитесь. Настоящим исправлением является обновление.

Пожалуйста, не пытайтесь воспроизвести проблему ни на своем сайте, ни на чужом; для ответа на вопрос выше это не нужно.

Второй: какая у вас версия?

Вам не обязательно верить мне на слово. Есть два публичных способа узнать версию и один внутри консоли, и они должны совпадать.

Из панели администратора WordPress (авторитетный способ):

  1. Войдите в консоль WordPress (обычно по адресу yourdomain.com/wp-admin).
  2. Перейдите в Плагины, затем Установленные плагины.
  3. Найдите Ultimate Member, запись, папка которой называется ultimate-member, и запишите версию, указанную под названием.

Из публичного манифеста (вход не нужен): откройте

yourdomain.com/wp-content/plugins/ultimate-member/readme.txt

в браузере и прочитайте строку Stable tag: ближе к началу. Это и есть публичный источник, который читал я. Если по этому адресу возвращается «не найдено», попробуйте README.txt заглавными буквами: некоторые хостинги чувствительны к регистру, а отдельные пакеты поставляют файл с именем из заглавных букв.

Из исходного кода страницы (вход не нужен): просмотрите исходный код главной страницы и найдите собственные таблицы стилей плагина ровно по этим путям:

/wp-content/plugins/ultimate-member/assets/css/um-styles.min.css?ver=...
/wp-content/plugins/ultimate-member/assets/css/um-profile.min.css?ver=...

Число ?ver=, прикрепленное к этим файлам, является собственной версией плагина. Ultimate Member по умолчанию загружает эти таблицы стилей на каждой публичной странице, независимо от того, показывает ли страница раздел участников, поэтому главной страницы обычно достаточно.

Ловушка, которой здесь стоит избежать, и попасть в нее легко. Ultimate Member поставляет встроенные копии нескольких сторонних библиотек внутри собственной папки плагина, и каждая из них несет свой собственный, совершенно не связанный номер версии. В исходном коде страницы могут встретиться библиотека обрезки изображений с ?ver=1.6.1, Font Awesome с ?ver=6.5.2 или Select2 с ?ver=3.6.2, и все по путям, начинающимся с папки плагина Ultimate Member. Оператор, который ищет в исходном коде папку плагина и читает первое попавшееся значение ?ver=, легко может унести одно из этих чисел, не имеющее никакого отношения к версии плагина. Читайте версию только с собственных таблиц стилей плагина с префиксом um- (um-styles, um-profile, um-account и тому подобных) и игнорируйте любые другие ?ver= на странице. Если из исходного кода вообще не удается получить читаемое число, это обычное дело и ни о чем не говорит: плагины кеширования и оптимизации регулярно убирают значение ?ver=; используйте тогда readme.txt или экран администратора.

Затем примените это правило, учитывая, что версии сравниваются численно, а не по алфавиту, поэтому 2.12.1 новее, чем 2.6.7, хотя «12» как текст выглядит меньше, чем «6»:

  • с 2.6.7 по 2.12.1: затронута, с оговоркой о формах выше. Обновитесь до 2.13.0 или новее.
  • 2.13.0 или новее: применительно к этой проблеме уже исправлена. Лучший шаг состоит в том, чтобы взять самую свежую доступную версию.
  • Все, что старше 2.6.7: этой проблемой не затронуто. Обновиться все равно стоит в порядке обычного обслуживания.

Как обновиться

Плагин бесплатен, по-прежнему публикуется и активно поддерживается, поэтому исправление сводится к обычному обновлению. Самый безопасный путь состоит в обновлении через сам WordPress, предварительно сделав резервную копию:

  1. Сделайте резервную копию сайта (файлы и базу данных), прежде чем вносить изменения. Большинство хостинг-провайдеров предлагают резервные копии в один клик, либо используйте плагин резервного копирования WordPress.
  2. В администраторе WordPress перейдите в Консоль, затем Обновления, или Плагины, затем Установленные плагины. Если обновление Ultimate Member есть в списке, установите его отсюда.
  3. Если вы предпочитаете командную строку, WP-CLI делает то же самое: wp plugin update ultimate-member (команда использует имя папки, а не отображаемое название).
  4. Если обновление не появляется, последнюю версию можно получить прямо со страницы плагина в каталоге WordPress.org, Ultimate Member, и обновиться через Плагины, затем Добавить новый плагин, затем Загрузить плагин.
  5. После обновления подтвердите новый номер версии (2.13.0 или новее) описанными выше шагами и зарегистрируйте тестовую учетную запись (или проверьте существующие процессы членства и регистрации), чтобы убедиться, что все по-прежнему работает как ожидается.

Заодно стоит убедиться, что ядро WordPress и остальные ваши плагины актуальны: тот же принцип применим ко всем.

После обновления: не использовали ли это уже против вас?

Обновление до 2.13.0 или новее закрывает проблему, и для многих сайтов на этом задача исчерпана. Эта страница является предупредительным уведомлением, а не отчетом об инциденте: у меня нет сведений о том, происходило ли что-то на вашем сайте, и я не смотрел.

Одну последующую проверку стоит выполнить, и она обусловлена тем же вопросом о формах. Поскольку результатом этой проблемы, там где она применима, является учетная запись с повышенными привилегиями, то, если на вашем сайте была форма регистрации или профиля с выбором роли при открытой регистрации и затронутой версии, стоит убедиться, что никто не воспользовался этим для создания учетной записи, которой быть не должно:

  • Просмотрите учетные записи пользователей, особенно администраторов. В разделе Пользователи, затем Все пользователи, отфильтруйте по роли Администратор (и другим ролям с высокими привилегиями) и поищите учетные записи, которые вы не узнаете, или записи, созданные примерно в период использования затронутой версии либо после него. Обратите внимание на недавно зарегистрированных пользователей, чья роль выше роли обычного участника.
  • Если вы нашли учетную запись, которую не можете объяснить, отнеситесь к ней как к любому другому подозрению на несанкционированный доступ: удалите ее или понизьте роль, принудительно сбросьте пароли администраторов, а если в вашей организации есть команда ИТ-безопасности, подключите ее.
  • Если все выглядит как должно, и особенно если ни одна форма изначально не предлагала выбор роли, достаточно одного обновления.

Для ясности о рамках: это самопроверка, а не заявление о том, что ваш сайт был атакован. Это уведомление основано на номере версии, а не на каких-либо свидетельствах инцидента.

Что я делал и чего не делал

Чтобы быть полностью прозрачным относительно проверки, стоящей за моим письмом: я читал только файлы, которые ваш сайт и так отдает каждому посетителю, а именно главную страницу и записанные в ней адреса таблиц стилей Ultimate Member, а также публичный readme.txt плагина внутри wp-content/plugins/ultimate-member/. Я не получал доступ к вашей панели администратора WordPress, базе данных, настройкам форм или какой-либо приватной части сайта.

В частности, я никогда не создавал учетную запись, не отправлял ваши формы регистрации или профиля, не входил в систему и ничего не отправлял затронутой функциональности. Ничего не было отправлено, протестировано или эксплуатировано. Здесь это важно, потому что отправка регистрации близка к тому самому действию, которого касается эта проблема, поэтому «я к этому не прикасался» составляет всю разницу между разглашением и вторжением.

Я также намеренно не публикую детали, которые помогли бы кому-то воспользоваться этой проблемой. Описание выше останавливается на уровне, который нужен владельцу сайта, и я не даю ссылок на какой-либо код proof-of-concept.

Это наблюдение, основанное на версии: ваш сайт сообщает версию в диапазоне от 2.6.7 до 2.12.1. Это не утверждение, что ваш сайт был эксплуатируем в момент моей проверки. Поскольку проблема зависит от того, как устроены ваши формы и открыта ли регистрация (чего я не вижу), сайт в затронутом диапазоне вполне может быть вовсе не подвержен ей, а сайт в этом диапазоне может быть отдельно защищен другими средствами, например межсетевым экраном веб-приложений или бэкпортом исправления. Если вы уже обновились или устранили проблему иным способом, никаких действий не требуется, и я прошу прощения за беспокойство.

У меня нет вебмастера / я не справляюсь

Если не вы обслуживаете сайт, пожалуйста, передайте эту страницу тому, кто это делает (вашему веб-разработчику, агентству или хостинг-провайдеру). Они быстро узнают перечисленные шаги.

Если вы обслуживаете сайт самостоятельно и застряли, я с радостью бесплатно подскажу верное направление. Свяжитесь со мной по контактам ниже.

Контакты

Evan Harris, исследователь безопасности

Я обращаюсь по поводу подобных проблем исключительно для того, чтобы помочь операторам защитить их сайты. Если вы предпочитаете, чтобы с вами больше не связывались, просто сообщите мне, и я это уважу.

Источники

Официальные уведомления и отслеживание

Производитель / плагин