
Yamcs Mission Control System में Yarch SQL Double-Quoted Identifiers में Java Statement Injection के माध्यम से Remote Code Execution (RCE)Yamcs Mission Control System में Yarch SQL Double-Quoted Identifiers में Java Statement Injection के माध्यम से Remote Code Execution (RCE)
| फ़ील्ड | मान |
|---|
| उत्पाद | Yamcs (org.yamcs:yamcs-core) |
| सलाहकार | GHSA-3g44-3m7x-cgg2 |
| कमज़ोरी | CWE-94: कोड उत्पादन का अनुचित नियंत्रण |
| गंभीरता | गंभीर, CVSS 3.1: 9.1 |
| वेक्टर | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| आवश्यक विशेषाधिकार | SystemPrivilege.ControlArchiving |
| फिक्स्ड रिलीज़ | Yamcs 5.13.2 और 5.12.8 |
| मेनलाइन पैच | b65a3d78178ba99a58b753feda6ecc3b5a694f13 |
Yamcs StreamSQL ऑब्जेक्ट्स के लिए डबल-कोटेड नाम स्वीकार करता है और, प्रभावित रिलीज़ में, उन नामों के अंदर लगभग किसी भी वर्ण की अनुमति देता है। एग्रीगेट एक्सप्रेशन जैसे sum(...) कॉलम नामों का उपयोग करके गतिशील रूप से Java स्रोत बनाते हैं और उस स्रोत को Janino SimpleCompiler से कंपाइल करते हैं।
कमज़ोर कोड जनरेट किए गए Java पहचानकर्ता में कॉलम नाम रखने से पहले केवल न्यूनतम नाम सैनिटाइज़ेशन लागू करता है। ControlArchiving वाला एक प्रमाणित उपयोगकर्ता एक क्राफ्टेड कोटेड कॉलम नाम बना सकता है, POST /api/archive/{instance}:executeSql के माध्यम से एग्रीगेट कंपाइलर तक पहुँच सकता है, और Yamcs सर्वर JVM के अंदर हमलावर-प्रभावित Java निष्पादित कर सकता है।
यह इच्छित Yamcs प्राधिकरण सीमा को पार करता है: ControlArchiving आर्काइव, तालिका, और स्ट्रीम प्रबंधन की अनुमति देता है, लेकिन सर्वर पर मनमाना Java निष्पादन जानबूझकर प्रदान नहीं करता है।
| रिलीज़ लाइन | प्रभावित | फिक्स्ड |
|---|---|---|
| 5.13.x | 5.13.1 और इससे पहले | 5.13.2 |
| 5.12.x | 5.12.7 और इससे पहले | 5.12.8 |
Yamcs 5.13.2, 5.12.8, या बाद के समर्थित रिलीज़ में अपग्रेड करें।
कमज़ोर डेटा प्रवाह है:
POST /api/archive/{instance}:executeSql
-> TableApi.executeSql
-> Yarch StreamSQL parser
-> double-quoted object name
-> SelectExpression aggregate binding
-> SumExpression.aggregateFillCode_newData
-> Expression.fillCode_InputDefVars
-> CompilableAggregateExpression.getCompiledAggregate
-> Janino SimpleCompiler.cook
-> attacker-influenced Java executes in the Yamcs JVM
तीन शर्तें मिलकर समस्या उत्पन्न करती हैं:
S_DOUBLE_QUOTED_IDENTIFIER व्याकरण CR, LF, और " को छोड़कर किसी भी वर्ण को स्वीकार करता है।Expression.fillCode_InputDefVars कॉलम नाम से एक Java वेरिएबल नाम प्राप्त करता है। इसका sanitizeName सहायक केवल / और - को बदलता है।यह Java सिंटैक्स वर्ण जैसे सेमीकोलन, व्हाइटस्पेस, कोष्ठक, असाइनमेंट ऑपरेटर, और डॉट को जनरेट किए गए newData(Tuple) विधि में उपलब्ध छोड़ता है। नंगे-एक्सप्रेशन पथ के विपरीत, एग्रीगेट विधि पहुँच योग्य स्टेटमेंट संदर्भ प्रदान करती है जिसमें इंजेक्ट किए गए स्टेटमेंट कंपाइल और निष्पादित हो सकते हैं।
शोषण के लिए एक प्रमाणित खाते की आवश्यकता होती है जिसमें SystemPrivilege.ControlArchiving हो। उस विशेषाधिकार के बिना एक खाता TableApi.executeSql प्राधिकरण जाँच द्वारा अस्वीकार कर दिया जाता है।
सफल शोषण Yamcs सेवा प्रक्रिया के विशेषाधिकारों के साथ Java चलाता है। तैनाती अलगाव के आधार पर, यह मिशन डेटा और होस्ट वातावरण की गोपनीयता, अखंडता, और उपलब्धता को प्रभावित कर सकता है। यह एक अप्रमाणित RCE नहीं है और अपने आप में Yamcs प्रक्रिया को उसके ऑपरेटिंग-सिस्टम या कंटेनर अनुमतियों से परे नहीं बढ़ाता है।
शामिल poc.py जानबूझकर गैर-हथियारीकृत है:
javac और java) सौम्य मार्कर परीक्षण के लिएcd /path/to/yamcs
python3 /path/to/poc.py \
--json /tmp/evidence.json \
--log /tmp/crash_evidence.log \
--expect-crash
अपेक्षित संकेतक:
source_chain_confirmed=true
generated_source_injection_present=true
marker_executed=true
evidence/evidence.json: संरचित स्रोत-श्रृंखला और Java-मॉडल परिणामevidence/crash_evidence.log: संक्षिप्त सत्यापन लॉगशामिल साक्ष्य Yamcs स्रोत कमिट 98a05e95461207c143e4297ec4bb1b5a76e9cb19 के विरुद्ध उत्पादित किए गए थे। यह कमज़ोर स्रोत श्रृंखला, जनरेटेड-स्रोत इंजेक्शन, और सौम्य मार्कर निष्पादन की पुष्टि करता है।
अपस्ट्रीम फिक्स का शीर्षक है Avoid RCE through double-quoted identifiers:
b65a3d78178ba99a58b753feda6ecc3b5a694f13, 5.13.2 में रिलीज़8c1070b12c0a6c003903325cb2a1013347e2dbde, 5.12.8 में रिलीज़मुख्य परिवर्तन डबल-कोटेड पहचानकर्ताओं को लगभग अप्रतिबंधित वर्ण सेट से प्रतिबंधित करता है:
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (~["\n","\r","\""])* "\"" >
से एक अनुमति सूची में अक्षर, अंक, $, _, #, और .:
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (<LETTER> | <DIGIT> | <SPECIAL_CHARS>)+ "\"" >
यह नाम के Java कोड जनरेशन तक पहुँचने से पहले रिपोर्ट किए गए इंजेक्शन के लिए आवश्यक स्टेटमेंट-पृथक्करण और एक्सप्रेशन-निर्माण वर्णों को अस्वीकार करता है। पैच जनरेट किए गए पार्सर फ़ाइलों, दस्तावेज़ीकरण, और एक संबंधित परीक्षण को भी अपडेट करता है।
प्रतिबंध रिक्त स्थान या गैर-अनुमत विराम चिह्न वाले मौजूदा कोटेड ऑब्जेक्ट नामों को प्रभावित कर सकता है। अपग्रेड या बैकपोर्ट करने से पहले StreamSQL स्कीमा और ऑटोमेशन की समीक्षा करें।
CVE-2026-55511, CVE-2026-44632 / GHSA-524g-x36v-9wm6 से एक अलग प्रवेश बिंदु है। CVE-2026-44632 JavaExprAlgorithmExecutionFactory से संबंधित है, मिशन-डेटाबेस एल्गोरिथम ओवरराइड कार्यक्षमता के माध्यम से पहुँचा जाता है, और ChangeMissionDatabase द्वारा गेट किया जाता है।
यह समस्या org.yamcs.yarch.streamsql में है, executeSql के माध्यम से पहुँचा जाता है, और ControlArchiving द्वारा गेट किया जाता है। पहले के 5.13.0 / 5.12.7 एल्गोरिथम-पथ फिक्स ने StreamSQL कंपाइलर या इसके कोटेड-पहचानकर्ता हैंडलिंग को संशोधित नहीं किया।
VULNERABILITY_REPORT.md: विस्तारित भेद्यता रिपोर्टPATCH_ANALYSIS.md: विस्तृत अपस्ट्रीम पैच विश्लेषण और अनुकूलता नोट्सइस सामग्री का उपयोग केवल उन प्रणालियों में करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आप स्पष्ट रूप से अधिकृत हैं।