Skip to main content

OpenRemote Manager CVE-2026-41166

| EUVDEUVD-2026-25096 HIGH
Improper Access Control (CWE-284)
2026-04-22 https://github.com/openremote/openremote GHSA-49vv-25qx-mg44
7.0
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Obtain write:admin in any realm
  2. Delivery
    Enumerate master realm users
  3. Exploit
    Craft cross-realm API request
  4. Install
    Exploit missing authz check
  5. C2
    Assign admin role to target user
  6. Execute
    Authenticate as master admin
  7. Impact
    Full Keycloak compromise

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK

1 technique across 1 tactic: Defense Evasion

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Attacker must hold the write:admin client role in any Keycloak realm configured within the OpenRemote deployment. Attacker must possess or control a user UUID in the target realm they wish to compromise (typically master realm) - this could be their own low-privilege account in master, a service account, or any user whose credentials they can obtain after privilege escalation. Multi-realm Keycloak deployment is required; single-realm deployments do not expose the cross-realm attack surface. The Manager API endpoint /api/{realm}/user/{target-realm}/userRealmRoles/{userId} must be network-accessible to the attacker, which is the default configuration in standard OpenRemote deployments. Exploitation does NOT require the attacker to already have admin privileges (contradicting CVSS PR:N) but DOES require low-privilege authenticated access (write:admin role), suggesting CVSS vector may be misscored. The high attack complexity (AC:H) reflects the need to discover valid user UUIDs in the target realm and understand the multi-realm architecture, though Keycloak APIs often expose user enumeration capabilities that lower this barrier.

Impact

This represents a critical privilege escalation path despite the CVSS 7.0 (High) base score. The CVSS vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:L indicates network-accessible exploitation with high attack complexity and no privileges required, which appears inconsistent with the actual exploitation conditions. The description clearly states an attacker must first possess write:admin role in any realm and control a user UUID in the target realm - both PR:L (low privileges required) prerequisites not reflected in PR:N. This discrepancy suggests the CVSS vector may be incorrectly scored or the attack scenario involves an unauthenticated step not detailed in the description. Real-world risk is HIGH for multi-tenant OpenRemote deployments where different realms represent trust boundaries (e.g., separate customer environments). The attack grants complete Keycloak master realm control, enabling the attacker to create users, modify all realm configurations, and pivot to infrastructure access. EPSS data not available. Not listed in CISA KEV, indicating no confirmed widespread exploitation, though the detailed PoC in GitHub advisory GHSA-49vv-25qx-mg44 significantly lowers the barrier to exploitation. Attack complexity is rated High (AC:H) likely due to requiring specific knowledge of target user UUIDs and realm names, but this is easily obtainable through reconnaissance in most deployments. The high integrity impact (I:H) accurately reflects the severity of unauthorized realm role manipulation.

Exploit ScenarioDerived

An attacker creates a user account in a newly provisioned Keycloak realm (e.g., 'tenant-acme') and obtains the write:admin OpenRemote client role through legitimate access or social engineering. They enumerate the master realm via Keycloak's public endpoints to discover a low-privilege user UUID (e.g., a service account or dormant user). Using their tenant-acme credentials, they authenticate to the OpenRemote Manager API and craft a PUT request to /api/tenant-acme/user/master/userRealmRoles/{target-uuid} with payload ["admin"]. The vulnerable updateUserRealmRoles handler processes the 'master' realm parameter without validating authorization, granting the admin role in master realm to the target user UUID. The attacker then authenticates as that master realm user and gains full Keycloak administrator access, enabling them to create backdoor accounts, extract secrets, modify authentication flows, or compromise all tenant realms.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Apr 22, 2026

OpenRemote Manager allows privilege escalation to Keycloak master realm administrator through improper authorization in the Manager API. Users with write:admin permission in any non-master realm can manipulate realm role assignments in other realms, including master, by exploiting missing authorization checks in the updateUserRealmRoles endpoint. An attacker controlling any user in the master realm can grant themselves admin privileges, achieving full Keycloak administrator access. Vendor-released patch version 1.22.1 addresses this vulnerability. No public exploit code identified at time of analysis, though a detailed proof-of-concept is documented in the advisory.

RemediationAI

Upgrade OpenRemote Manager to version 1.22.1 or later, which implements proper authorization checks to validate that callers can only administer realms for which they have appropriate permissions. The patch is available via the GitHub release at https://github.com/openremote/openremote/releases/tag/1.22.1 and advisory at https://github.com/openremote/openremote/security/advisories/GHSA-49vv-25qx-mg44. For environments unable to immediately upgrade, implement compensating controls by restricting network access to the Manager API endpoint /api/{realm}/user/{target-realm}/userRealmRoles/{userId} to only trusted administrator networks or localhost, though this significantly degrades functionality. Alternatively, use a reverse proxy or API gateway to enforce additional authorization checks verifying that the authenticated user's realm matches the {target-realm} path parameter before forwarding requests to the Manager API - however this requires custom development and thorough testing to avoid breaking legitimate cross-realm administrative workflows. Audit existing Keycloak realm role assignments, particularly in the master realm, for unauthorized admin role grants that may indicate prior exploitation. Review application logs for suspicious PUT requests to /api/*/user/master/userRealmRoles/* paths originating from non-master realm authentication contexts.

