Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister low-privilege companion-app account
-
DeliveryEnumerate target organization record IDs
-
ExploitSend PATCH/DELETE with global service or template ID
-
ExecutionBackend resolves ID without org filter
-
ImpactCorrupt cross-tenant catalogue, bookings and billing data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | For the state-changing routes (PATCH/DELETE /fhir/v1/service/:id and PUT /v1/task/pms/library/:libraryId, POST /v1/task/pms/templates, PATCH and DELETE /v1/task/pms/templates/:templateId) the only prerequisite is any registered platform account - explicitly the lowest-privilege role, including a patient/companion-app user - because these routes carry authorizeCognito (authentication only) without withOrgPermissions() or requirePermission(...), and the service methods look records up by global ID with no organisationId filter. The GET /fhir/v1/service/:id read sink has no authentication middleware at all, so any service record is readable with no account. These are default code-path routes, so no non-default configuration or feature flag is required. The limiting factors are: write/delete operations require possession of a valid account (trivial where companion-app self-registration is open) and knowledge or enumeration of a target record ID; the affected scope is the main/dev snapshots at the stated commit, and no fixed release is available to upgrade to. |
| Impact | The CVSS 3.1 base score of 8.3 (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H) reflects a network-reachable, low-complexity flaw needing no user interaction and only the lowest authenticated privilege - and the source evidence confirms that 'lowest privilege' includes a self-registrable patient/companion-app account, so the PR:L barrier is close to meaningless in practice. The vuln.today decision label is 'this_week' (not act_now/emergency), and there is no CISA KEV listing and no EPSS score in the input, so there is no signal of active or probable near-term exploitation - this is a severity-driven priority, not an exploitation-driven one. No public exploit identified at time of analysis; the only reference is the GitHub Security Advisory (GHSA-256m-gg99-4274), which documents the vulnerable routes and sink trace in detail but is not exploit code. Working against treating this as urgent: the affected product appears to be a niche open-source veterinary practice-management platform with limited real-world deployment, and no fixed release exists, so the realistic exposure is small even though the technical severity is high. Working for prompt action: exploitation prerequisites are trivial, the advisory and source trace precisely locate the bug (making a PoC easy to build), the impact is cross-tenant integrity and availability on bookings/billing-critical data, and one read sink is fully unauthenticated. EPSS and SSVC exploitation/automatable/technical-impact sub-fields are not provided and cannot be cross-referenced. |
| Exploit ScenarioDerived | An attacker registers an ordinary low-privilege account (e.g. a patient/companion-app login), authenticates, and sends a PATCH or DELETE to /fhir/v1/service/:id or a PUT/POST/PATCH/DELETE to the /v1/task/pms/library and /templates routes using another organization's record ID, which the backend resolves by global ID with no organisationId filter. Because AV:N/AC:L/PR:L/UI:N, this is a single remote authenticated request with no special tooling, letting the attacker alter or delete another tenant's service catalogue and PMS task definitions and thereby disrupt bookings and billing; the GET /fhir/v1/service/:id read sink additionally requires no authentication at all. No public exploit identified at time of analysis, but the GHSA advisory supplies the exact routes and sink trace. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Cross-tenant IDOR and missing function-level authorization in YosemiteCrew allow any registered platform user - down to a self-registrable patient or companion-app account - to modify or delete another organization's FHIR service catalogue and PMS task-library/template definitions, with service records additionally readable with no authentication at all. The exposed routes (PATCH and DELETE on /fhir/v1/service/:id, PUT on /v1/task/pms/library/:libraryId, and the PMS template create, update and delete routes) carry only authorizeCognito, while sibling create routes already enforce withOrgPermissions() and requirePermission(...), and the service layer resolves records by global ID without an organisationId filter. Vendor-released patch: none identified at time of analysis - the issue is confirmed at main/dev commit bc1a1824b1a7eba2bc61176cdb61d9a2a11bce57 with no fix queued, and no public exploit code was identified at time of analysis.
RemediationAI
No vendor-released patch was identified at time of analysis, so operators must remediate in their own fork or deployment. The upstream advisory's fix is to append withOrgPermissions() plus a suitable requirePermission(...) check to the PATCH and DELETE handlers on /fhir/v1/service/:id in apps/backend/src/routers/service.router.ts, add authentication middleware and an organization scope to GET /fhir/v1/service/:id, and apply the equivalent org/role enforcement to the /pms/library and /pms/templates write routes in apps/backend/src/routers/task.router.ts, mirroring the stack already used by the corresponding create routes and by withTaskOrgPermissions() on the canonical /pms task routes. As defence in depth, change the service methods (for example update, delete and getById in apps/backend/src/services/service.service.ts) to require and filter by organisationId instead of resolving records solely by global ID, so a missing route guard cannot by itself expose cross-tenant data. The trade-off to plan for is that adding organization scoping will break any legitimate cross-organization or platform-administrator workflow that currently relies on global record IDs, and adding authentication to the GET route will break unauthenticated consumers such as public booking or intake integrations, so both should be validated against real callers before rollout; because fixing the middleware alone leaves the unscoped queries in place, the route and service-layer changes should ship together.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
YosemiteCrew is a Node/TypeScript backend built around per-route Express-style middleware in apps/backend/src/middlewares/auth.ts. Three middleware primitives implement access control: authorizeCognito, which only validates the Cognito JWT and sets req.userId from the sub claim; withOrgPermissions(), which verifies the caller's membership in the target organization and loads their permissions; and requirePermission(...), which enforces a specific role/permission string. The flaw is the classic CWE-639 authorization-bypass-through-user-controlled-key pattern, mapped additionally to CWE-862 (missing authorization) in the upstream advisory: state-changing routes are wired with authorizeCognito alone, and the downstream service methods (for example service.service.ts update/delete/getById calling ServiceModel.findById(oid)) accept a globally unique record ID with no organisationId predicate, so the tenant boundary is never applied at either layer. The router trace runs from service.router.ts lines 36-37 through service.controller.ts updateService, which forwards only req.params.id, into the service layer, with the delete and getById paths following the same pattern; GET /fhir/v1/service/:id has no authentication middleware whatsoever. The same omission affects the PMS task library and template write routes in task.router.ts, whose canonical task siblings (/pms/:taskId, /pms/from-library, /pms/from-template, /pms/custom) do carry withTaskOrgPermissions() and requirePermission([...]). PR #1530, merged from a branch named security-fix, introduced the RBAC middleware and applied it to the create routes only, which establishes that the gaps on the update, delete, library and template siblings are unintended omissions rather than deliberate design. The trigger is straightforward invocation of the affected route with a target record ID; no race, memory-safety or unusual configuration condition is involved, and the code paths are default.
Know when Yosemite Crew 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
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H
Remote single request (AV:N/AC:L/UI:N) from any registered lowest-privilege account (PR:L); integrity and availability high from cross-tenant modify/delete, confidentiality low via limited record read.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
YosemiteCrew provides organization-based service and task management. In the source-reported affected main and dev snapshots, YosemiteCrew's service and PMS task-library/template routes omit organization and permission checks. authorizeCognito in apps/backend/src/middlewares/auth.ts sets the authenticated user's ID but does not provide the withOrgPermissions() and requirePermission(...) checks used by protected siblings. In apps/backend/src/routers/service.router.ts, PATCH /fhir/v1/service/:id and DELETE /fhir/v1/service/:id are authentication-only, while GET /fhir/v1/service/:id has no authentication middleware. The trace through apps/backend/src/controllers/web/service.controller.ts to apps/backend/src/services/service.service.ts passes a global record ID into ServiceModel.findById(oid) without an organisationId filter. In apps/backend/src/routers/task.router.ts, PUT /v1/task/pms/library/:libraryId, POST /v1/task/pms/templates, PATCH /v1/task/pms/templates/:templateId and DELETE /v1/task/pms/templates/:templateId likewise lack organization/role enforcement. Any registered platform user, including a patient/companion-app account, can modify or delete another organization's service catalogue and PMS task-library/template data, affecting bookings and billing; service records can additionally be read without authentication. An earlier security change protected create routes but left these sibling operations exposed. A fixed release cannot be established from the available evidence.
Technical POC Analysis
CWE-639 (Authorization Bypass Through User-Controlled Key), with CWE-862 (Missing Authorization) on the unauthenticated read.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity authorization flaw in YosemiteCrew's multi-tenant platform lets any registered user-even self-registered patient or companion-app accounts-modify or delete another organization's FHIR service catalogue and PMS task-library/template definitions, while service records can be read without authentication. This undermines tenant isolation, enabling integrity attacks on other organizations' clinical and operational data; leadership should treat it as a cross-customer trust and compliance risk until a vendor patch is available.
Apply temporary gateway-level authorization checks on the affected routes, add organizationId filtering in the service layer, restrict self-registration for lower-privileged account types, enable detailed audit logging, and require additional authentication for service record reads until a vendor patch is available.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-112145
NVD
CVE.org
GitHub
Exploit-DB