---
id: CVE-2026-48082
title: >-
  OpenReception's appointment booking software provides an end-to-end encrypted
  appointment booking platform
summary: >-
  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…
severity: low
cvss: 3.7
cvssVector: 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L'
cwe:
  - CWE-770
published: '2026-08-06'
updated: '2026-09-08'
sourceUpdated: '2026-09-08T20:51:43.490'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-48082'
references:
  - url: >-
      https://github.com/open-reception/appointment-booking-software/commit/e9c96c049ebf558df7a9e4c5c93f6fe2b092c8c6
    label: security-advisories@github.com
  - url: >-
      https://github.com/open-reception/appointment-booking-software/security/advisories/GHSA-hm9g-mh7x-657g
    label: security-advisories@github.com
  - url: >-
      https://github.com/open-reception/appointment-booking-software/security/advisories/GHSA-hm9g-mh7x-657g
    label: 134c704f-9b21-4f2e-91b3-4a467353bcc0
tags:
  - nvd
epss: 0.00386
epssPercentile: 0.2987
ingestedAt: '2026-09-08T21:11:12.270Z'
---

## Overview

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.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
