Плагин Security Hardener для WordPress уязвим к отсутствию авторизации во всех версиях до 2.4.4 включительно. Уязвимость существует потому, что защита перечисления пользователей плагина, которая включена по умолчанию, перехватывает фильтр rest_endpoints через secure_user_endpoints() и перезаписывает каждый зарегистрированный обработчик разрешений_callback как на маршрутах /wp/v2/users, так и на маршрутах /wp/v2/users и /wp/v2/users/(?P<id>[\d]+), включая обработчики POST, PUT, PATCH и DELETE, с простым замыканием, которое возвращает только результат. is_user_logged_in(), полностью удаляя исходные проверки возможностей WordPress Core, такие как create_users, Promotion_user, edit_users и delete_users, которые обычно выполняет WP_REST_Users_Controller. Это позволяет прошедшим проверку подлинности злоумышленникам с доступом на уровне подписчика и выше создавать новые учетные записи администратора, отправляя POST-запрос к /wp/v2/users с ролью администратора, или сбрасывать существующий пароль администратора, отправляя запрос PUT/POST к /wp/v2/users/<id>.
Поскольку опция block_user_enum по умолчанию включена, специальная настройка плагина не требуется — перезапись активна при каждом запросе, как только плагин установлен.
Показать оригинальное описание (EN)
The Security Hardener plugin for WordPress is vulnerable to Missing Authorization in all versions up to, and including, 2.4.4. The vulnerability exists because the plugin's user-enumeration protection, which is enabled by default, hooks the rest_endpoints filter via secure_user_endpoints() and overwrites every registered handler's permission_callback on both the /wp/v2/users and /wp/v2/users/(?P<id>[\d]+) routes — including POST, PUT, PATCH, and DELETE handlers — with a bare closure that returns only is_user_logged_in(), completely stripping WordPress Core's original capability checks such as create_users, promote_user, edit_users, and delete_users that WP_REST_Users_Controller normally enforces. This makes it possible for authenticated attackers with Subscriber-level access and above to create new Administrator accounts by sending POST request to /wp/v2/users with administrator role, or to reset an existing Administrator's password by issuing a PUT/POST request to /wp/v2/users/<id>. Because the block_user_enum option defaults to enabled, no special plugin configuration is required — the overwrite is active on every request as soon as the plugin is installed.
Характеристики атаки
Последствия
Строка CVSS v3.1