Affected VersionsENISA

openremote < 1.22.1

Affected Packages

maven io.openremote:openremote-manager fix: 1.22.1
euvd openremote fix: 1.22.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in maven, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

OpenRemote Manager (pkg:maven/io.openremote:openremote-manager) is a Java-based IoT platform that integrates with Keycloak for identity and access management across multiple realms. The vulnerability exists in the UserResourceImpl.java REST API handler, specifically the updateUserRealmRoles method. This endpoint accepts a {realm} path parameter but fails to validate whether the authenticated caller has administrative privileges for that target realm - a classic CWE-284 (Improper Access Control) flaw. The Java code directly forwards the realm parameter to identityService.getIdentityProvider().updateUserRealmRoles() without checking if the caller's write:admin permission scope includes that realm. In Keycloak's multi-tenant architecture, realm isolation is security-critical; the master realm has elevated privileges to manage all other realms. By exploiting this missing authorization boundary check, an attacker with write:admin in realm A can issue API calls targeting realm B (including master), effectively bypassing Keycloak's intended realm isolation model.

Know when Java 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

GitHub Advisory PRIMARY 7.0 HIGH
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:L

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
High
Availability
Low

Lifecycle Timeline

3
Patch released
Apr 24, 2026 - 13:10 nvd
Patch available
Patch available
Apr 22, 2026 - 22:02 EUVD
CVE Published
Apr 22, 2026 - 14:38 nvd
HIGH 7.0

DescriptionGitHub Advisory

Summary

A user who has write:admin in one Keycloak realm can call the Manager API to update Keycloak realm roles for users in another realm, including master. The handler uses the {realm} path segment when talking to the identity provider but does not check that the caller may administer that realm. This could result in a privilege escalation to master realm administrator if the attacker controls any user in master realm.

Details

In manager/src/main/java/org/openremote/manager/security/UserResourceImpl.java, there is no check to validate if the caller should be able to administer a realm they're trying to update.

340:353:manager/src/main/java/org/openremote/manager/security/UserResourceImpl.java
    @Override
    public void updateUserRealmRoles(RequestParams requestParams, String realm, String userId, String[] roles) {
        try {
            identityService.getIdentityProvider().updateUserRealmRoles(
                realm,
                userId,
                roles);
        } catch (ClientErrorException ex) {
            ex.printStackTrace(System.out);
            throw new WebApplicationException(ex.getCause(), ex.getResponse().getStatus());
        } catch (Exception ex) {
            throw new WebApplicationException(ex);
        }
    }

PoC

  1. Create a new Keycloak realm other than master. Add a user and grant that user the OpenRemote client role write:admin. Remember the realm name (call it NEW_REALM).
  2. In Keycloak realm master, pick a low-privilege user (no admin realm role). Copy that user’s UUID (<master-user-uuid>).
  3. Authenticate as the user from step 1 and obtain a Bearer access token (<token>) for NEW_REALM.
  4. Replace placeholders and run:
bash
curl -k -X PUT "https://<host>/api/<NEW_REALM>/user/master/userRealmRoles/<master-user-uuid>" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '["admin"]'
  1. In the Keycloak Admin Console, realm master, that user, Role mapping. Confirm the admin realm role is assigned.

Impact

An attacker with the OpenRemote client role write:admin in any realm can call this API with {realm} set to another realm (for example master) and change Keycloak realm roles for users there. That can grant admin on master to a user UUID they target, which gives Keycloak administrator access for the master realm.

Executive ViewAI

Why It Matters

OpenRemote Manager contains a privilege escalation vulnerability allowing users with basic administrative permissions in non-master realms to escalate themselves to Keycloak master realm administrator, potentially compromising identity management for the entire organization. This affects any deployment where OpenRemote integrates with Keycloak, enabling attackers to seize control of authentication infrastructure and access all dependent applications and systems.

Business Impact: High
Compensating Controls

Vendor-released patch: OpenRemote Manager version 1.22.1. Interim mitigations pending patch deployment: (1) Implement network segmentation restricting Manager API access to trusted administrative networks only; (2) disable or remove non-essential user accounts with write:admin permissions in non-master realms; (3) enable comprehensive audit logging on all updateUserRealmRoles API calls and review for anomalies; (4) enforce multi-factor authentication for all Keycloak master realm administrative accounts.

Threat Intelligence Overview

EPSS Score
0.0%
Top 89% exploitable
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

35
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +35
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy