
OpenRemote के Rules Engine में गंभीर रिमोट कोड निष्पादन भेद्यता प्रमाणित उपयोगकर्ताओं को `write:rules` भूमिका के साथ सर्वर पर रूट विशेषाधिकारों के साथ मनमाना कोड निष्पादित करने की अनुमति देती है।
OpenRemote के Rules Engine में गंभीर रिमोट कोड एक्ज़ीक्यूशन भेद्यता, जो write:rules भूमिका वाले प्रमाणित उपयोगकर्ताओं को सर्वर पर रूट विशेषाधिकारों के साथ मनमाना कोड निष्पादित करने की अनुमति देती है।
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H| पहलू | विवरण |
|---|---|
| CVE ID | CVE-2026-39842 |
| GHSA ID | GHSA-7mqr-33rv-p3mp |
| भेद्यता प्रकार | कोड इंजेक्शन / एक्सप्रेशन लैंग्वेज इंजेक्शन |
| CVSS स्कोर | 10.0 (क्रिटिकल) |
| CWE | CWE-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 |
OpenRemote स्मार्ट इमारतों, शहरों और उद्योगों के निर्माण के लिए एक ओपन-सोर्स IoT प्लेटफ़ॉर्म है। यह इंटरनेट ऑफ थिंग्स पारिस्थितिकी तंत्र के लिए डिवाइस प्रबंधन, स्वचालन नियम, विश्लेषण और एकीकरण प्रदान करता है।
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 | └──────────────────────────────────┘
## भेद्यता गहन विश्लेषण
### मूल कारण विश्लेषण
यह भेद्यता OpenRemote के Rules Engine में दो गंभीर खामियों से उत्पन्न होती है:
**खामी 1: बिना सैंडबॉक्स वाला Nashorn JavaScript इंजन**
Java Nashorn JavaScript इंजन का उपयोग उपयोगकर्ता-प्रदत्त नियम अभिव्यक्तियों का मूल्यांकन करने के लिए बिना किसी सैंडबॉक्सिंग, सुरक्षा प्रबंधक, या ClassFilter प्रतिबंधों के किया जाता है। यह हमलावरों को JavaScript संदर्भ से सीधे Java कक्षाओं तक पहुँचने की अनुमति देता है।
**खामी 2: अक्षम Groovy सैंडबॉक्स**
Groovy स्क्रिप्ट इंजन में कोड निष्पादन को रोकने के लिए एक GroovyDenyAllFilter पंजीकृत था, लेकिन यह फ़िल्टर पंजीकरण कोडबेस में टिप्पणी कर दिया गया था। केवल Groovy प्रवर्तन API स्तर पर मौजूद था (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");
}
इसका अर्थ है:
- गैर-सुपरयूज़र 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 क्रेडेंशियल प्राप्त करें