Skip to main content

OpenReception Booking EUVDEUVD-2026-54217

| CVE-2026-48080 HIGH
Information Exposure (CWE-200)
2026-08-06 security-advisories@github.com
8.0
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

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

  1. Recon
    Obtain TENANT_ADMIN credentials
  2. Delivery
    Call GET /api/tenants/{id} authenticated
  3. Exploit
    Extract plaintext databaseUrl from response
  4. Install
    Reach postgres:5432 via internal network or SSRF
  5. C2
    Authenticate to PostgreSQL as postgres superuser
  6. Execute
    Query all tenant databases and central user table
  7. Impact
    Escalate via pg_read_server_files or COPY FROM PROGRAM

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK

2 techniques across 2 tactics: Collection, Discovery

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The attacker must hold a valid TENANT_ADMIN authentication token for any tenant on the target instance - this role is assigned during tenant onboarding and may be self-provisioned depending on operator configuration. After obtaining the PostgreSQL connection string from the API response, the attacker must be able to reach the postgres service on port 5432; in default docker-compose.prod.yml deployments, this port is on an internal Docker network and not directly exposed to the internet, meaning the attacker must leverage a secondary path such as SSRF within the application, an RCE vulnerability, or a file-read primitive to forward the connection. Operators who have configured a non-superuser PostgreSQL role via secrets/postgres_user.txt face reduced privilege escalation risk (no pg_read_server_files or COPY FROM PROGRAM) but still expose cross-tenant data access if that user holds grants to multiple tenant databases. The vulnerability is triggered by a standard authenticated GET request with no special headers or payload crafting required.

Impact

The CVSS 8.0 vector (AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H) correctly captures the two-stage nature of the attack: PR:H reflects the requirement for a TENANT_ADMIN account, and AC:H reflects the additional prerequisite of reaching postgres:5432 to monetize the disclosed credential. However, the S:C/C:H/I:H/A:H triplet is fully justified because a single TENANT_ADMIN of one tenant can, once holding the connection string, affect every other tenant's data and the central user table - a severe breach of the application's primary isolation guarantee. The gap between credential disclosure (trivially achieved via authenticated API call) and full impact (requires postgres network reachability) is the main real-world friction. In Kubernetes or docker-compose deployments where postgres is on an internal network not directly reachable from the internet, the attacker must chain a secondary primitive (SSRF, RCE, or file-read in the application) to reach the database - this elevates the practical attack complexity beyond what AC:H alone signals. No EPSS score was provided; no KEV entry exists. Despite the absence of confirmed active exploitation, operators should treat this as urgent: any existing TENANT_ADMIN account - including accounts created by tenants themselves - becomes a pivot point for full cross-tenant compromise.

Exploit ScenarioDerived

An attacker who controls or compromises a TENANT_ADMIN account - for instance, a malicious tenant or a phished admin - calls GET /api/tenants/{their-tenant-id} and parses the databaseUrl field from the JSON response. They then connect to the PostgreSQL instance (directly if on the internal docker network, or via an SSRF endpoint in the application otherwise) using the extracted credentials and execute SELECT queries against all per-tenant databases and the central appointment_booking database, harvesting appointment ciphertexts, key shares, session tokens, and GLOBAL_ADMIN password hashes for offline cracking. No public POC code has been identified at time of analysis, but the attack requires only standard PostgreSQL client tooling.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 06, 2026

Credential exfiltration via the tenant API in OpenReception appointment-booking-software prior to v1.0.2 allows any authenticated TENANT_ADMIN to retrieve the full PostgreSQL connection string - including plaintext password - for the shared database instance. In default docker-compose.prod.yml deployments, those credentials belong to the postgres superuser (rolsuper=true), granting the attacker read-write access to every tenant's database, all GLOBAL_ADMIN password hashes and session records, and superuser-level PostgreSQL functions (pg_read_server_files, COPY FROM PROGRAM) usable for container-level escalation. No public exploit code or CISA KEV entry exists at time of analysis; EPSS data was not provided, but the CVSS S:C scope change and the cross-tenant blast radius make this a high-priority patch target for any operator running the affected version.

RemediationAI

