Description
OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. The new-client booking flow in versions 1.0.1 and prior consists of three calls: `bootstrap-challenge` (returns a 16-bit PoW challenge with `difficulty=4` leading hex zeroes), `bootstrap-verify` (validates the PoW and issues a Bearer booking access token), and `create-new-client` (consumes the token and creates the tunnel and first appointment). The token correctly binds to `tenantId`, `tunnelId`, `clientPublicKey`, and `emailHash`, but never to `channelId`. The `bootstrap-challenge` request schema does not even accept a `channelId`, and the issued token's payload contains no channel information. Independently, the service function `createNewClientWithAppointment` checks only `channel.archived = false`. The `channel.isPublic` check that protects `addAppointmentToTunnel` is missing in the new-client path. The combination means: an attacker completes the bootstrap flow normally (16-bit PoW, completes in well under one second on commodity hardware, no rate limiting beyond the throttle store), receives a valid booking access token, and then submits the `create-new-client` payload with `channelId` pointing to a private (`isPublic = false`) channel. The booking lands as `CONFIRMED` if the target channel has `requiresConfirmation = false` (the default), otherwise as `NEW`. The patient-facing UI does not list private channels in its picker (`/api/public/channels` correctly filters `isPublic = true`), so the channel ID must be obtained out of band. The companion finding V-10 (schedule endpoint discloses private channels) provides exactly that: a single unauthenticated GET reveals every private channel ID for any tenant. V-10 plus V-11 together make private channels fully reachable to anonymous attackers. As of time of publication, no known patched versions are available.
Published: 2026-08-06
Score: 6.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The flaw in OpenReception’s bootstrap booking flow permits an attacker to perform a minimal Proof‑of‑Work challenge, obtain a bearer token, and then use that token to schedule appointments in private channels (isPublic = false) without any authentication. The token is not bound to channel identifiers, and the service fails to enforce a check for channel.isPublic during the new‑client path, allowing the creation of confirmed or new appointments on channels that should be inaccessible. This results in unauthorized, often unconfirmed appointments that compromise patient privacy and can overwhelm channel resources.

Affected Systems

Affected systems include OpenReception appointment booking software, versions 1.0.1 and earlier. The vulnerability resides in the bootstrap‑challenge, bootstrap‑verify, and create‑new‑client sequence and is enabled by the absence of a channel.isPublic guard. No patched versions are available as of publication; all installations that have not upgraded from these versions remain vulnerable.

Risk and Exploitability

The CVSS score of 6.5 denotes moderate severity. Exploitation is trivial: a 16‑bit Proof‑of‑Work challenge is solved in less than one second on commodity hardware, the service does not rate‑limit beyond a generic throttle store, and any private channel identifier can be supplied to the create‑new‑client endpoint. The vulnerability is not listed in CISA KEV catalog. An attacker can gain immediate access to private channels and schedule unauthorized appointments, potentially disrupting availability and compromising confidential information.

Generated by OpenCVE AI on August 7, 2026 at 00:46 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Disable all private channels or set requiresConfirmation = true for them so that bookings must be manually approved
  • Restrict the create‑new‑client endpoint to authenticated requests only, e.g., by adding API key or OAuth checks at the gateway level
  • Implement monitoring and alerts for unexpected appointment creation events on private channels and review logs for suspicious activity
  • Coordinate with the OpenReception vendor to release a patch that enforces the channel.isPublic check in the bootstrap flow

Generated by OpenCVE AI on August 7, 2026 at 00:46 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 07 Aug 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 07 Aug 2026 10:30:00 +0000

Type Values Removed Values Added
First Time appeared Open-reception
Open-reception appointment-booking-software
Vendors & Products Open-reception
Open-reception appointment-booking-software

Thu, 06 Aug 2026 22:15:00 +0000

Type Values Removed Values Added
Description OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. The new-client booking flow in versions 1.0.1 and prior consists of three calls: `bootstrap-challenge` (returns a 16-bit PoW challenge with `difficulty=4` leading hex zeroes), `bootstrap-verify` (validates the PoW and issues a Bearer booking access token), and `create-new-client` (consumes the token and creates the tunnel and first appointment). The token correctly binds to `tenantId`, `tunnelId`, `clientPublicKey`, and `emailHash`, but never to `channelId`. The `bootstrap-challenge` request schema does not even accept a `channelId`, and the issued token's payload contains no channel information. Independently, the service function `createNewClientWithAppointment` checks only `channel.archived = false`. The `channel.isPublic` check that protects `addAppointmentToTunnel` is missing in the new-client path. The combination means: an attacker completes the bootstrap flow normally (16-bit PoW, completes in well under one second on commodity hardware, no rate limiting beyond the throttle store), receives a valid booking access token, and then submits the `create-new-client` payload with `channelId` pointing to a private (`isPublic = false`) channel. The booking lands as `CONFIRMED` if the target channel has `requiresConfirmation = false` (the default), otherwise as `NEW`. The patient-facing UI does not list private channels in its picker (`/api/public/channels` correctly filters `isPublic = true`), so the channel ID must be obtained out of band. The companion finding V-10 (schedule endpoint discloses private channels) provides exactly that: a single unauthenticated GET reveals every private channel ID for any tenant. V-10 plus V-11 together make private channels fully reachable to anonymous attackers. As of time of publication, no known patched versions are available.
Title OpenReception's bootstrap booking flow allows unauthenticated booking on isPublic=false channels
Weaknesses CWE-863
References
Metrics cvssV3_1

{'score': 6.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L'}


Subscriptions

Open-reception Appointment-booking-software
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-07T14:34:21.718Z

Reserved: 2026-05-20T18:25:25.708Z

Link: CVE-2026-48076

cve-icon Vulnrichment

Updated: 2026-08-07T14:33:57.883Z

cve-icon NVD

Status : Received

Published: 2026-08-06T22:17:10.127

Modified: 2026-08-07T15:17:00.447

Link: CVE-2026-48076

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-07T09:59:03Z

Weaknesses