You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Description: GET /api/views is @PublicPage and calls ObjectService::find with _rbac:false, _multitenancy:false. Anonymous requests therefore receive all tenants' views including drafts, bypassing both multitenancy isolation and publication-status filtering. This follows the same anti-pattern identified in opencatalogi issue #728.
Scenario:
An unauthenticated caller performs:
GET /api/views
Response includes draft and unpublished views from all tenants in the system.
Suggested fix:
Either:
Drop @PublicPage and require authentication, or
For anonymous access: add published === true filter AND pass _multitenancy:true to ObjectService::find so that only the current tenant's published views are returned.
Severity: HIGH
Location:
lib/Controller/ViewController.phplines 79–226;lib/Service/ViewService.phplines 309–334, 820, 1195Description:
GET /api/viewsis@PublicPageand callsObjectService::findwith_rbac:false, _multitenancy:false. Anonymous requests therefore receive all tenants' views including drafts, bypassing both multitenancy isolation and publication-status filtering. This follows the same anti-pattern identified in opencatalogi issue #728.Scenario:
An unauthenticated caller performs:
Response includes draft and unpublished views from all tenants in the system.
Suggested fix:
Either:
@PublicPageand require authentication, orpublished === truefilter AND pass_multitenancy:truetoObjectService::findso that only the current tenant's published views are returned.Source: deep team-reviewer pass 2026-05-27