CVE-2026-47697 Overview
CVE-2026-47697 is a cross-tenant Insecure Direct Object Reference (IDOR) vulnerability in Shelf, a multi-tenant platform for tracking physical assets. Several endpoints accepted entity IDs from request input and performed connect, read, or update operations without verifying the IDs belonged to the caller's organization. An authenticated user in one organization who knew or obtained an ID belonging to another organization could act on that data across workspace boundaries. A loader-only restriction on personal-workspace bookings was also bypassable through a crafted POST request. The issue is patched in version 1.20.2.
Critical Impact
Authenticated tenants can read and modify data belonging to other organizations, breaking the workspace isolation model that underpins Shelf's multi-tenant architecture.
Affected Products
- Shelf (shelf.nu) versions prior to 1.20.2
- Multi-tenant Shelf deployments with more than one organization
- Shelf instances exposing booking and asset-management endpoints to authenticated users
Discovery Timeline
- 2026-07-21 - CVE-2026-47697 published to NVD
- 2026-07-23 - Last updated in NVD database
Technical Details for CVE-2026-47697
Vulnerability Analysis
The flaw is classified under [CWE-863] Incorrect Authorization. Shelf isolates data per organization (workspace), but several API endpoints trusted entity identifiers supplied in request bodies without validating that the referenced records belonged to the caller's active organization. When an endpoint invoked Prisma-style connect or performed direct read and update operations using a client-supplied ID, the ORM resolved the target row globally rather than within the tenant scope. This let an authenticated user in Organization A perform operations on records owned by Organization B.
A secondary weakness affected personal-workspace bookings. The restriction was enforced only in the loader (GET path), so a crafted POST request bypassed the check entirely and mutated booking state that should have been off-limits.
Root Cause
The root cause is missing organization-scope enforcement in server-side handlers. Authorization checks relied on the presence of a session and the shape of the request, not on a positive match between the target record's organizationId and the caller's active workspace. Enforcement was inconsistent between loaders and actions, allowing HTTP method choice to change the effective policy.
Attack Vector
An attacker needs an authenticated account and knowledge of a target entity ID from another organization. IDs can be enumerated, leaked through shared links, or captured from cross-tenant integrations. The attacker then issues an authenticated request referencing the foreign ID against a vulnerable endpoint, or sends a crafted POST to the booking route to bypass the loader-only check. No user interaction from the victim tenant is required.
See the GitHub Security Advisory GHSA-r46p-gfrp-xxgq for the vendor's technical description.
Detection Methods for CVE-2026-47697
Indicators of Compromise
- Application logs showing successful mutations where the request organizationId context differs from the target record's organizationId.
- Bookings, assets, or custody records being modified by user accounts that have no membership in the owning organization.
- Repeated 200-OK responses on POST endpoints against IDs that a user's session would not resolve through the corresponding GET loader.
Detection Strategies
- Add server-side audit logging that records both the authenticated user's active organizationId and the target record's organizationId for every mutation, then alert on mismatches.
- Replay recent traffic against staging with organization-scope assertions enabled to identify historical cross-tenant access.
- Correlate authentication telemetry with application logs to flag accounts that touch entity IDs outside their known workspace scope.
Monitoring Recommendations
- Monitor Shelf API endpoints that accept entity IDs in request bodies, especially connect-style relations and booking mutations.
- Track anomalous ID access patterns such as sequential ID probing or bursts of writes across many entity types by a single account.
- Alert on POST requests to booking routes where the caller has no read access via the corresponding loader.
How to Mitigate CVE-2026-47697
Immediate Actions Required
- Upgrade Shelf to version 1.20.2 or later, which enforces organization-scope checks on the affected endpoints.
- Rotate API tokens and session secrets if cross-tenant access is suspected, and review audit logs for unauthorized mutations.
- Review user membership across organizations and revoke access for accounts that no longer require it.
Patch Information
Shelf version 1.20.2 patches the vulnerability by validating that entity IDs supplied in requests belong to the caller's active organization and by enforcing the personal-workspace booking restriction on both loaders and actions. Refer to the GitHub Security Advisory GHSA-r46p-gfrp-xxgq for the full advisory and commit references.
Workarounds
- No vendor-supplied workarounds are available; upgrading to 1.20.2 is the only supported remediation.
- As a compensating control until upgrade, restrict access to the Shelf application to trusted users and reduce the number of organizations sharing an instance.
- Enable verbose application audit logging to detect exploitation attempts while planning the upgrade.
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

