
Vulnerabilità critica di esecuzione remota di codice nel motore di regole di OpenRemote che consente agli utenti autenticati con ruolo `write:rules` di eseguire codice arbitrario sul server con privilegi di root.
Vulnerabilità critica di esecuzione remota di codice nel Rules Engine di OpenRemote che consente agli utenti autenticati con ruolo write:rules di eseguire codice arbitrario sul server con privilegi di root.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H| Aspetto | Dettagli |
|---|---|
| ID CVE | CVE-2026-39842 |
| ID GHSA | GHSA-7mqr-33rv-p3mp |
| Tipo di vulnerabilità | Iniezione di codice / Iniezione di Expression Language |
| Punteggio CVSS | 10.0 (Critico) |
| CWE | CWE-94, CWE-917 |
| Prodotto | OpenRemote |
| Versioni interessate | <= 1.21.0 |
| Versione corretta | >= 1.22.0 |
| Autenticazione richiesta | Sì |
| Livello di privilegio necessario | Ruolo write:rules (non-superuser) |
| Endpoint vulnerabili | POST /api/{realm}/rules/realm, POST /api/{realm}/rules/asset |
| Livello di esecuzione RCE | root |
| Sfruttabilità | Alta |
| Complessità | Bassa |
| Data di scoperta | 2026 |
OpenRemote è una piattaforma IoT open-source per la creazione di edifici, città e industrie intelligenti. Fornisce gestione dei dispositivi, regole di automazione, analisi e integrazioni per l'ecosistema Internet of Things.
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 | └──────────────────────────────────┘
## Analisi Approfondita della Vulnerabilità
### Analisi della Causa Radice
La vulnerabilità deriva da due difetti critici nel Rules Engine di OpenRemote:
**Difetto 1: Motore JavaScript Nashorn non sandboxed**
Il motore JavaScript Nashorn di Java viene utilizzato per valutare le espressioni delle regole fornite dall'utente senza alcuna sandbox, security manager o restrizioni ClassFilter. Ciò consente agli aggressori di accedere direttamente alle classi Java dal contesto JavaScript.
**Difetto 2: Sandbox Groovy disabilitato**
Il motore di scripting Groovy aveva un GroovyDenyAllFilter registrato per prevenire l'esecuzione di codice, ma questa registrazione del filtro era stata commentata nel codebase. Solo l'applicazione delle regole Groovy esisteva a livello API (RulesResourceImpl.java:262), ma JavaScript non aveva alcuna restrizione.
### Percorsi di Codice Vulnerabili```
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
La vulnerabilità colpisce gli utenti autenticati con il ruolo write:rules. Il controllo di autorizzazione in RulesResourceImpl.java:262 blocca solo Groovy per gli utenti non superuser:```
if (!isUserSuperuser && isGroovy) {
throw new UnauthorizedException("Groovy rules not allowed");
}
Questo significa:
- Gli utenti non superuser POSSONO creare regole JavaScript (nessun blocco)
- Gli utenti non superuser NON POSSONO creare regole Groovy (bloccato)
- JavaScript non ha sandboxing, quindi lo sfruttamento è possibile per qualsiasi utente autenticato con write:rules
Inoltre, l'isolamento multi-tenant può essere aggirato tramite reflection su assetStorageService per accedere ai dati di altri realm.