CVE-2026-48087
Full vulnerability record from the local CVENow database.
Description
OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.2, the registration handler at `POST /api/auth/register/{userId}` validates the relationship between the WebAuthn challenge and the registration cookie's email but never validates that the `userId` in the URL belongs to that email. An unauthenticated attacker requests a challenge for their own email, generates a registration response with their own authenticator, and submits it against any victim user's URL. The challenge-vs-cookie email match passes, the WebAuthn ceremony validates, and `addPasskey` writes the attacker's credential into the victim's `user_passkey` rows. The next victim-email login accepts a passkey assertion from the attacker's authenticator and issues a session as the victim. User IDs are not strictly secret on this platform, but the exact set of exposure surfaces should be assessed by the maintainers. Staff-list endpoints return user IDs to authenticated tenant members per the route signature; live verification of all exposure surfaces (whether user IDs leak through any unauthenticated route, through invite-confirmation URLs, or through other administrative views) is part of the pending live PoC. Where the attacker knows the victim's email and userId, the analysis below becomes account takeover. Version 1.0.2 fixes the issue.
View original CVE JSON
{
"id": "CVE-2026-48087",
"sourceIdentifier": "[email protected]",
"published": "2026-08-06T22:17:11.750",
"lastModified": "2026-10-23T21:10:00.157",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.2, the registration handler at `POST /api/auth/register/{userId}` validates the relationship between the WebAuthn challenge and the registration cookie's email but never validates that the `userId` in the URL belongs to that email. An unauthenticated attacker requests a challenge for their own email, generates a registration response with their own authenticator, and submits it against any victim user's URL. The challenge-vs-cookie email match passes, the WebAuthn ceremony validates, and `addPasskey` writes the attacker's credential into the victim's `user_passkey` rows. The next victim-email login accepts a passkey assertion from the attacker's authenticator and issues a session as the victim. User IDs are not strictly secret on this platform, but the exact set of exposure surfaces should be assessed by the maintainers. Staff-list endpoints return user IDs to authenticated tenant members per the route signature; live verification of all exposure surfaces (whether user IDs leak through any unauthenticated route, through invite-confirmation URLs, or through other administrative views) is part of the pending live PoC. Where the attacker knows the victim's email and userId, the analysis below becomes account takeover. Version 1.0.2 fixes the issue."
},
{
"lang": "es",
"value": "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.2, el gestor de registro en “POST /api/auth/register/{userId}” valida la relación entre el desafío WebAuthn y el correo electrónico de la cookie de registro, pero nunca valida que el “userId” en la URL pertenezca a ese correo electrónico. Un atacante no autenticado solicita un desafío para su propio correo electrónico, genera una respuesta de registro con su propio autenticador y lo envía contra la URL de cualquier usuario víctima. La coincidencia de correo electrónico entre el desafío y la cookie pasa, la ceremonia WebAuthn se valida y “addPasskey” escribe la credencial del atacante en las filas “user_passkey” de la víctima. El siguiente inicio de sesión con el correo electrónico de la víctima acepta una aserción de clave de acceso del autenticador del atacante y emite una sesión como la víctima. Los ID de usuario no son estrictamente secretos en esta plataforma, pero el conjunto exacto de superficies de exposición debe ser evaluado por los mantenedores. Los endpoints de lista de personal devuelven ID de usuario a los miembros de inquilinos autenticados según la firma de la ruta; la verificación en vivo de todas las superficies de exposición (ya sea que los ID de usuario se filtren a través de cualquier ruta no autenticada, a través de URL de confirmación de invitación o a través de otras vistas administrativas) es parte de la PoC en vivo pendiente. Cuando el atacante conoce el correo electrónico y el userId de la víctima, el análisis a continuación se convierte en una toma de control de cuenta. La versión 1.0.2 corrige el problema."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "open-reception",
"product": "appointment-booking-software",
"versions": [
{
"version": "< 1.0.2",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 3.9,
"impactScore": 5.9
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-08-07T14:53:40.729550Z",
"id": "CVE-2026-48087",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-287"
}
]
}
],
"references": [
{
"url": "https://github.com/open-reception/appointment-booking-software/commit/5f61a2116d68378366edd712c343a9de7b205a74",
"source": "[email protected]"
},
{
"url": "https://github.com/open-reception/appointment-booking-software/security/advisories/GHSA-j9rw-x2wv-h5rj",
"source": "[email protected]"
}
]
}