
Python StateMachine 3.0.0 < 3.2.0 में असुरक्षित SCXML <data expr> मूल्यांकन और Python eval() इंजेक्शन के माध्यम से RCE
गंभीरता: क्रिटिकल, CVSS 4.0 9.3, CVSS 3.1 9.8 (VulnCheck, CNA द्वारा निर्धारित)
वेक्टर (v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
वेक्टर (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
प्रभावित: Python StateMachine >= 3.0.0, < 3.2.0
में ठीक किया गया: 3.2.0
CWE: CWE-95 (गतिशील रूप से मूल्यांकित कोड में निर्देशों का अनुचित निष्प्रभावीकरण, Eval इंजेक्शन); साथ ही CWE-94 (कोड के निर्माण का अनुचित नियंत्रण, कोड इंजेक्शन) से भी मेल खाता है
खोजा और रिपोर्ट किया गया: Sai Teja Erukude द्वारा
प्रकाशित: 17 जून, 2026
Python StateMachine के 3.0.0 से 3.2.0 से पहले के संस्करणों में SCXML प्रोसेसिंग पथ में एक रिमोट कोड एक्ज़ीक्यूशन भेद्यता मौजूद है।
SCXMLProcessor SCXML दस्तावेज़ों को स्वीकार करता है और <data expr="..."> जैसे एक्सप्रेशन एट्रिब्यूट्स को संरक्षित रखता है। भेद्य संस्करणों में, ये एक्सप्रेशन स्ट्रिंग्स SCXML डेटामॉडल प्रोसेसिंग पथ से गुज़रती हैं और अंततः बिना सैंडबॉक्सिंग के Python के अंतर्निहित eval() तक पहुँच जाती हैं।
एक हमलावर जो SCXML दस्तावेज़ प्रदान कर सकता है या उसे प्रभावित कर सकता है, वह <data expr="..."> एट्रिब्यूट के अंदर Python कोड रख सकता है। जब उपभोक्ता एप्लिकेशन SCXML फ़ाइल को पार्स करता है और प्रोसेसर शुरू करता है, तो एक्सप्रेशन का मूल्यांकन होस्टिंग Python प्रोसेस के संदर्भ में किया जाता है।
यदि कोई भेद्य एप्लिकेशन हमलावर-नियंत्रित SCXML सामग्री को प्रोसेस करता है, तो हमलावर मनमाना Python कोड निष्पादित कर सकता है।
यह जोखिम रिमोट या स्थानीय हो सकता है, यह इस पर निर्भर करता है कि उपभोक्ता एप्लिकेशन SCXML दस्तावेज़ों को कैसे प्राप्त करता है। जोखिम भरे इनपुट पथों में शामिल हैं:
सफल शोषण निम्नलिखित की अनुमति दे सकता है:
VulnCheck को रिपोर्ट की गई भेद्य कॉल श्रृंखला है:
SCXMLProcessor.parse_scxml_file()
SCXMLProcessor.process_definition()
create_datamodel_action_callable()
_create_dataitem_callable()
_eval()
eval()
यह समस्या तब उत्पन्न होती है जब प्रोसेसर स्टार्टअप के दौरान एक पार्स किए गए SCXML डेटामॉडल आइटम का मूल्यांकन किया जाता है।
संवेदनशील नियंत्रण प्रवाह में दो ट्रस्ट-बाउंड्री विफलताएँ हैं:
eval() के साथ किया जाता है।PoC एक <data expr="..."> एट्रिब्यूट का उपयोग करता है क्योंकि यह पथ SCXMLProcessor.start() के दौरान निष्पादित होता है। eval() को एक खाली globals डिक्शनरी पास करने से Python builtins अक्षम नहीं होते; Python अभी भी मूल्यांकन संदर्भ में उपयोगी builtins इंजेक्ट कर सकता है। परिणामस्वरूप, एक एक्सप्रेशन __import__ तक पहुँच सकता है और Python कोड निष्पादित कर सकता है।
एक हानिरहित प्रूफ पेलोड एक स्थानीय मार्कर फ़ाइल लिखता है:
<data id="x" expr="__import__('pathlib').Path(...).write_text(...)"/>
मार्कर केवल तब बनाया जाता है जब SCXML दस्तावेज़ पार्स हो जाता है और start() डेटामॉडल एक्सप्रेशन का मूल्यांकन करता है।
package_builder.py malicious-charts/data_expr_start.scxml पर एक स्थानीय हमलावर-नियंत्रित SCXML फ़ाइल उत्पन्न करता है। उत्पन्न फ़ाइल में एक सौम्य <data expr> पेलोड होता है जो इस PoC निर्देशिका में marker.txt लिखता है।
run_poc.py कोई हुक इंस्टॉल नहीं करता है और लक्ष्य पैकेज को संशोधित नहीं करता है। यह प्रकाशित python-statemachine==3.1.2 पैकेज को इम्पोर्ट करता है, उत्पन्न SCXML फ़ाइल को SCXMLProcessor.parse_scxml_file(...) के साथ पार्स करता है, प्रोसेसर को स्टार्ट करता है, और मार्कर के पहले/बाद के प्रमाण को प्रिंट करता है।
केवल स्थानीय परीक्षण वातावरण में चलाएँ:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python run_poc.py
संवेदनशील संस्करणों पर अपेक्षित प्रमाण:
statemachine_version: 3.1.2
installed_package: True
data_marker_before_start: False
data_marker_after_start: True
marker_contents:
python_statemachine_scxml_data_expr_eval_triggered
success: True
महत्वपूर्ण व्यवहार यह है कि marker.txt start() से पहले मौजूद नहीं होता, फिर बाद में मौजूद होता है, जो साबित करता है कि SCXML अभिव्यक्ति होस्टिंग Python प्रक्रिया के अंदर निष्पादित हुई।
पेलोड जानबूझकर हानिरहित है। यह केवल यह स्थानीय मार्कर स्ट्रिंग लिखता है:
python_statemachine_scxml_data_expr_eval_triggered
यह शेल नहीं बनाता, किसी नेटवर्क सेवा से कनेक्ट नहीं होता, सीक्रेट्स नहीं पढ़ता, डेटा नहीं हटाता, या PoC डायरेक्टरी के बाहर फ़ाइलों को संशोधित नहीं करता।
Python StateMachine 3.2.0 या उसके बाद के संस्करण में अपग्रेड करें।
एक टिकाऊ समाधान में हमलावर-नियंत्रित SCXML एक्सप्रेशन टेक्स्ट को रॉ Python eval() से मूल्यांकित करने से बचना चाहिए। सुरक्षित दृष्टिकोणों में शामिल हैं:
eval() को एक प्रतिबंधित एक्सप्रेशन मूल्यांकनकर्ता से बदलना।यदि तत्काल अपग्रेड संभव नहीं है:
SCXMLProcessor तक पहुँचने से पहले सत्यापित करें।| तिथि | घटना |
|---|---|
| 22 मई, 2026 | भेद्यता VulnCheck को प्रस्तुत की गई |
| 26 मई, 2026 | VulnCheck ने प्रकटीकरण आरंभ किया; CVE-2026-47103 अस्थायी रूप से आवंटित |
| 17 जून, 2026 | CVE-2026-47103 प्रकाशित |
Sai Teja Erukude द्वारा खोजा और रिपोर्ट किया गया।
प्रकटीकरण का समन्वय VulnCheck के माध्यम से किया गया।