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

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

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

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

Автор: Hack & Fix
Освоишь: RBACpolicy testsdeny-by-default
Средне+60 XP ~30 мин golang
CWE-284 · A01:2021 Pro
Обложка: Referer Bypass: обход контроля доступа через подмену заголовка Обложка: Referer Bypass: обход контроля доступа через подмену заголовка
Задача
# Referer Bypass: обход контроля доступа через заголовок Referer ## Сценарий Вы — покупатель магазина гаджетов **ТехноБокс**. Помимо витрины у приложения есть служебный API-эндпоинт: он отдаёт JSON со списком всех пользователей и сервисными данными. Разработчики защитили его проверкой, которая, по их мнению, разрешает запросы только со страниц админ-панели. Внутренний аудит в этой защите сомневается: по его данным, эндпоинт раскрывает конфиденциальную метку, и её реально получить, имея лишь обычную учётную запись. ## Цель 1. Изучите механизм авторизации эндпоинта: какой именно атрибут запроса проверяет сервер, чтобы признать источник «легитимным». 2. Разберитесь, кто контролирует этот атрибут — сервер или клиент. 3. Имитируйте легитимный источник с обычной учётной записи и извлеките флаг из JSON-ответа. ## Теория Авторизация по клиентским HTTP-заголовкам (`Referer`, `Origin`, `User-Agent`) — известный антипаттерн контроля доступа (CWE-293). Все заголовки запроса формируются клиентом и могут быть произвольно заданы любым инструментом, отправляющим HTTP-запросы напрямую: CLI-клиентом, перехватывающим прокси или кодом. Браузер проставляет `Referer` автоматически при переходе по ссылке внутри сайта, но это не доказательство происхождения запроса — тот, кто отправляет запрос сам, поведением браузера не ограничен. **Уязвимый паттерн:** ```go // авторизация по клиентскому заголовку — подделывается referer := r.Header.Get("Referer") if !strings.Contains(referer, "...") && !strings.Contains(referer, r.Host) { http.Error(w, "Access Denied", 403); return } ``` Механика атаки: фильтр ожидает в заголовке определённую подстроку, намекающую на «свою» страницу. Отправив запрос напрямую и проставив заголовку подходящее значение, атакующий проходит проверку без всякой admin-сессии. Авторизация обязана опираться на серверные атрибуты — роль пользователя из аутентифицированной сессии с server-side состоянием. ## Точка входа атаки `GET /api/admin/users` — JSON-эндпоинт со списком пользователей и сервисных данных; для доступа нужна валидная сессия, проверке подлежит заголовок `Referer`. * Обычный пользователь: `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: Horizontal Privilege Escalation: изменение профиля другого пользователя Обложка лабы: Horizontal Privilege Escalation: изменение профиля другого пользователя
Access

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

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: URL Case Bypass: обход проверки пути с помощью регистра Обложка лабы: URL Case Bypass: обход проверки пути с помощью регистра
Access

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

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

+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