Rostelecom Security Labs

SecureCode Review — Webhook Signature ReDoS

Webhook проверяет подпись через @Pattern с вложенными квантификаторами и не ограничивает длину заголовка. Найди строку и предложи замену на безопасную валидацию.

📚 Теория: Webhook + Regex DoS (раскрыть)

Сигнатура через регексп

Выражение ^([A-Fa-f0-9]+:)+[A-Fa-f0-9]+$ содержит вложенные квантификаторы. Длинная подпись заставляет JVM перебирать варианты.

⚠️ ReDoS на уровне заголовков, блокировка Netty/Servlet потока.

Лучшие практики

Используй HexFormat или DatatypeConverter.parseHexBinary, добавь @Size(max=64), pre-check длины, лимит на заголовки и rate limit.

🔐 Подписи лучше проверять детерминированно, без backtracking.

1. Webhook

Интеграция шлёт заголовок из 200k символов `AA:`.

2. Валидация

Регексп на бэктрекинге зависает и блокирует обработку.

3. SLA

Платёжные вебхуки не доходят, RTO срывается.

Как надо: ограничь длину заголовков, используй `HexFormat.of().parseHex`, rate limit, circuit breaker и тесты с ReDoS-строками.

Контекст

Партнёрский шлюз требует подпись `sha256:nonce`. Разработчик сделал простой регексп, но не ограничил длину и не добавил таймаут. Результат — ReDoS при длинном заголовке.

Сниппет

Загружаем сниппет…

Code Review

Проверка флага

После ревью зафиксируй флаг, чтобы дашборд засчитал лабораторию.