Race Condition: Гонка при активации промокода в Express
Эндпоинт активации промокода в Express + better-sqlite3 содержит TOCTOU между проверкой счётчика и обновлением баланса. Получи бонус несколько раз параллельными запросами, накопи баланс и открой VIP-функцию с флагом.
hardnodejsPro
Задача
# Гонка за промокодом
## Сценарий
SecureShop использует систему промокодов: при активации действующего кода баланс пользователя пополняется. По задумке каждый промокод должен использоваться только один раз на одного пользователя — но в реализации есть уязвимость класса **Race Condition**.
Изучите обработчик активации промокода и определите, при каких условиях ограничение «один раз» можно обойти.
## Цели
1. Войдите в систему как `demo` / `demo` (начальный баланс: $500).
2. Найдите способ многократно активировать один и тот же промокод от лица одного пользователя.
3. Накопите достаточно средств для покупки товара **CTF Flag** ($9999).
4. Оформите заказ — флаг появится на странице профиля.
## Данные
| Параметр | Значение |
|----------|----------|
| Пользователь | `demo` / `demo` |
| Промокоды | `PROMO50` ($50), `PROMO100` ($100), `PROMO200` ($200) |