Программное обеспечение OpenReception для записи на прием предоставляет платформу для записи на прием со сквозным шифрованием. До версии 1.0.6 конечная точка начальной загрузки по адресу `/api/tenants/{id}/appointments/bootstrap-challenge` выдает подтверждение работы SHA-256 с шестнадцатеричными нулями `difficulty=4`, что эквивалентно 16 битам работы. Современное оборудование решает эту проблему менее чем за 200 миллисекунд, практически не создавая проблем с автоматизированным злоупотреблением потоком записи пациентов.
Доказательство работы используется в процессе бронирования в качестве ограничителя скорости для неаутентифицированных клиентов, устанавливающих туннели и отправляющих встречи. При сложности 16 бит конструкция носит скорее декоративный, чем эффективный характер. Злоумышленник может решить проблемы PoW так же быстро, как сервер может их выдать, что противоречит цели ограничения скорости.
Обработчик также вызывает `challengeThrottleService.checkThrottle(binding, "passkey")`, но привязка включает в себя значения, контролируемые злоумышленником (`tunnelId`, `clientPublicKey` и необязательный `emailHash`). Для каждой новой попытки злоумышленник может предоставлять новые значения, создавая новый ключ дросселирования и обходя накопление для каждой привязки. Таким образом, практическое препятствие злоупотреблениям — это сама сложность PoW, а не стабильное регулирование на стороне сервера для каждого IP или электронной почты.
Версия 1.0.6 устраняет проблему.
Показать оригинальное описание (EN)
OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.6, the bootstrap challenge endpoint at `/api/tenants/{id}/appointments/bootstrap-challenge` issues a SHA-256 proof-of-work with `difficulty=4` hex zeros, equivalent to 16 bits of work. Modern hardware solves this in under 200 milliseconds, providing essentially no friction against automated abuse of the patient booking flow. Proof-of-work is used in the booking flow as a rate-limiter for unauthenticated clients establishing tunnels and submitting appointments. At 16 bits of difficulty, the construct is decorative rather than effective. An attacker can solve PoW challenges as fast as the server can issue them, defeating the rate-limiting purpose. The handler also calls `challengeThrottleService.checkThrottle(binding, "passkey")`, but the binding includes attacker-controlled values (`tunnelId`, `clientPublicKey`, and optional `emailHash`). For each fresh attempt, the attacker can supply new values, producing a new throttle key and bypassing the per-binding accumulation. Practical abuse friction is therefore the PoW difficulty itself, not a stable per-IP or per-email server-side throttle. Version 1.0.6 fixes the issue.
Характеристики атаки
Последствия
Строка CVSS v3.1