
Эксплуатация и анализ CVE-2023-3460 — критического повышения привилегий в плагине Ultimate Member для WordPress, с средой воспроизведения и рекомендациями по смягчению последствий.
| CVE ID | CVSS Score | Discovered | Affected Plugin | Vulnerability Type |
|---|---|---|---|---|
| CVE-2023-3460 | 07/04/2023 | Ultimate Member | Несанкционированный доступ администратора |
Данное исследование посвящено CVE¹-2023-3460 — критической уязвимости, затрагивающей плагин "Ultimate Member" для WordPress, которая позволяет несанкционированное повышение привилегий. Этот плагин широко распространён и используется для управления профилями на сайтах WordPress. Данная уязвимость представляет серьёзный риск, поскольку позволяет атакующему получить права администратора и, следовательно, полный контроль над сайтом. Именно поэтому эта ошибка была классифицирована как критическая и оценена в 9.1 балла по шкале CVSS организацией NIST².
CVE-2023-3460 эксплуатирует ошибку в управлении ролями и разрешениями плагином. В WordPress функция WP_Capabilities³ используется для управления ролями и разрешениями пользователей. Эта функция позволяет администраторам определять конкретные возможности для каждой роли пользователя. Однако неправильное использование этой функции может привести к уязвимостям повышения привилегий.
В случае Ultimate Member уязвимость позволяет атакующему обойти проверку возможностей WP и получить доступ уровня администратора к сайту. Плагин работает, используя предопределённый список ключей метаданных пользователя, которыми не должны манипулировать пользователи. Однако такой подход к безопасности, основанный на списках блокировки, часто оказывается недостаточным, поскольку оставляет возможности для обхода.
WordPress управляет ролями и разрешениями пользователей через структуру, называемую wp_capabilities. Эта структура представляет собой сериализованное представление различных ролей и разрешений, предоставленных пользователям. Например, администратор будет иметь иной набор возможностей, чем редактор или автор. Эти возможности хранятся в базе данных WordPress в виде сериализованных массивов в таблице wp_usermeta.
Ошибка CVE-2023-3460 берёт своё начало в реализации управления ролями и разрешениями в Ultimate Member. Плагин работает, используя предопределённый список ключей метаданных пользователя, которыми пользователи не должны манипулировать. Этот список используется для проверки того, пытаются ли пользователи сохранить эти ключи при создании учётной записи. Такой подход является распространённым анти-паттерном безопасности, когда блокировка известных вредоносных входных данных (списки блокировки) может казаться интуитивно понятной, но на деле оказывается сложнее, чем ожидалось, и часто оставляет возможности для обхода безопасности.
Здесь Ultimate Member использует недостаточную проверку метаданных, отправляемых при регистрации пользователей. Плагин использует функцию под названием is_metakey_banned для проверки того, разрешены ли метаданные, отправленные пользователем. Эта функция проверяет, присутствуют ли отправленные метаданные в списке запрещённых метаданных. Если это так, функция возвращает true, и регистрация пользователя блокируется. В противном случае функция возвращает false, и регистрация пользователя разрешается.
Однако WordPress принимает некоторые символы с диакритическими знаками как символы по умолчанию. Если пользователь отправляет метаданные с символами с диакритическими знаками, функция is_metakey_banned не обнаружит их, и регистрация пользователя будет разрешена.
Плагин Ultimate Member широко используется в различных средах — от небольших личных блогов до крупных сайтов электронной коммерции. Нельзя сделать никаких конкретных допущений о навыках в области компьютерной безопасности конечных пользователей или администраторов сайтов.
Серверы, размещающие сайты WordPress, обычно расположены в защищённых центрах обработки данных. Для личных сайтов физическая безопасность зависит от индивидуального окружения пользователя.
Предполагается, что плагин Ultimate Member установлен и настроен правильно в соответствии с официальными инструкциями. Предполагается, что сайт WordPress поддерживается в актуальном состоянии с базовыми мерами безопасности.
7.5 Функции безопасности
В качестве администратора вот конкретные меры, которые можно предпринять для снижения рисков, связанных с этой уязвимостью.
Проверка пользовательских входных данных: внедрить проверки на стороне сервера для проверки всех пользовательских входных данных, особенно тех, которые изменяют метаданные, такие как wp_capabilities. Использовать регулярные выражения или списки разрешений (whitelists), а не списки блокировки, для контроля входных данных.
CAPTCHA и ограничения частоты запросов: интегрировать CAPTCHA и ограничения частоты запросов в формы регистрации для предотвращения автоматизированных атак. Проверки на стороне клиента: хотя проверки на стороне клиента недостаточны сами по себе, они могут помочь предотвратить автоматизированные атаки и улучшить пользовательский опыт.
Мониторинг журналов: внедрить систему мониторинга журналов для обнаружения любых подозрительных изменений ролей пользователей или попыток внедрения метаданных. Это можно сделать с помощью инструментов анализа журналов.
Межсетевой экран веб-приложений (WAF): настроить WAF⁴ для блокировки известных и неизвестных атак, включая атаки путём внедрения вредоносного кода. Системы обнаружения и предотвращения вторжений (IDS/IPS)⁵: внедрить IDS/IPS для обнаружения попыток эксплуатации уязвимости.
Пересмотр ролей пользователей: регулярно проверять роли, назначенные пользователям, для обнаружения аномального повышения привилегий. Ограничение разрешений: ограничить разрешения, предоставляемые по умолчанию новым пользователям, и требовать административного подтверждения для назначения высоких ролей, следуя принципу наименьших привилегий. Подробнее об этом принципе см. здесь.
Быстрое применение обновлений: регулярно выполнять обновления безопасности для плагинов и самого WordPress.
Обучать разработчиков передовым методам безопасности, упомянутым ранее, и повышать их осведомлённость о рисках и последствиях неправильной реализации.
Для запуска эксплуатации уязвимости доступен Makefile. Вы можете использовать его следующим образом:
make up для запуска WordPress со всеми необходимыми установками. После ожидания будет запущен сервер WordPress, настроен и установлена версия 2.6.5 плагина Ultimate Member.
После этого вы сможете подключиться к WordPress на странице Login с учётными данными admin:password. Перейдя на вкладку Users, вы увидите,
что присутствует только пользователь admin.

