Программное обеспечение OpenReception для записи на прием предоставляет платформу для записи на прием со сквозным шифрованием. До версии 1.0.2, когда пользователь переходит на страницу `/logout`, обработчик загрузки на стороне сервера удаляет файл cookie `access_token` перед вызовом `/api/auth/logout` через внутренний `event.fetch()`. Следовательно, внутренняя выборка выполняется без файла cookie аутентификации, поэтому apiAuthHandle отклоняет ее, обработчик выхода из системы никогда не выполняется, а SessionService.revokeSession() никогда не вызывается для текущего сеанса.
Строка сеанса БД остается действительной до истечения ее естественного срока действия (по умолчанию одна неделя). Пользователь видит успешный выход из системы (файл cookie удален, пользовательский интерфейс возвращается к входу в систему), но любая сторона, все еще хранящая копию теперь удаленного токена доступа, может продолжать выполнять аутентифицированные вызовы API до тех пор, пока сеанс естественным образом не истечет. Основная причина — простая ошибка заказа.
Та же самая подсистема аутентификации реализует правильный порядок в `/api/auth/logout`: сначала отмените текущий сеанс БД, затем удалите файл cookie. Обертка уровня страницы делает обратное. Версия 1.0.2 инициирует выход из системы на стороне сервера перед удалением файлов cookie аутентификации и впервые появляется в версии 1.0.2.
В более поздней версии 2.0.0 это заменено потоком выхода из системы на стороне клиента без гонок.
Показать оригинальное описание (EN)
OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.2, when a user navigates to the `/logout` page, the page's server-side load handler deletes the `access_token` cookie before calling `/api/auth/logout` via an internal `event.fetch()`. The internal fetch consequently runs without the auth cookie, so `apiAuthHandle` rejects it, the logout handler never executes, and `SessionService.revokeSession()` is never called for the current session. The DB session row remains valid until its natural expiry (one week by default). The user sees a successful logout (cookie gone, UI returns to login), but any party still holding a copy of the now-deleted access token can continue making authenticated API calls until the session naturally expires. The root cause is a simple ordering mistake. The same auth subsystem implements the correct order in `/api/auth/logout`: revoke the current DB session first, then delete the cookie. The page-level wrapper does the opposite. Version 1.0.2 initiates server-side logout before removing authentication cookies and first appears in version 1.0.2. Version 2.0.0 later replaces this with a race-free client-side logout flow.
Характеристики атаки
Последствия
Строка CVSS v3.1