Перейти к содержимому

Поиск по платформе

Horizontal Privilege Escalation: изменение профиля другого пользователя

Обработчик обновления аватара принимает user_id из формы вместо сессии -- атакующий может изменить профиль любого пользователя, включая администратора.

Автор: Hack & Fix
Освоишь: RBACpolicy testsdeny-by-default
Средне+60 XP ~30 мин golang
CWE-284 · A01:2021 Pro
Обложка: Horizontal Privilege Escalation: изменение профиля другого пользователя Обложка: Horizontal Privilege Escalation: изменение профиля другого пользователя
Задача
# Horizontal Privilege Escalation: модификация профиля другого пользователя ## Сценарий Вы — постоянный покупатель магазина снаряжения для пентестеров **ПентестБокс**. В личном кабинете есть форма смены аватара: вы указываете URL картинки, форма отправляет данные на сервер, и сервер обновляет вашу учётную запись. Команда уверена, что эндпоинт безобиден: каждый пользователь редактирует только свой профиль. Внутренний аудит, впрочем, предупредил: система фиксирует попытки изменить чужой профиль и в этом случае раскрывает атакующему контрольную метку — флаг. ## Цель 1. Изучите форму обновления аватара на странице профиля: какие поля она отправляет на сервер и какие из них контролируются клиентом. 2. Найдите параметр, по которому сервер решает, чей профиль обновлять, и который он принимает из тела запроса без проверки. 3. Из обычной учётной записи измените чужой профиль — система зафиксирует горизонтальную эскалацию, и флаг появится на странице вашего профиля. ## Теория Horizontal Privilege Escalation — частный случай IDOR (Insecure Direct Object Reference, CWE-639): аутентифицированный пользователь получает доступ к ресурсам другого пользователя того же уровня привилегий. В отличие от вертикальной эскалации, обходить ролевую защиту не нужно — атакующий и жертва оба «обычные пользователи». Корень проблемы: приложение определяет, чей ресурс обрабатывать, по полю из тела запроса, а не по идентификатору аутентифицированной сессии. **Уязвимый паттерн:** ```go // user_id приходит из формы — атакующий решает, чей профиль обновится userID := r.FormValue("user_id") db.Exec("UPDATE users SET avatar_url=? WHERE id=?", avatarURL, userID) ``` Сервер доверяет скрытому полю формы, поэтому перехват запроса и подмена идентификатора перенаправляют UPDATE на чужую запись. Корректная реализация всегда берёт идентификатор владельца из сессии и игнорирует любые клиентские поля, претендующие на эту роль. ## Точка входа атаки `POST /profile/avatar` — форма обновления аватара (form-encoded): поле `avatar_url`, скрытое поле `user_id` и актуальный `csrf_token` со страницы профиля. * Обычный пользователь: `demo` / `demo`

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: URL Case Bypass: обход проверки пути с помощью регистра Обложка лабы: URL Case Bypass: обход проверки пути с помощью регистра
Access

URL Case Bypass: обход проверки пути с помощью регистра

Middleware проверяет путь с учётом регистра (strings.HasPrefix). Замена /admin на /Admin позволяет обойти проверку роли администратора.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Referer Bypass: обход контроля доступа через подмену заголовка Обложка лабы: Referer Bypass: обход контроля доступа через подмену заголовка
Access

Referer Bypass: обход контроля доступа через подмену заголовка

API-эндпоинт /api/admin/users проверяет заголовок Referer вместо роли пользователя. Атакующий может подделать заголовок и получить доступ к данным администратора.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Forced Browsing: доступ к скрытому эндпоинту экспорта Обложка лабы: Forced Browsing: доступ к скрытому эндпоинту экспорта
Access

Forced Browsing: доступ к скрытому эндпоинту экспорта

Административный эндпоинт /admin/export зарегистрирован без проверки роли — любой авторизованный пользователь может получить CSV-экспорт с конфиденциальными данными.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: Access Control: Горизонтальная эскалация через API в Express Обложка лабы: Access Control: Горизонтальная эскалация через API в Express
Access

Access Control: Горизонтальная эскалация через API в Express

API-эндпоинт /api/users/:user_id/notes не проверяет владельца. Получите заметки администратора.

+60 XP
Node.js Pro
Exploit Fix