Примечание: если у вас есть docker-compose, а не docker compose, вы можете соответствующим образом изменить Makefile (переменная DOCKER_COMPOSE= docker-compose).
Затем вы можете запустить эксплуатацию уязвимости:
make exploit
После этого вы сможете подключиться к WordPress на Login с учётными данными, выданными эксплойтом, и наблюдать на вкладке Users, что был создан новый пользователь с ролью Administrator.

make down для остановки сервера WordPress и удаления данных.
make exploit запускает скрипт exploit.py. Этот скрипт действует в несколько этапов:
Технические детали эксплойта1. Проверка уязвимости: перед эксплуатацией скрипт проверяет, является ли версия плагина Ultimate Member, установленная на целевом сайте, уязвимой, то есть ниже версии 2.6.7.
2. Получение nonce безопасности: скрипт получает nonce безопасности³ со страницы регистрации целевого сайта. Этот nonce необходим для того, чтобы запрос на регистрацию был принят WordPress. Nonce извлекается путём анализа HTML-кода страницы регистрации.
3. Эксплуатация уязвимости: затем скрипт отправляет POST-запрос на страницу регистрации, включая изменённый параметр (wp_càpabilities[administrator]=1). Этот параметр использует символ с диакритическим знаком (à) для обхода проверок безопасности плагина и некорректной сериализации данных, тем самым присваивая роль администратора созданному новому пользователю.
4. Подтверждение эксплойта: после отправки запроса скрипт проверяет, успешна ли операция, анализируя ответ сервера.
| Угрозы | B1 (Конфиденциальность данных пользователей) | B2 (Целостность веб-сайта) | B3 (Целостность плагина Ultimate Member) |
|---|
| M1 Несанкционированный доступ | X | X | X |
| M2 Внедрение вредоносного кода | X | X | |
| M3 Утечка данных | X | ||
| M4 Ущерб репутации | X |
| Название | Ссылка |
|---|
| NIST CVE-2023-3460 | https://nvd.nist.gov/vuln/detail/CVE-2023-3460 |
| Ultimate Member Github | https://github.com/ultimatemember/ultimatemember |
| Версия пакета, использованная для эксплуатации 2.6.5 | https://wordpress.org/plugins/ultimate-member/advanced/ |
| Патч для эксплойта | https://github.com/ultimatemember/ultimatemember/commit/fae47c6065ce07e9a8b44501002fa5b4f16d2456 |
| Обзор эксплойта | https://thesecmaster.com/how-to-fix-cve-2023-3460-a-privilege-escalation-vulnerability-in-ultimate-member-wordpress-plugin/ |
| OWASP Top 10 риски безопасности приложений | https://owasp.org/www-project-top-ten/ |