Upgrade to OpenReception appointment-booking-software version 1.0.2, which resolves the issue by replacing the full tenantData object serialization with an explicit field allowlist that excludes databaseUrl. The upstream fix is confirmed at commit ad9e49e3cf66b0cc9a327f6d8a895b23bbd6fea9 (https://github.com/open-reception/appointment-booking-software/commit/ad9e49e3cf66b0cc9a327f6d8a895b23bbd6fea9). After upgrading, operators should rotate the PostgreSQL password in secrets/postgres_password.txt and cycle any session tokens for all TENANT_ADMIN accounts, as disclosed credentials may already have been captured. As a compensating control prior to patching, operators can restrict the TENANT_ADMIN API token scope or place an API gateway rule that strips the databaseUrl field from GET /api/tenants/{id} responses; however, this approach requires careful testing to avoid breaking tenant setup flows. Operators who have not already done so should also configure a non-superuser PostgreSQL role via secrets/postgres_user.txt to limit the privilege level of any future credential exposure, though this does not prevent cross-tenant data access if the user has per-tenant-database grants.

Affected VersionsENISA

appointment-booking-software < 1.0.2

Affected Packages

euvd appointment_booking_software fix: 1.0.2

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

The application is built on SvelteKit (evidenced by the +server.ts route convention at src/routes/api/tenants/[id]/+server.ts) and uses a multi-tenant PostgreSQL architecture where each tenant receives a dedicated database on a shared PostgreSQL instance. The GET /api/tenants/{id} handler previously returned the raw tenantData object, which includes a databaseUrl field containing the live connection URI. In the official docker-compose.prod.yml deployment, this URI embeds the postgres superuser credential sourced from secrets/postgres_password.txt. CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor) is the root cause: the API response serialization did not restrict which database record fields were safe to return to the caller, inadvertently serializing an infrastructure secret alongside application metadata. The fix (commit ad9e49e) replaces the wholesale return of tenantData with an explicit allowlist of eleven safe fields, none of which include databaseUrl.

Know when PostgreSQL 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) PRIMARY 8.0 HIGH
AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 8.0 HIGH

PR:H reflects mandatory TENANT_ADMIN role; AC:H reflects the need to reach postgres:5432 as a second step; S:C captures cross-tenant database impact beyond the calling tenant's scope.

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

2
Patch available
Aug 06, 2026 - 23:03 EUVD
CVE Published
Aug 06, 2026 - 22:17 cve.org
HIGH 8.0

DescriptionCVE.org

OpenReception's appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.2, the GET /api/tenants/{id} endpoint returns the full tenant record to any authenticated TENANT_ADMIN of that tenant, including the databaseUrl field. This field contains the live PostgreSQL connection string the application uses to connect to that tenant's database. In the tested official docker-compose.prod.yml deployment, the connection string contained the user postgres with rolsuper=true and the plaintext password from secrets/postgres_password.txt. Operators who configure a non-superuser PostgreSQL user via secrets/postgres_user.txt would expose a less privileged credential, but the disclosure of the connection string itself is independent of that choice. The same credential applies to every database managed by that PostgreSQL instance: the central appointment_booking database, every per-tenant database (one per tenant), and the postgres administrative database. A TENANT_ADMIN of one tenant who can reach postgres:5432 (directly via internal network, indirectly via any SSRF, RCE, or file-read in the application) can read every other tenant's appointment ciphertexts, key shares, and metadata; read the central user table, including all GLOBAL_ADMIN accounts, password hashes, and session records; modify or delete any data in any tenant database; and/or i a superuser-scoped deployment: use PostgreSQL's pg_read_server_files, COPY ... FROM PROGRAM, and CREATE EXTENSION for further escalation inside the database container. This breaks the per-tenant database isolation that is otherwise the primary cross-tenant control in the application. The application code carefully scopes most queries to the calling tenant's database, but those scopings are irrelevant once the attacker holds the credentials that bypass the application entirely. Version 1.0.2 fixes the issue.

Executive ViewAI

Why It Matters

OpenReception's appointment-booking-software versions prior to v1.0.2 contains a vulnerability enabling any tenant administrator to access the database superuser password, creating an immediate risk of complete data exposure across your entire multi-tenant customer base. This vulnerability converts a low-privilege insider (tenant admin) into a database superuser with read-write access to all customer data, billing systems, and user credentials. Remediation requires urgent action on all deployed instances to prevent potential breach notification obligations and customer churn.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Implement strict API gateway rules blocking the credential endpoint from TENANT_ADMIN requests; (2) immediately rotate PostgreSQL superuser credentials to a secure value not stored in shared connection strings; (3) enforce principle-of-least-privilege by configuring API service accounts with read-only database roles; (4) enable comprehensive audit logging on all tenant-admin API calls and database authentication attempts; (5) evaluate architectural separation into per-tenant database instances if operationally feasible. These controls reduce exposure but do not eliminate the vulnerability and are temporary until v1.0.2 deployment.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Rare
niche open-source appointment booking platform, limited enterprise footprint
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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 Yes
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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

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

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2025-1094 HIGH POC
8.1 Feb 13

PostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl

CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2013-1899 MEDIUM POC
6.5 Apr 04

Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re

CVE-2026-20253 CRITICAL POC
9.8 Jun 10

Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.

CVE-2026-9586 CRITICAL POC
9.3 Jul 17

Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar

CVE-2017-7546 CRITICAL
9.8 Aug 16

PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow

CVE-2015-1352 MEDIUM POC
5.0 Mar 30

The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t

CVE-2024-10553 CRITICAL POC
9.8 Mar 20

A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra

CVE-2019-9193 HIGH POC
7.2 Apr 01

In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve

CVE-2026-40887 CRITICAL POC
9.1 Apr 14

Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the

CVE-2022-24760 CRITICAL POC
10.0 Mar 12

Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot

CVE-2025-56157 CRITICAL POC
9.8 Dec 18

Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al

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