Executive brief
OpenRemote is an IoT platform management system that handles asset management and alarms across different customer organizations (realms). An authenticated attacker can exploit a flaw in the setAssetLinks endpoint to create links between their alarms and assets belonging to other customers, allowing them to view confidential asset names and details from other organizations. This breaks the multi-tenant isolation that separates customer data.
Technical details
The vulnerability is an insecure direct object reference (IDOR) with incorrect authorization in the AlarmResourceImpl.setAssetLinks endpoint. The root cause is that the realm access validation uses realms.stream().findFirst() on a HashSet, which only checks a single arbitrary realm instead of all realms in the request. Since HashSet iteration order is non-deterministic, an attacker can retry requests until their realm is validated first (~50% probability), allowing all subsequent realm links—including victim realms—to be persisted. The downstream alarmService.linkAssets() call has no additional realm ownership validation. An authenticated attacker can then retrieve victim asset names through GET requests on their own alarm via @Formula annotations. Patches are available in version 1.27.0 and later.
Affected products
- OpenRemote OpenRemote <= 1.26.2
Timeline
- 2026-07-16: disclosed
- 2026-08-01: advisory
- 2026: patched: Fixed in version 1.27.0