CVE-2026-48074

OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.6, when a TENANT_ADMIN deletes an existing staff user, the underlying `StaffService.deleteStaffMember()` runs an additional invite cleanup that deletes from the central `user_invite` table by email. The `email` clause has no `tenantId` predicate. Any pending invite in any tenant that shares the deleted staff's email is removed. A TENANT_ADMIN of tenant A who deletes a staff record with email `victim[@]example[.]com` also deletes the pending invite for `victim[@]example[.]com` in tenant B, even though they have no relationship to tenant B. The user-side delete is correctly scoped (`eq(user.id, staffId), eq(user.tenantId, tenantId)`), and the pending-invite-only delete path (when `staffId` is itself an invite ID) is also tenant-scoped. The bug is specifically in the invite cleanup that runs as a side effect of deleting an existing staff user. Version 1.0.6 patches the issue.
Configurations

No configuration.

History

23 Oct 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) El software de reserva de citas de OpenReception proporciona una plataforma de reserva de citas cifrada de extremo a extremo. Antes de la versión 1.0.6, cuando un TENANT_ADMIN elimina un usuario de personal existente, el subyacente ’StaffService.deleteStaffMember()’ ejecuta una limpieza adicional de invitaciones que elimina de la tabla central ’user_invite’ por correo electrónico. La cláusula ’email’ no tiene un predicado ’tenantId’. Cualquier invitación pendiente en cualquier inquilino que comparta el correo electrónico del personal eliminado es eliminada. Un TENANT_ADMIN del inquilino A que elimina un registro de personal con el correo electrónico ’victim[@]example[.]com’ también elimina la invitación pendiente para ’victim[@]example[.]com’ en el inquilino B, aunque no tengan ninguna relación con el inquilino B. La eliminación del lado del usuario está correctamente delimitada (’eq(user.id, staffId), eq(user.tenantId, tenantId)’), y la ruta de eliminación solo para invitaciones pendientes (cuando ’staffId’ es en sí mismo un ID de invitación) también está delimitada por inquilino. El error está específicamente en la limpieza de invitaciones que se ejecuta como un efecto secundario de la eliminación de un usuario de personal existente. La versión 1.0.6 corrige el problema.

Information

Published : 2026-08-06 22:17

Updated : 2026-10-23 21:10


NVD link : CVE-2026-48074

Mitre link : CVE-2026-48074

CVE.ORG link : CVE-2026-48074


JSON object : View

Products Affected

No product.

CWE
CWE-863

Incorrect Authorization