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

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

CSRF: SameSite=Lax Bypass через GET-запрос (Flask)

Endpoint смены email доступен через GET. SameSite=Lax не защищает от top-level GET navigation — измени email admin одной ссылкой.

Автор: Hack & Fix
Освоишь: double-submit tokenSameSite=StrictOrigin/Referer check
Средне+60 XP ~30 мин python
CWE-352 · A01:2021 Pro
Обложка: CSRF: SameSite=Lax Bypass через GET-запрос (Flask) Обложка: CSRF: SameSite=Lax Bypass через GET-запрос (Flask)
Задача
# CSRF: обход защиты SameSite=Lax ## Сценарий Вы проводите аудит **OrbitSupply** — интернет-магазина на Flask. Команда знает об атаках класса CSRF и сознательно не стала вводить токены: сессия защищена современным атрибутом cookie `SameSite`, и, по расчёту разработчиков, межсайтовые запросы остаются без сессии, значит и подделать ничего нельзя. Технический директор согласился с аргументацией, но на всякий случай заказал внешний аудит. Расчёт верен лишь отчасти: у выбранного режима cookie есть документированное исключение, и в приложении нашёлся чувствительный эндпоинт, который попадает под это исключение ровно при штатной работе. Проверить гипотезу поможет механизм «Report to Admin»: отправленная ссылка открывается браузером администратора-бота. ## Цель 1. Авторизуйтесь как обычный пользователь и изучите работу чувствительных эндпоинтов профиля: какими методами они принимают запросы и откуда берут параметры. 2. Определите режим атрибута `SameSite` сессионной cookie и вспомните, для какого класса межсайтовых запросов этот режим делает исключение. 3. Подготовьте страницу, которая при открытии инициирует запрос нужного класса к эндпоинту смены email с адресом вашей учётной записи, и доставьте её администратору через механизм отчётов. 4. Откройте служебную почту под своим пользователем и заберите флаг из уведомления о смене адреса администратора. ## Теория Атрибут `SameSite` ограничивает прикрепление cookie к межсайтовым запросам. Режим по умолчанию — `Lax` — блокирует cookie в межсайтовых POST-запросах и подгрузках ресурсов, но делает исключение для навигации верхнего уровня: когда пользователь переходит по ссылке на другой сайт, браузер обязан отправить cookie. Если операция, изменяющая состояние, принимает параметры через GET-адрес, это исключение превращается в канал атаки: переход жертвы по ссылке-ловушке выполняется с её полноценной сессией. **Уязвимый паттерн:** ```python @app.route('/api/email/change', methods=['GET']) def api_change_email(): new_email = request.args.get('email', '').strip() db.execute('UPDATE users SET email=? WHERE id=?', (new_email, user['id'])) ``` Изменяющая данные операция доступна GET-запросом с параметром в адресе — ровно тот случай, который режим `Lax` не блокирует. ## Точка входа атаки `GET /api/email/change` — параметр `email` в строке адреса. Доставка — `POST /report` с полем `url`: ссылка на страницу, размещённую на сервере эксплойтов. Адрес своей учётной записи смотрите в личном кабинете. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** управляется ботом отчётов; отдельные учётные данные не нужны

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

другие лабы по этой уязвимости
Обложка лабы: CSRF: JSON API без кастомного заголовка (Flask) Обложка лабы: CSRF: JSON API без кастомного заголовка (Flask)
CSRF

CSRF: JSON API без кастомного заголовка (Flask)

JSON API endpoint /api/profile не требует кастомного заголовка X-Requested-With. Смени пароль admin через CSRF-атаку на API.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: CSRF: Обход проверки Referer (Flask) Обложка лабы: CSRF: Обход проверки Referer (Flask)
CSRF

CSRF: Обход проверки Referer (Flask)

Приложение проверяет Referer как защиту от CSRF, но проверка некорректна — атакующий может обойти её, указав домен жертвы как часть пути.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: CSRF: Атака через JSON API без кастомных заголовков Обложка лабы: CSRF: Атака через JSON API без кастомных заголовков
CSRF

CSRF: Атака через JSON API без кастомных заголовков

JSON API эндпоинт не требует кастомных заголовков. Используй CSRF для смены пароля admin через API.

+60 XP
Go Pro
Exploit Fix