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

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

ReDoS: catastrophic backtracking в проверке email профиля

Сервис ProfileGuard валидирует email пользователя на стороне сервера через регулярное выражение с вложенными квантификаторами. Тщательно подобранная входная строка вызывает экспоненциальный backtracking движка V8, поток событий блокируется на десятки секунд, инцидент фиксируется в логе администратора — и вместе с ним выдаётся флаг.

Автор: Hack & Fix
Освоишь: без catastrophic backtrackingre2 движокinput length cap
Средне+60 XP ~35 мин nodejs
CWE-1333 · A05:2021 Pro
Обложка: ReDoS: catastrophic backtracking в проверке email профиля Обложка: ReDoS: catastrophic backtracking в проверке email профиля
Задача
# ReDoS (Регулярное выражение в проверке email) ## Сценарий «Идентика» — внутренняя платформа управления учётными записями: сотрудник входит в профиль и меняет контактный email, а сервер перед сохранением проверяет адрес «на корректность». Служба мониторинга уже дважды фиксировала паузы, когда воркер не отвечал никому, и оба раза — сразу после смены email. Разработчики разбора не нашли, и вас, инженера по безопасности, попросили воспроизвести инцидент. Под подозрением серверная проверка адреса: она выполняется одним регулярным выражением, устройство которого давно никто не пересматривал. ## Цель 1. Авторизуйтесь и найдите в профиле проверку email-адреса. 2. Подберите вход, при котором проверка блокирует поток событий сервера на секунды. 3. Добейтесь фиксации инцидента доступности и заберите флаг из отчёта об инцидентах. ## Теория Движок регулярных выражений в V8 относится к типу NFA с перебором откатов: при неудаче он возвращается и пробует другие способы сопоставить уже пройденные символы. Если шаблон неоднозначен — одна и та же буква может быть «съедена» любой из двух вложенных квантифицированных групп, — количество вариантов разбиения растёт экспоненциально с длиной входа. Пока совпадение есть, движок отвечает быстро; но если вход почти подходит под шаблон и лишь в конце содержит символ, ломающий совпадение, движок перебирает все разбиения подряд. В Node.js поток событий один: пока движок считает, сервер не отвечает ни одному клиенту. Это Regular Expression Denial of Service — отказ в обслуживании одним маленьким запросом. **Уязвимый паттерн:** ```js // Проверка адреса регулярным выражением на пользовательском вводе: const valid = EMAIL_RE.test(userInput); ``` Механика словами: проверяющее выражение построено из повторяющихся групп символов, допускающих несколько разбиений одной и той же последовательности. Вход, вызывающий экспоненциальный перебор откатов, выглядит как почти корректный адрес: длинный однородный фрагмент, который шаблон мог бы разобрать многими способами, и замыкающий символ, который делает каждое разбиение неудачным. ## Точка входа атаки `POST /api/profile/email-check` — JSON-эндпоинт проверки адреса: поле `email`; в ответе — признак корректности и время проверки в миллисекундах (поле `duration_ms`). `GET /admin/incident-report` — отчёт о зафиксированных инцидентах доступности: после первой затянувшейся проверки возвращает справочный токен с флагом. * **Тестовая учётная запись:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: ReDoS: catastrophic backtracking в URL-валидаторе профиля Обложка лабы: ReDoS: catastrophic backtracking в URL-валидаторе профиля
ReDoS

ReDoS: catastrophic backtracking в URL-валидаторе профиля

Express SecureShop валидирует адрес персонального сайта пользователя через регулярное выражение с вложенными квантификаторами в последней метке хоста. Тщательно подобранная строка вызывает catastrophic backtracking движка V8: event loop блокируется на секунды, инцидент фиксируется в журнале и admin-эндпоинт выдаёт флаг.

+90 XP
Node.js 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
Обложка лабы: Брутфорс Формы Входа (Нет Rate Limiting) — Node.js Обложка лабы: Брутфорс Формы Входа (Нет Rate Limiting) — Node.js
Auth

Брутфорс Формы Входа (Нет Rate Limiting) — Node.js

Форма входа Express-приложения не ограничивает количество попыток, позволяя подобрать пароль администратора перебором по словарю.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: Timing-атака на форму входа Обложка лабы: Timing-атака на форму входа
Auth

Timing-атака на форму входа

Обработчик входа раскрывает существование пользователей через разницу во времени ответа — bcrypt вызывается только для существующих аккаунтов.

+60 XP
Node.js Pro
Exploit Fix