Перейти к содержимому
← Каталог golang Race Condition

IDOR: Mass Assignment — эскалация привилегий через профиль

Эндпоинт обновления профиля принимает JSON и записывает все поля, включая role. Отправь {"role":"admin"} и получи доступ к админ-панели с флагом.

mediumgolangPro
Задача
# IDOR: Mass Assignment — эскалация привилегий через обновление профиля ## Сценарий Вы зарегистрированы в интернет-магазине как пользователь **demo**. В личном кабинете есть форма редактирования профиля, которая отправляет данные на API-эндпоинт `POST /profile/update`. Команда уверена, что эндпоинт безопасен: пользователь обновляет только свой профиль, входная схема контролируется фронтендом, валидные сессии проверяются. По данным внутреннего аудита, флаг хранится в зоне, доступной только администраторам — её требуется получить, имея только обычную учётную запись. ## Цель 1. Изучите запрос обновления профиля и определите, какие поля приходят от фронтенда. 2. Найдите способ передать API данные сверх формы — поля, не предусмотренные интерфейсом, но интерпретируемые сервером. 3. Получите доступ к административной зоне приложения и извлеките флаг. ## Теория Mass Assignment (массовое присваивание) — класс уязвимостей, при котором обработчик HTTP-запроса декодирует входное тело (JSON, form-data, XML) напрямую в **доменную модель** или ORM-сущность, не ограничивая набор разрешённых полей. Если в модели присутствуют чувствительные атрибуты (роль, баланс, статус активации, флаги привилегий), атакующий может включить их в запрос и записать произвольное значение — даже если в UI-форме таких полей нет. **Уязвимый паттерн:** ```go // Декодирование тела запроса напрямую в доменную модель пользователя var update models.User json.NewDecoder(r.Body).Decode(&update) db.Exec("UPDATE users SET ... WHERE id=?", update.Field1, update.Field2, ..., user.ID) ``` Атака не требует обхода аутентификации или сложных техник — достаточно просмотреть структуру модели приложения (часто доступна в исходниках, JS-bundle, OpenAPI-спеке) или подобрать имя атрибута по конвенции (`role`, `is_admin`, `permissions`, `verified`, `balance`). Через DevTools, curl или Burp атакующий отправляет JSON с дополнительным полем — и сервер прозрачно его применяет, потому что код доверяет схеме входящего payload. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Учётные данные | `demo` / `demo` | | Обновление профиля | `POST /profile/update` (JSON) | | Цель привилегированного доступа | `GET /admin` |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru