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

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

IDOR: Вертикальная эскалация привилегий в Express

Админ-эндпоинты Express проверяют наличие сессии, но не роль пользователя. Любой залогиненный demo-пользователь может открыть /admin/stats и забрать флаг.

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Легко+30 XP ~15 мин nodejs
CWE-639 · A01:2021 Pro
Обложка: IDOR: Вертикальная эскалация привилегий в Express Обложка: IDOR: Вертикальная эскалация привилегий в Express
Задача
# IDOR: вертикальная эскалация привилегий ## Сценарий Интернет-магазин **WebMart** вырос из пет-проекта: административная панель пристраивалась к нему наспех, раздел за разделом — список покупателей, сводная статистика, управление учётными записями. Панель должна быть доступна только администрации, и в интерфейсе обычного покупателя ссылок на неё нет. Инвестор перед сделкой задал вопрос: «А что, если ввести адрес панели прямо в браузере?» Проверьте, что на самом деле защищает административные разделы магазина. ## Цель 1. Войдите обычным покупателем и осмотритесь: какие разделы вам видны. 2. Проверьте прямым обращением, какие адреса административного раздела действительно закрыты от обычного пользователя, а какие открываются. 3. Через доступный административный раздел прочитайте сводную статистику магазина и получите флаг. ## Теория Вертикальная эскалация привилегий — частный случай Broken Access Control: защищённая функция проверяет, что пользователь вошёл, но не проверяет его роль. Проверка «вошёл» — аутентификация, проверка «имеет право» — авторизация; административная панель обязана требовать обе. **Уязвимый паттерн:** ```js if (!user) return res.redirect('/login'); // роль пользователя не проверяется ``` Ниже по коду запросы к списку покупателей и сводным данным выполняются для любого вошедшего. Отсутствие ссылок в интерфейсе — не защита: адреса административных разделов легко угадать по типовым конвенциям или найти в разметке и скриптах страниц. ## Точка входа атаки `GET /admin` — панель со списком пользователей, `GET /admin/stats` — сводная статистика магазина, `POST /admin/delete/<id>` — удаление пользователя. * **Пользователь:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: IDOR: Доступ к чужому счёту в Express Обложка лабы: IDOR: Доступ к чужому счёту в Express
IDOR

IDOR: Доступ к чужому счёту в Express

Эндпоинт просмотра счёта в Express + better-sqlite3 не проверяет владельца ресурса. Получи доступ к счёту администратора и извлеки флаг.

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: IDOR: предсказание UUID v1 по таймстампу Обложка лабы: IDOR: предсказание UUID v1 по таймстампу
IDOR

IDOR: предсказание UUID v1 по таймстампу

Заказы интернет-магазина идентифицируются UUID v1 (timestamp + MAC + clock_seq). Все заказы созданы внутри одного процесса, поэтому делят те же node/clock_seq биты — отличаются только по timestamp. Эндпоинт /order/:uuid не проверяет владельца, и атакующий, имея один свой UUID, угадывает UUID соседних заказов и получает чужие данные, включая CTF-флаг.

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: IDOR: Доступ к чужому счету Обложка лабы: IDOR: Доступ к чужому счету
IDOR

IDOR: Доступ к чужому счету

Эндпоинт просмотра счета не проверяет владельца. Получи флаг из счета другого пользователя.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: IDOR: Перебор заказов по последовательным ID Обложка лабы: IDOR: Перебор заказов по последовательным ID
IDOR

IDOR: Перебор заказов по последовательным ID

Заказы используют последовательные целочисленные ID. Эндпоинт /order/{id} не проверяет владельца — можно перебрать чужие заказы и найти флаг.

+30 XP
Go Pro
Exploit Fix