
Kritische Remote-Codeausführung-Schwachstelle in der Rules Engine von OpenRemote ermöglicht es authentifizierten Benutzern mit der Rolle `write:rules`, beliebigen Code auf dem Server mit Root-Rechten auszuführen.
Kritische Schwachstelle für Remote-Codeausführung in der Rules Engine von OpenRemote ermöglicht es authentifizierten Benutzern mit der Rolle write:rules, beliebigen Code auf dem Server mit Root-Rechten auszuführen.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H| Aspekt | Details |
|---|---|
| CVE-ID | CVE-2026-39842 |
| GHSA-ID | GHSA-7mqr-33rv-p3mp |
| Schwachstellentyp | Code-Injection / Expression-Language-Injection |
| CVSS-Score | 10.0 (Kritisch) |
| CWE | CWE-94, CWE-917 |
| Produkt | OpenRemote |
| Betroffene Versionen | <= 1.21.0 |
| Behobene Version | >= 1.22.0 |
| Authentifizierung erforderlich | Ja |
| Erforderliche Berechtigungsstufe | Rolle write:rules (Nicht-Superuser) |
| Verwundbare Endpunkte | POST /api/{realm}/rules/realm, POST /api/{realm}/rules/asset |
| RCE-Ausführungsebene | root |
| Ausnutzbarkeit | Hoch |
| Komplexität | Niedrig |
| Entdeckungsdatum | 2026 |
OpenRemote ist eine Open-Source-IoT-Plattform für den Aufbau intelligenter Gebäude, Städte und Industrien. Sie bietet Geräteverwaltung, Automatisierungsregeln, Analysen und Integrationen für das Internet-der-Dinge-Ökosystem.
Internet / Network
|
┌────────┴────────┐
v v
┌──────────────┐ ┌──────────────┐
| Web Browser | | Mobile App |
└──────────────┘ └──────────────┘
| |
└────────┬────────┘
v
┌──────────────────┐
| OpenRemote API |
| (REST/WebSocket) |
└────────┬─────────┘
v
┌──────────────────┐
| Manager Service |
| (Port 8080) |
└────────┬─────────┘
|
┌────────────────────┼────────────────────┐
| | |
v v v
┌──────────┐ ┌──────────┐ ┌──────────────┐ | Rules | | Asset | | Notification | | Engine | | Storage | | Service | └──────────┘ └──────────┘ └──────────────┘ | | v v ┌──────────────────────────────────┐ | PostgreSQL / Timescale Database | └──────────────────────────────────┘
## Detaillierte Analyse der Schwachstelle
### Ursachenanalyse
Die Schwachstelle beruht auf zwei kritischen Fehlern in der Rules Engine von OpenRemote:
**Fehler 1: Nicht isolierte Nashorn-JavaScript-Engine**
Die Java-Nashorn-JavaScript-Engine wird verwendet, um benutzerdefinierte Regelausdrücke ohne jegliche Sandboxing, Sicherheitsmanager oder ClassFilter-Einschränkungen auszuwerten. Dadurch können Angreifer direkt aus dem JavaScript-Kontext auf Java-Klassen zugreifen.
**Fehler 2: Deaktivierte Groovy-Sandbox**
Die Groovy-Skript-Engine verfügte über einen registrierten GroovyDenyAllFilter, um die Codeausführung zu verhindern, doch diese Filterregistrierung wurde im Codebase auskommentiert. Nur auf API-Ebene gab es eine Groovy-Durchsetzung (RulesResourceImpl.java:262), während JavaScript keinerlei Einschränkungen hatte.
### Anfällige Codepfade```
RulesResource.java (lines 153-158)
|
> POST request handler for rule creation
|
v
RulesetDeployment.java (line 368)
|
> scriptEngine.eval(ruleExpression)
|
v
Nashorn Engine
|
> No ClassFilter / SecurityManager
> Java.type() accessible
> Runtime.exec() available
Die Schwachstelle betrifft authentifizierte Benutzer mit der Rolle write:rules. Die Autorisierungsprüfung in RulesResourceImpl.java:262 blockiert Groovy nur für Nicht-Superuser:```
if (!isUserSuperuser && isGroovy) {
throw new UnauthorizedException("Groovy rules not allowed");
}
Das bedeutet:
- Nicht-Superuser KÖNNEN JavaScript-Regeln erstellen (kein Block)
- Nicht-Superuser KÖNNEN KEINE Groovy-Regeln erstellen (blockiert)
- JavaScript verfügt über keine Sandboxing, daher ist eine Ausnutzung für jeden authentifizierten Benutzer mit write:rules möglich
Darüber hinaus kann die Mandantenisolierung über Reflection auf den assetStorageService umgangen werden, um auf Daten anderer Realms zuzugreifen.