
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
CNA: VulnCheck
प्रकाशित: 17 जून, 2026
Python StateMachine के 3.0.0 से से पहले के संस्करणों में SCXML प्रोसेसिंग पथ में एक रिमोट कोड निष्पादन भेद्यता है।
3.2.0SCXMLProcessor 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 बिल्ट-इन अक्षम नहीं होते; Python अभी भी मूल्यांकन संदर्भ में उपयोगी बिल्ट-इन इंजेक्ट कर सकता है। परिणामस्वरूप, एक एक्सप्रेशन __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 या उसके बाद के संस्करण में अपग्रेड करें।
एक स्थायी समाधान को कच्चे Python eval() के साथ हमलावर-नियंत्रित SCXML एक्सप्रेशन टेक्स्ट का मूल्यांकन करने से बचना चाहिए। सुरक्षित तरीकों में शामिल हैं:
eval() को एक प्रतिबंधित एक्सप्रेशन मूल्यांकनकर्ता से बदलना।यदि तत्काल अपग्रेड संभव नहीं है:
SCXMLProcessor तक पहुँचने से पहले SCXML फ़ाइलों को मान्य करें।| दिनांक | घटना |
|---|---|
| 22 मई, 2026 | VulnCheck को भेद्यता सबमिट की गई |
| 26 मई, 2026 | VulnCheck ने प्रकटीकरण शुरू किया; CVE-2026-47103 अस्थायी रूप से आवंटित किया गया |
| 17 जून, 2026 | CVE-2026-47103 प्रकाशित |
खोज और रिपोर्ट Sai Teja Erukude द्वारा की गई, VulnCheck के माध्यम से समन्वित।