Skip to main content

OpenReception Appointment Booking CVE-2026-65825

| EUVDEUVD-2026-109156 HIGH
Improper Restriction of Excessive Authentication Attempts (CWE-307)
2026-10-23 GitHub_M
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Self-register client in a second tenant
  2. Delivery
    Seed throttle row for victim's emailHash
  3. Exploit
    Brute-force six-digit PIN unthrottled in victim tenant
  4. Execution
    Recover booking access token
  5. Impact
    Access and alter client's encrypted appointment tunnel

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
Exploitation Conditions

Requires a multi-tenant OpenReception instance (at least two tenants sharing the central challenge_throttle table). The attacker must be able to self-register a client in a second tenant - which the advisory states is unauthenticated self-service - and trigger a failed PIN attempt there so that tenant owns the throttle row keyed on the tenant-independent emailHash (sha256(email)). The attacker must therefore know the victim's email address, and the victim must be a returning client who authenticates with a six-digit booking PIN in the target tenant. Exploitation is limited by high attack complexity: the cross-tenant throttle-ownership setup, the need to know the victim email, and the sustained online brute force of the 10^6 PIN space (hours to a few days on one IP; faster by rotating the unvalidated x-forwarded-for header to neutralize the generic 20-req/2s IP limiter). It does not require authentication (PR:N) or user interaction, and no vendor patch exists, so the main realistic limiters are the email prerequisite, the multi-tenant deployment requirement, and the brute-force time rather than any auth gate.

Impact

Signals point to a real but conditional priority rather than a drop-everything emergency. CVSS is 7.5 (High) with AV:N/PR:N/UI:N, i.e. network-reachable and unauthenticated, which looks urgent, but AC:H materially tempers it: the attacker must first make a second tenant own the victim's throttle row, must already know the victim's email to compute the emailHash, and must then grind a 10^6 PIN space over 'hours to a few days' on a single IP. EPSS is not present in the input, so exploitation-probability cannot be quoted. The vuln.today decision label is 'this_week' (not act_now/emergency), consistent with a serious issue that still requires meaningful setup. There is no CISA KEV listing and no indication of active exploitation, so this is not confirmed exploited in the wild; however, the maintainer's GHSA advisory includes a detailed proof-of-concept with reproduction steps and measured results (about 79 guesses/sec locally), so a public PoC reference exists even though it is not verified as standalone working exploit code. A notable aggravating factor is that there is no patch available at publication, so defenders cannot remediate by upgrading. Net: treat as a prioritized fix this week for multi-tenant OpenReception deployments, weighting the lack of a patch and the unauthenticated cross-tenant nature against the high attack complexity and the email/multi-tenant prerequisites. Also note the scoring is debated in the advisory itself - a single-component reading would be S:U/6.5; the S:C/7.5 rests on the cross-tenant boundary crossing.

Exploit ScenarioDerived

An attacker who knows a victim's email self-registers as a client in a second tenant on the same OpenReception instance and triggers a failed PIN attempt there, making that tenant permanently own the shared throttle row for the victim's emailHash. With the brute-force throttle now inert in the victim's tenant (and the IP rate limiter trivially evaded by rotating x-forwarded-for), the attacker brute-forces the six-digit PIN online over hours to days, recovering the booking access token to read the client's end-to-end-encrypted appointment tunnel and add or cancel their appointments. A maintainer-published PoC reference describing these exact steps exists, though it is not verified as working standalone exploit code.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 23, 2026

OpenReception appointment booking software 2.1.0 and earlier lets remote attackers brute-force a returning client's six-digit booking PIN inside a targeted tenant, because the PIN throttle record is keyed on a tenant-independent email hash and its tenant_id is fixed by whichever tenant first logged a failure, so the victim tenant's challenge check never matches the row and never returns 429. A successful guess yields the client's booking access token, exposing their end-to-end-encrypted appointment tunnel and allowing appointments to be added or cancelled as that client. No vendor patch is available at time of analysis, and the published advisory includes step-by-step reproduction detail plus measurements of roughly 79 guess round-trips per second locally; the generic 20-requests-per-2-seconds IP limiter can be sidestepped by rotating the unvalidated x-forwarded-for header.

RemediationAI

