
phpMyAdmin 5.2.3 - उच्च - रिमोट - शेष - setup/validate अभी भी पहुँच योग्य
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-setup-validate
राइट-अप: https://abraxaslabs.tech/research/phpmyadmin-setup-validate
वर्ग: SSRF पहुँच: रिमोट
phpMyAdmin 5.2.3 (टैग RELEASE_5_2_3, कमिट 962857e)। config.inc.php मौजूद होने पर setup/index.php मर जाता है। setup/validate.php नहीं मरता। यह अभी भी $isMinimumCommon के अंतर्गत लोड होता है, सार्वजनिक लॉगिन पेज से एक CSRF टोकन लेता है, और JSON values फ़ील्ड में दिए गए होस्ट, पोर्ट, उपयोगकर्ता और पासवर्ड के साथ Validator::testDBConnection -> mysqli_connect को कॉल करता है।
एक अनप्रमाणित क्लाइंट सत्र कुकी और टोकन प्राप्त करने के लिए / पर GET करता है, फिर अपनी पसंद के Servers/1/host और Servers/1/port के साथ setup/validate.php id=Server पर POST करता है। phpMyAdmin होस्ट उस पते पर एक TCP MySQL हैंडशेक खोलता है। यह MySQL प्रोटोकॉल पर SSRF है: आंतरिक 3306, किसी आंतरिक सर्वर के विरुद्ध क्रेडेंशियल स्टफिंग, टाइमिंग और mysqli त्रुटियों से एक पोर्ट ओरेकल। यह HTTP मेटाडेटा SSRF नहीं है जब तक कि उस पोर्ट पर कुछ MySQL न बोलता हो। hide_db एक उपयोगकर्ता रेगेक्स को preg_match में भी इंटरपोलेट करता है। मैंने इस लैब में उस ReDoS पथ को नहीं चलाया।
आधिकारिक phpmyadmin:5.2.3 इमेज setup/ को हटा देती है। यह अवशेष केवल तब लागू होता है जब वह डायरेक्टरी अभी भी वेब रूट में हो, जो कि इंस्टॉल के बाद आम अवशेष है। लैब setup/ को 5.2.3 टारबॉल से पुनर्स्थापित करता है ताकि पिन RELEASE_5_2_3 से मेल खाए।
PMASA-2016-44 / CVE-2016-6621 ने कुछ setup SSRF को कवर किया था। "कॉन्फ़िग मौजूद होने पर setup अक्षम करें" जाँच कभी भी validate.php / config.php पर लागू नहीं की गई।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | SSRF (MySQL प्रोटोकॉल) |
| पहुँच | रिमोट (अनप्रमाणित यदि setup/ अभी भी वेब-पहुँचयोग्य है) |
| CWE | CWE-918 |
| CVSS | उच्च: 7.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N |
| उत्पाद | phpMyAdmin |
| प्रभावित | 5.2.3 टैग RELEASE_5_2_3 (962857e) जिसमें setup/ अभी भी डॉकरूट में है |
| प्रमाणीकरण | अनप्रमाणित। सार्वजनिक लॉगिन पेज से CSRF टोकन। कोई MySQL लॉगिन नहीं। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:19230 |
जो भी कोई अवशेष setup/ ट्री तक पहुँच सकता है, वह phpMyAdmin होस्ट को अपनी पसंद के होस्ट और पोर्ट पर MySQL-प्रोटोकॉल TCP कनेक्शन खोलने के लिए बाध्य कर सकता है।
| विशेषाधिकार | विधि / पथ | लैब-प्रमाणित या अनुमानित |
|---|---|---|
| PMA होस्ट से हमलावर होस्ट:पोर्ट तक TCP खोलें (आउटबाउंड कनेक्ट की अखंडता; उस पोर्ट की रेकी) | अनप्रमाणित POST /setup/validate.php id=Server जिसमें Servers/1/host + Servers/1/port और GET / से एक टोकन | लैब-प्रमाणित। oracle:13306 पर ओरेकल ने PMA कंटेनर से PMA-SETUP-VALIDATE-WITNESS लॉग किया |
| पुष्टि करें कि setup UI बंद है जबकि validate चालू रहता है | GET /setup/index.php | लैब-प्रमाणित। बॉडी में "setup is disabled" / configuration already exists है |
| लॉगिन-पेज CSRF टोकन के बिना फेल-क्लोज़्ड | वही POST, बिना token | लैब-प्रमाणित। शून्य ओरेकल हिट |
| mysqli त्रुटियों और टाइमिंग से पोर्ट / क्रेडेंशियल ओरेकल | वही testDBConnection | अनुमानित। लैब बॉडी mysqli_connect(): (HY000/2006): MySQL server has gone away थी, ओरेकल के स्वीकार करने और फिर बंद करने के बाद |
| किसी आंतरिक 3306 से MySQL बोलें और पोस्ट किए गए उपयोगकर्ता/पासवर्ड आज़माएँ | वही mysqli_connect | अनुमानित। लैब db सेवा की ओर इंगित नहीं किया गया |
उपयोगकर्ता रेगेक्स को इंटरपोलेट करने वाले validateRegex के माध्यम से ReDoS | id=Servers/1/hide_db | अनुमानित। प्रयोग नहीं किया गया |
इस लैब पर बंद: HTTP मेटाडेटा SSRF (हैंडशेक MySQL है, GET /latest/meta-data नहीं), अनऑथेंटिकेटेड PMA लॉगिन, OS शेल, और सेटअप विज़ार्ड स्वयं (index.php अक्षम रहता है)। यदि setup/ डिप्लॉय नहीं है (आधिकारिक इमेज डिफ़ॉल्ट) तो FAIL।
RELEASE_5_2_3 की आठ समानांतर स्रोत खोजें। setup/index.php में config-exists fatal है। setup/validate.php में नहीं है। setup/lib/common.inc.php $isMinimumCommon सेट करता है और CONFIG_FILE नहीं खोजता।
गलत मोड़: आधिकारिक इमेज को इस अवशेष के रूप में मानना (यह setup/ को हटा देती है); लॉगिन-पेज टोकन के बिना POST करना (शून्य oracle हिट); इसे HTTP मेटाडेटा SSRF मानना (हैंडशेक MySQL है)।
python3 phpmyadmin-setup-validate-Abraxas-Labs.py
या
cd lab
./run.sh
केवल लूपबैक: http://127.0.0.1:19230। Compose प्रोजेक्ट phpmyadmin-setup-validate। Dockerfile 5.2.3 tarball से setup/ को पुनर्स्थापित करता है और पोर्ट 13306 पर एक TCP oracle चलाता है। साक्षी PMA-SETUP-VALIDATE-WITNESS।
SUCCESS phpmyadmin-setup-validate how=live tcp=yes setup-index-disabled=yes PMA-SETUP-VALIDATE-WITNESS
file_exists(CONFIG_FILE) को setup/lib/common.inc.php में घातक (fatal) बनाएं ताकि हर setup स्क्रिप्ट बंद हो जाए। testDBConnection होस्ट्स को प्रतिबंधित करें। उपयोगकर्ता स्ट्रिंग्स से preg_match डिलिमिटर न बनाएं।
962857e)setup/index.php config-exists fatalsetup/validate.php में वह जाँच नहीं हैlibraries/classes/Config/Validator.php testDBConnection / mysqli_connectGNU Affero GPL v3.0. देखें LICENSE. केवल लूपबैक लैब। कोई वारंटी नहीं।