
डिटेक्टर + CVE-2026-72898 के लिए रूट-कॉज़ विश्लेषण (reset_password के माध्यम से Metabase अनप्रमाणित SQLi)
Metabase में POST /api/session/reset_password के माध्यम से बिना प्रमाणीकरण SQL इंजेक्शन।
CVSS 10.0, CISA KEV कैटलॉग में, जंगली में शोषित।
पासवर्ड-रीसेट अनुरोध बॉडी में एक अघोषित फ़ील्ड एप्लिकेशन-डेटाबेस
उपयोगकर्ता लुकअप तक HoneySQL संरचना के रूप में पहुँचती है, न कि एक मान्य पहचानकर्ता के रूप में। एक JSON ऑब्जेक्ट
कुंजी Clojure कीवर्ड बन जाती है, इसलिए {"raw": "<SQL>"} HoneySQL के क्लॉज़ में संकलित होती है
और उत्सर्जित होती है — Metabase
एप्लिकेशन डेटाबेस के विरुद्ध मनमाना SQL, बिना किसी प्रमाणीकरण के।
:rawइस रिपॉजिटरी में एक डिटेक्टर (एक ब्लाइंड, समय-आधारित निर्णय उपकरण) और एक मूल-कारण विश्लेषण शामिल है जो विक्रेता पैच से प्राप्त हुआ है। यह रक्षकों के लिए है जो अपने स्वयं के जोखिम की पुष्टि कर रहे हैं और सुरक्षा शोधकर्ताओं के लिए जो बग का अध्ययन कर रहे हैं। यह नहीं डेटा निकालता है या एक हथियारयुक्त एडमिन-अधिग्रहण शोषण प्रदान करता है।
cve-2026-72898.py — संस्करण-गेटेड, फेल-क्लोज़्ड डिटेक्टर (VULN / SAFE / UNTESTED)TECHNICAL.md — v0.63.2 → v0.63.15 पैच डिफ़ से पूर्ण मूल-कारण विश्लेषणlab/docker-compose.yml — पुनरुत्पादन के लिए एक कमजोर + पैच किया गया इंस्टेंसडिटेक्टर प्रभावित इंस्टेंस के विरुद्ध VULN और पैच किए गए इंस्टेंस के विरुद्ध SAFE रिपोर्ट करता है —
और UNTESTED (कभी भी गलत SAFE नहीं) जब कोई अनुरोध थ्रॉटल, कैश, या ऐप तक कभी नहीं पहुँचता।
एक रिकॉर्डिंग भी asciinema कास्ट के रूप में प्रदान की गई है।
| शाखा | कमजोर | सुधारित |
|---|---|---|
| 0.58 / 1.58 | < 0.58.24 | 0.58.24 |
| 0.59 / 1.59 | < 0.59.21 | 0.59.21 |
| 0.60 / 1.60 | < 0.60.17 | 0.60.17 |
| 0.61 / 1.61 | < 0.61.11 | 0.61.11 |
| 0.62 / 1.62 | < 0.62.9 | 0.62.9 |
| 0.63 / 1.63 | < 0.63.5 | 0.63.5 |
परामर्श: GHSA-vwf4-m7j8-wcjf। यदि आप प्रभावित संस्करण चलाते हैं, तो अभी अपग्रेड करें — यह जंगली में शोषित किया जा रहा है।
POST /api/session/reset_password HTTP/1.1
Content-Type: application/json
{"token":"1_00000000-0000-0000-0000-000000000000",
"password":"Placeholder1!",
"user-id":{"raw":"<ARBITRARY SQL>"}}
एप्लिकेशन डेटाबेस में उत्पन्न होता है:
SELECT id, ... FROM core_user WHERE id = (<ARBITRARY SQL>)
बग ब्लाइंड है — रीसेट फ्लो SQL त्रुटियों को निगल जाता है और हर मामले में एक समान
400 {"errors":{"password":"Invalid reset token"}} लौटाता है — इसलिए डिटेक्टर एक
टाइमिंग ओरेकल का उपयोग करता है। पूर्ण डेटा फ्लो और पैच डिफ़ के लिए TECHNICAL.md देखें।
python3 cve-2026-72898.py https://metabase.example.com # H2 ऐप डीबी (डिफ़ॉल्ट)
python3 cve-2026-72898.py https://metabase.example.com --engine postgres # pg_sleep ओरेकल
python3 cve-2026-72898.py https://metabase.example.com --json --trials 5
एग्ज़िट कोड 0 = VULN, 1 = SAFE या UNTESTED।
निर्णय VULN / SAFE / UNTESTED हैं — कभी भी "शायद ठीक है" नहीं। उपकरण:
--force जानबूझकर ओवरराइड करता है;X-Forwarded-For घुमाता है, क्योंकि रीसेट एंडपॉइंट 10 प्रयासों पर थ्रॉटल करता है
और थ्रॉटल प्रतिक्रिया एक तेज़ 400 है जो अन्यथा एक नकारात्मक की नकल करती है;SYSTEM_RANGE पर sum(x)) का उपयोग करता है जिसे इंजन अनुकूलित नहीं कर सकता, और
देरी को पूर्ण फ़्लोर और नियंत्रण की स्वयं की टाइमिंग स्प्रेड दोनों को साफ़ करने की आवश्यकता होती है;UNTESTED के रूप में वर्गीकृत करता है, SAFE नहीं।cd lab
docker compose up -d # 3300 = कमजोर v0.63.2, 3301 = पैच किया गया v0.63.15
# पहली बार DB init के लिए ~90s प्रतीक्षा करें
python3 ../cve-2026-72898.py http://127.0.0.1:3300 # -> VULN
python3 ../cve-2026-72898.py http://127.0.0.1:3301 --force # -> SAFE
सत्यापित: v0.63.2 पेलोड पंक्ति गणना के साथ रैखिक रूप से बढ़ने वाला 8+ सेकंड का डेल्टा दिखाता है (5M→0.85s, 10M→1.96s, 20M→4.61s, 40M→7.97s); v0.63.15 कोई अंतर नहीं दिखाता।
केवल उन प्रणालियों का परीक्षण करें जिनके आप मालिक हैं या जिनका आकलन करने के लिए आप स्पष्ट रूप से अधिकृत हैं। कंप्यूटर प्रणालियों तक अनधिकृत पहुँच अधिकांश न्यायक्षेत्रों में अवैध है। यह उपकरण एक हानिरहित टाइमिंग जांच के साथ कमजोरी का पता लगाता है और जानबूझकर डेटा को पढ़ता, संशोधित, या निकालता नहीं है।
MIT — LICENSE देखें।