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

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

CSRF: JSON API без проверки происхождения запроса (Express)

JSON API /api/profile на Express принимает запросы без CSRF-токена и без проверки кастомного заголовка X-Requested-With. Смени пароль admin через cross-origin CSRF — затем войди и забери флаг.

Автор: Hack & Fix
Освоишь: double-submit tokenSameSite=StrictOrigin/Referer check
Средне+60 XP ~30 мин nodejs
CWE-352 · A01:2021 Pro
Обложка: CSRF: JSON API без проверки происхождения запроса (Express) Обложка: CSRF: JSON API без проверки происхождения запроса (Express)
Задача
# CSRF: атака на JSON API ## Сценарий Вы аудируете **GearFlow** — интернет-магазин на Express, чья команда недавно перевела настройки профиля с классических форм на JSON API. Разработчик уверен: новый API защищён от CSRF по самой своей природе, ведь HTML-форма не способна отправить JSON. Служба безопасности сомневается в этом аргументе и поручила вам проверку на практике. ## Цель 1. Войдите под обычным аккаунтом и изучите, как фронтенд общается с API профиля: метод, заголовки, тело. 2. Определите, какие из отправляемых клиентом атрибутов запроса сервер действительно проверяет. 3. Выполните тот же запрос с чужой страницы: добейтесь смены пароля администратора на известное вам значение через механизм отчётов. 4. Войдите под администратором и извлеките CTF-флаг из админ-панели. ## Теория Довод разработчика — лишь половина правды: браузер для cross-origin запросов с JSON-типом контента действительно выполняет preflight, который без разрешения сервера не пройдёт. Но «простые» типы контента preflight не требуют, а серверная сторона нередко распарсит JSON-тело независимо от заявленного типа. Cookie сессии браузер прикрепит к любому запросу — и API выполнит действие от имени жертвы. **Уязвимый паттерн:** ```javascript if (typeof data === 'string') { data = JSON.parse(data); // text/plain с JSON внутри — тоже принимается } if (data.password) { /* пароль обновляется без проверки намерения */ } ``` Аутентификация в обработчике есть, доказательства намерения нет: страница на чужом домене отправляет запрос с «простым» типом контента, браузер молча прикрепляет cookie администратора — и его пароль меняется. ## Точка входа атаки `POST /api/profile` — JSON API настроек профиля с полями `email`, `fullname`, `password`. Доставка страницы-приманки — Exploit Server и форма отчёта администратору. * **Обычный пользователь:** `demo` / `demo` * **Цель атаки:** `admin` (смена пароля через CSRF)

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

другие лабы по этой уязвимости
Обложка лабы: CSRF: SameSite=Lax обходится через GET (Express) Обложка лабы: CSRF: SameSite=Lax обходится через GET (Express)
CSRF

CSRF: SameSite=Lax обходится через GET (Express)

Эндпоинт смены email реализован через GET. SameSite=Lax не защищает top-level navigation — измени email админа через CSRF и забери флаг из /api/admin/email.

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

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

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: CSRF: Обход проверки Referer-заголовка Обложка лабы: CSRF: Обход проверки Referer-заголовка
CSRF

CSRF: Обход проверки Referer-заголовка

Приложение использует проверку заголовка Referer вместо CSRF-токена. Обойди проверку и смени email администратора.

+60 XP
Go Pro
Exploit Fix