{"id":5067,"date":"2026-09-04T18:46:58","date_gmt":"2026-09-04T10:46:58","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-48088"},"modified":"2026-09-04T18:46:58","modified_gmt":"2026-09-04T10:46:58","slug":"cve-2026-48088","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-48088","title":{"rendered":"CVE-2026-48088 [CRITICAL] &#8211; OpenReception&#8217;s appointment booking software provides an end-to-end encrypted appointment"},"content":{"rendered":"<p>OpenReception&#8217;s appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.4, the route `POST \/api\/tenants\/{tenantId}\/staff\/{staffId}\/crypto` accepts and stores attacker-controlled ML-KEM-768 public keys against any tenant on the platform without authentication. The handler logs an &#8220;Unauthorized crypto key storage attempt&#8221; warning when neither a session nor a registration cookie is present, then proceeds to insert the row regardless. The platform&#8217;s E2E claim that &#8220;even administrators cannot view sensitive information&#8221; is broken: any unauthenticated network attacker can register themselves as an additional encryption recipient for any tenant&#8217;s future patient appointments. A second variant of the bug suppresses the unauthorized-warning log entry. The Zod schema makes the `email` field optional. When the request body omits `email` and the request carries no registration cookie, the comparison `registrationEmail === email` becomes `undefined === undefined`, which evaluates to `true`. The handler treats the request as a legitimate registration flow, skips the warning entirely, and stores the row. Successful storage is still recorded as an `[info]` log line, but the security-relevant warning that operators are most likely to monitor or alert on is gone. The `staff_crypto` table has no unique constraint on `user_id`, so an arbitrary number of attacker rows can coexist for the same staff identifier and all return as `is_active=true`. The supplied `staffId` does not need to match any existing user or pending invite. Schema validation on `passkeyId`, `publicKey`, and `privateKeyShare` is also weak: the literal string &#8220; was accepted, indicating no length, format, or cryptographic-validity check beyond field presence. This weakness is independent of the auth bypass but compounds it: a poisoned directory can also be filled with malformed entries that break legitimate booking flows. The injected key is consumed by the public booking flow. After completing the unauthenticated `bootstrap-challenge` and `bootstrap-verify` ceremony as a &#8220;patient&#8221;, the resulting `bookingAccessToken` is accepted by `GET \/api\/tenants\/{id}\/appointments\/staff-public-keys`, which returns the attacker-controlled keys alongside any legitimate ones. A new appointment encrypts its tunnel key with ML-KEM to all listed recipients, so the attacker becomes a co-recipient of the encryption and can decapsulate the tunnel key with the matching secret. From there, all appointment payloads for that booking are decryptable. Version 1.0.4 patches the issue.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenReception&#8217;s appointment booking software provides an end-to-end encrypted appointment booking platform. Prior to version 1.0.4, the route `POST \/api\/tenants\/{tenantId}\/staff\/{staffId}\/crypto` acce<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-5067","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/5067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}