No vendor-released patch was identified at time of analysis; the advisory instead specifies the code fix, which is to key the throttle consistently for both read and write - either make the record identity composite as (id, tenant_id) for both the onConflictDoUpdate target and the checkThrottle filter so one tenant cannot touch another tenant's throttle state, or throttle purely by identifier by dropping the tenant filter from the read so the same identifier is throttled everywhere. It separately requires that the rate limiter stop deriving the client IP from unvalidated x-forwarded-for and use the platform's trusted client address or a trusted-proxy allowlist, and suggests raising PIN entropy or requiring a second factor for returning-client authentication. Until those changes ship, the practically actionable control is to restrict or disable returning-client PIN login on multi-tenant instances (forcing another authentication path), accepting the loss of the low-friction returning-client flow, and to front the deployment with a proxy that overwrites x-forwarded-for so the 20-request/2-second limiter cannot be evaded by header rotation, though even intact that limiter permits guesses far above the throttle's one-per-hour and is not a substitute for the fix. Operators should also watch for repeated non-429 challenge/verify-challenge responses, 404s from the tunnel lookup and rising failed_attempts on other tenants' throttle rows as indicators of this brute-force pattern.

Affected VersionsENISA

appointment-booking-software ≤ 2.1.0

Affected Packages

euvd appointment_booking_software no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Root cause is CWE-307 (improper restriction of excessive authentication attempts) arising from inconsistent scoping of the central challenge_throttle table in src/lib/server/db/central-schema.ts, where id is the sole primary key and tenant_id was added later as a plain column. For PIN challenges the id is the emailHash (sha256 of the email), which is tenant-independent, so the same identifier is shared across all tenants. recordFailedAttempt inserts with the caller's tenantId but on conflict performs an update targeting challengeThrottle.id that sets only failed_attempts and last_attempt_at, never tenant_id, permanently fixing row ownership to the first tenant that recorded a failure; checkThrottle, by contrast, reads with both id and tenant_id predicates, so a row owned by tenant A is invisible to tenant B, which then receives allowed: true and is never throttled. Tenant B's own failures conflict on the shared id and increment tenant A's counters, so B never creates a row of its own and remains unthrottled indefinitely. The underlying secret is weak by design: the PIN is constrained to /^\d{6}$/ in both src/routes/(pages)/(clients)/clients/login/schema.ts and the book-appointment auth schema, giving a 10^6 space minus a small blocklist, which the intact throttle makes infeasible via an escalating delay of one minute at four failures rising to sixty minutes at seven or more and a reset after one hour of inactivity. The separate rateLimitHandle limiter (20 requests per 2000 ms per client IP) does not compensate, since the client IP is taken from unvalidated x-forwarded-for / x-real-ip, and even unevaded it permits a few guesses per second. The CVSS vector's AC:H reflects the multi-tenant setup and sustained brute-force requirement, and S:C reflects the cross-tenant removal of another tenant's authentication protection; per the advisory a stricter single-component reading would score S:U at 6.5.

Know when Appointment Booking Software gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:L/A:N
vuln.today AI 7.5 HIGH

AC:H because attacker must own the cross-tenant throttle row, know the victim's email, and brute-force 10^6 PINs over hours; PR:N via self-service registration; S:C cross-tenant.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
Low
Availability
None

DescriptionCVE.org

OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. In versions 2.1.0 and prior, a returning client's six-digit booking PIN can be brute-forced online in the victim tenant. A successful guess yields the client's booking access token, granting access to that client's appointment tunnel, which holds their end-to-end-encrypted appointment data, and the ability to act as the client, for example adding or cancelling appointments in the tunnel. The bypass is cross-tenant: state owned by one tenant removes an authentication protection of a different tenant. This crossing of the tenant boundary is the basis for the scope-changed vector. At time of publication, there are no publicly available patches.

Technical POC Analysis

CWE-307 (Improper Restriction of Excessive Authentication Attempts), implemented as a tenant-scoping mismatch between the write and read paths of a rate-limit record.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

OpenReception appointment booking software (versions 2.1.0 and earlier) contains a multi-tenant PIN brute-force flaw that allows an attacker to take over a returning client's booking session within a targeted tenant. Because the PIN throttling record is incorrectly scoped, the victim tenant's rate limiting never triggers, enabling rapid guessing of a six-digit PIN and exposure of the client's end-to-end-encrypted appointment tunnel. Leadership should care because this undermines the confidentiality and integrity of client appointments, potentially affecting any tenant using the platform and eroding trust in the service's security posture.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include: disable or sanitize the x-forwarded-for header to prevent IP rotation; enforce tenant-scoped PIN attempt rate limiting via WAF or application-layer controls; monitor and alert on high-volume PIN failures per tenant/client; consider temporarily disabling PIN-based access for returning clients if feasible.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
Low
niche open-source e2e appointment booking platform, limited production footprint
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy