Уведомление о безопасности ProfilePress
Если Вы получили от меня письмо со ссылкой на эту страницу, то потому, что Ваш сайт, по всей
видимости, использует версию плагина ProfilePress (плагин WordPress, который по-прежнему
поставляется под именем папки wp-user-avatar, от ProperFraction), которая попадает в
затронутый диапазон известной проблемы безопасности. На этой странице объясняется, в чём
заключается проблема, как определить, касается ли она вообще Вашего сайта, и как обновиться.
Прежде всего замечание об имени, поскольку оно сбивает людей с толку: этот плагин начинался как
WP User Avatar и сохранил этот идентификатор (slug) при смене названия, поэтому в Ваших
файлах он находится по пути /wp-content/plugins/wp-user-avatar/, тогда как административная
панель WordPress перечисляет его под его полным нынешним названием, “Paid Membership Plugin,
Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress”.
WP User Avatar и ProfilePress являются одним и тем же плагином. На всём протяжении это плагин
WordPress.
Прежде всего, самый важный факт об этом уведомлении: версия из затронутого диапазона сама по
себе не означает, что Ваш сайт уязвим. Описанную ниже проблему можно эксплуатировать только
тогда, когда ProfilePress публикует фронтенд-форму регистрации, содержащую поле выбора роли
(шорткод [reg-select-role] или поле “reg-select-role” в конструкторе форм с перетаскиванием),
настроенную определённым образом. Если Ваш сайт не предлагает публичной самостоятельной
регистрации или Ваши формы регистрации не позволяют посетителю выбрать роль, он, скорее всего,
не уязвим даже на затронутой версии. Я могу прочитать версию Вашего плагина из публичных файлов,
но не вижу Ваши формы регистрации, поэтому данное уведомление является предупредительным
сигналом, а не подтверждённым выводом о Вашем сайте.
Речь идёт об уязвимости CVE-2026-12497, неавторизованном повышении привилегий в обработчике фронтенд-регистрации плагина (CWE-269, неправильное управление привилегиями). Орган, присвоивший CVE, не опубликовал оценку серьёзности, и я её не выдумываю; для оценки проблемы важно то, что она неавторизованная, но ограничена ролью, отличной от администратора, и обусловлена описанной выше конфигурацией регистрации. Она затрагивает версии с 3.0.0 по 4.16.17 и устранена в версии 4.16.18. Если Вы используете затронутую версию, обновите ProfilePress до 4.16.18 или новее (текущий выпуск: 4.16.19). Нет никаких признаков того, что эта проблема где-либо эксплуатируется.
Несколько слов о срочности, поскольку это условное уведомление: насколько это важно для Вас, зависит почти целиком от того, публикуете ли Вы такого рода форму регистрации. Если Вы не предлагаете публичной самостоятельной регистрации с полем выбора роли, обновление является рутинным обслуживанием плагина. Если предлагаете, пожалуйста, отнеситесь к обновлению как к приоритету: в такой конфигурации уязвимость могла бы позволить неавторизованному посетителю зарегистрироваться с более высокой ролью, чем предлагала Ваша форма (например, Редактор или Автор). Но даже тогда эта страница является предупредительным сигналом, а не отчётом об инциденте, и никакие экстренные меры не подразумеваются.
Это уязвимость плагина, а не ядра WordPress. Полностью актуальный WordPress не защищает Вас, если сам плагин ProfilePress находится на затронутой версии.
Является ли это сообщение подлинным?
Да. Это добросовестное уведомление в рамках ответственного раскрытия информации от независимого исследователя безопасности. Я не прошу у Вас денег, паролей или доступа к Вашему сайту и не пытался проникнуть в него, что-либо загрузить или что-либо эксплуатировать.
Всё, что я сделал, это просмотрел публично доступные файлы, которые Ваш сайт предоставляет
каждому посетителю (точно так же, как публична Ваша главная страница), и отметил номер версии,
который плагин публикует в своём публичном файле readme.txt. Системы регистрации я специально
не касался, и ничто в этой проверке не затрагивает Ваши данные, Вашу административную панель
или какую-либо частную часть Вашего сайта (подробнее в разделе
Что я делал и чего не делал ниже).
Если Вы хотите убедиться в том, кто я, ознакомьтесь с контактными данными внизу этой страницы и на странице Обо мне.
Почему это важно
ProfilePress является широко используемым плагином членства, регистрации пользователей и входа в систему для WordPress (около 100 000 активных установок). Помимо прочего, он позволяет сайту публиковать фронтенд-формы регистрации, чтобы посетители могли создавать собственные учётные записи, и эти формы могут по желанию включать поле, позволяющее посетителю выбрать, какую роль должна иметь его новая учётная запись.
В затронутых версиях обработчик регистрации определяет роли, которые форма предлагает, и роли, которые она будет принимать, с помощью двух разных фрагментов кода. При некоторых допустимых конфигурациях поля роли код, вычисляющий принимаемые роли, не считывает список ролей формы и молча переходит к принятию любой редактируемой роли (то есть любой роли, кроме администратора). Поскольку публичный обработчик регистрации к тому же не защищён nonce, неавторизованный посетитель может отправить роль по своему выбору и быть зарегистрированным с более высокой ролью, чем предлагала форма, например Редактором или Автором вместо предполагаемого Подписчика.
Две вещи помогают взглянуть на это трезво. Во-первых, воздействие имеет твёрдый потолок: плагин явно исключает роль администратора из того, что может назначить регистрация, поэтому это проблема повышения привилегий, ограниченная ролью, отличной от администратора, а не захват сервера, захват учётной записи администратора или удалённое выполнение кода. Во-вторых, точкой входа является опубликованная форма регистрации с полем выбора роли, поэтому проблема достигает только сайтов, настроенных таким образом; сайт без публичной самостоятельной регистрации или такой, чьи формы не позволяют посетителю выбрать роль, скорее всего, не уязвим даже на затронутой версии. И, повторяя это прямо, нет никаких признаков активной эксплуатации: её нет в каталоге известных эксплуатируемых уязвимостей CISA (Known Exploited Vulnerabilities), и мне не известно ни об одном отчёте об эксплуатации.
Если в моём письме упоминалась эта проблема, это означает, что версия, о которой сообщает Ваш сайт, попадает в затронутый диапазон. Я не проверял, уязвим ли Ваш конкретный сайт, и не вижу, как настроены Ваши формы регистрации; всё, что я наблюдал, это то, что сайт сообщает о затронутой версии.
Затронут ли мой сайт?
Это определяют два вопроса, в таком порядке.
Первый: публикуете ли Вы форму регистрации ProfilePress, которая позволяет посетителю выбрать роль? Это решающий вопрос, и ответить на него можете только Вы.
- Если Ваш сайт не предлагает публичной самостоятельной регистрации или его формы
регистрации не содержат поля выбора роли (шорткод
[reg-select-role]или поле “reg-select-role” в конструкторе форм), Вы, скорее всего, не уязвимы даже на затронутой версии. Обновление всё же рекомендуется как обычное обслуживание. - Если Ваш сайт публикует фронтенд-форму регистрации с полем выбора роли, проблема касается Вас, и Вам следует обновиться незамедлительно.
- Чтобы проверить: в административной панели WordPress посмотрите, есть ли в Ваших формах регистрации ProfilePress поле роли, или откройте одну из страниц регистрации в окне приватного просмотра и посмотрите, предлагается ли посетителю, который не вошёл в систему, выбор роли учётной записи.
Второй: какую версию Вы используете? Вам не обязательно верить мне на слово, а для этого плагина версия сообщается надёжно.
Из административной панели WordPress (авторитетный источник):
- Войдите в панель управления WordPress (обычно по адресу
yourdomain.com/wp-admin). - Перейдите в Plugins затем Installed Plugins.
- Найдите запись, указанную как “Paid Membership Plugin … ProfilePress” (её папка:
wp-user-avatar), и запишите версию, показанную под её названием. Это реально установленная версия.
Из публичного манифеста (вход в систему не требуется): откройте в браузере
yourdomain.com/wp-content/plugins/wp-user-avatar/readme.txt. Строка Stable tag: вверху
содержит версию, о которой сообщает Ваша установка, и это тот же публичный файл, который прочитал
я.
Небольшое замечание, если Вы из тех, кто считывает номера версий из URL-адресов ресурсов:
судите о версии по значению ?ver= собственных файлов плагина frontend.min.js или
frontend.min.css, которое является версией ProfilePress. Не считывайте её из входящего в
комплект select2/select2.min.css, чей ?ver= (например, 7.0.2) является собственной версией
библиотеки select2 и не имеет ничего общего с версией плагина.
Затем примените следующее правило и учтите, что версии сравниваются численно, а не по алфавиту:
- С 3.0.0 по 4.16.17: потенциально затронуты (при условии, оговорённом в вопросе о форме регистрации выше), обновитесь сейчас.
- 4.16.18 или новее: уже исправлены. Сюда входит текущий выпуск 4.16.19.
- Старше 3.0: этой проблемой не затронуты. Уязвимый обработчик регистрации впервые появился при смене названия на ProfilePress 3.0; более ранняя линейка “WP User Avatar” 1.x и 2.x, работавшая только с аватарами, не имела функции регистрации и не содержит её. (На практике практически каждая текущая установка является выпуском линейки 4.16.x.)
Как обновиться
Самый безопасный путь: обновление через сам WordPress, предварительно создав резервную копию:
- Создайте резервную копию Вашего сайта (файлы и база данных) перед внесением изменений. Большинство хостинг-провайдеров предлагают резервное копирование в один клик, или используйте плагин резервного копирования WordPress.
- В административной панели WordPress перейдите в Dashboard затем Updates, или Plugins затем Installed Plugins. Если обновление ProfilePress указано в списке, установите его отсюда.
- Если Вы предпочитаете командную строку, WP-CLI делает то же самое:
wp plugin update wp-user-avatar(команда использует имя папки,wp-user-avatar). - Если обновление не появляется, Вы можете получить последний выпуск напрямую со страницы плагина в каталоге WordPress.org, ProfilePress, и обновить его через Plugins затем Add New Plugin затем Upload Plugin.
- После обновления подтвердите новый номер версии (4.16.18 или новее; текущий выпуск: 4.16.19), следуя приведённым выше шагам, и проверьте, что страницы Вашей регистрации и входа работают нормально.
Раз уж Вы этим занялись, стоит убедиться, что ядро WordPress и Ваши прочие плагины актуальны, поскольку тот же принцип применим ко всем из них.
После обновления
Обновление до 4.16.18 или новее закрывает проблему, и для большинства сайтов на этом задача завершена. Нет никаких признаков того, что эта уязвимость где-либо эксплуатировалась, поэтому никакие экстренные меры не подразумеваются: Вам не нужно считать свой сайт скомпрометированным или отключать его.
Стоит обдумать одну последующую меру, и она обусловлена тем же вопросом о регистрации. Если Ваш сайт публиковал форму регистрации ProfilePress с полем выбора роли, находясь на затронутой версии, то по меньшей мере теоретически было возможно, что посетитель зарегистрировался с более высокой ролью, чем предполагалось, хотя нет доказательств, что кто-либо это сделал. В таком случае разумна одна рутинная мера предосторожности:
- Просмотрите недавние регистрации пользователей на предмет учётных записей, созданных с неожиданно высокой ролью (например, Редактора или Автора, которого Вы не узнаёте), обычным образом, каким Вы просматриваете активность сайта, и исправьте или удалите всё, что выглядит неуместно.
Отнеситесь к этому как к обычным регулярным мерам безопасности, а не как к реагированию на инцидент. Если Вы не предлагаете публичной самостоятельной регистрации с полем выбора роли, одного обновления достаточно.
Что я делал и чего не делал
Чтобы быть полностью прозрачным относительно проверки, стоящей за моим письмом: я лишь читал
публичные файлы, которые Ваш сайт уже предоставляет каждому посетителю, а именно публичный файл
плагина readme.txt и Вашу главную страницу. Я не получал доступ к Вашей административной
панели WordPress, Вашей базе данных или какой-либо частной части сайта. В частности, я не
касался уязвимого пути регистрации и ничего не тестировал и не эксплуатировал.
Это наблюдение на основе версии: Ваш сайт сообщает о версии в затронутом диапазоне. Поскольку эта проблема зависит от конфигурации, сайт в этом диапазоне может быть вообще не уязвим (если он не предлагает публичной самостоятельной регистрации или его формы не содержат поля выбора роли), а также может уже быть защищён иными средствами, например межсетевым экраном веб-приложений. Данное уведомление не является утверждением, что Ваш сайт был уязвим в момент моей проверки.
У меня нет веб-мастера / я застрял
Если Вы не тот человек, который обслуживает сайт, пожалуйста, перешлите эту страницу тому, кто это делает (Вашему веб-разработчику, агентству или хостинг-провайдеру). Они быстро узнают приведённые выше шаги.
Если Вы обслуживаете сайт самостоятельно и застряли, я с радостью бесплатно помогу Вам найти верное направление. Свяжитесь со мной, используя контактные данные ниже.
Контакты
Evan Harris, исследователь безопасности
- Электронная почта: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Я обращаюсь по подобным вопросам исключительно для того, чтобы помочь операторам защитить их сайты. Если Вы предпочитаете, чтобы с Вами больше не связывались, просто сообщите мне об этом, и я это уважу.
Источники
Официальные уведомления и отслеживание
Производитель / плагин