
phpMyAdmin 5.2.3 - उच्च - रिमोट - शेष - setup/validate अभी भी पहुँच योग्य
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-setup-validate
Class: SSRF Reach: Remote
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). setup/index.php मर जाता है जब config.inc.php मौजूद हो। setup/validate.php नहीं मरता। यह अभी भी $isMinimumCommon के अंतर्गत लोड होता है, सार्वजनिक लॉगिन पेज से एक CSRF टोकन लेता है, और JSON values फ़ील्ड में दिए गए host, port, user, और password के साथ Validator::testDBConnection -> mysqli_connect को कॉल करता है।
एक unauthenticated क्लाइंट / पर GET करके एक session cookie और token प्राप्त करता है, फिर अपनी पसंद के Servers/1/host और Servers/1/port के साथ setup/validate.php id=Server पर POST करता है। phpMyAdmin host उस पते पर एक TCP MySQL handshake खोलता है। यह MySQL प्रोटोकॉल पर SSRF है: आंतरिक 3306, किसी आंतरिक सर्वर के विरुद्ध credential stuffing, timing और mysqli errors से एक port oracle। यह HTTP metadata SSRF नहीं है जब तक कि उस port पर कुछ MySQL न बोलता हो। hide_db भी एक user regex को preg_match में interpolate करता है। मैंने इस lab में उस ReDoS पथ को नहीं चलाया।
आधिकारिक phpmyadmin:5.2.3 image setup/ को हटा देती है। यह leftover केवल तब लागू होता है जब वह directory अभी भी web root में हो, जो कि install के बाद आम leftover है। Lab setup/ को 5.2.3 tarball से restore करता है ताकि pin RELEASE_5_2_3 से मेल खाए।
PMASA-2016-44 / CVE-2016-6621 ने कुछ setup SSRF को कवर किया था। "disable setup when config exists" जाँच कभी validate.php / config.php पर लागू नहीं की गई।
| ID | अभी तक कोई CVE नहीं |
| Class | SSRF (MySQL प्रोटोकॉल) |
| Reach | Remote (unauthenticated यदि setup/ अभी भी web-reachable है) |
| CWE | CWE-918 |
| CVSS | High: 7.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N |
| Product | phpMyAdmin |
| Affected | 5.2.3 tag RELEASE_5_2_3 (962857e) जिसमें setup/ अभी भी docroot में है |
| Auth | Unauthenticated। सार्वजनिक लॉगिन पेज से CSRF token। कोई MySQL login नहीं। |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1:19230 |
कोई भी जो leftover setup/ tree तक पहुँच सकता है, वह phpMyAdmin host को अपनी पसंद के host और port पर एक MySQL-protocol TCP connection खोलने के लिए बाध्य कर सकता है।
| Privilege | Method / path | Lab-proven या inferred |
|---|---|---|
| PMA host से attacker host:port तक TCP खोलें (outbound connect की integrity; उस port की recon) | Unauthenticated POST /setup/validate.php id=Server जिसमें Servers/1/host + Servers/1/port और GET / से एक token हो | Lab-proven। oracle:13306 पर oracle ने PMA container से PMA-SETUP-VALIDATE-WITNESS लॉग किया |
| पुष्टि करें कि setup UI बंद है जबकि validate चालू रहता है | GET /setup/index.php | Lab-proven। Body में "setup is disabled" / configuration already exists है |
| login-page CSRF token के बिना fail closed | वही POST, बिना token | Lab-proven। शून्य oracle hits |
| mysqli errors और timing से port / credential oracle | वही testDBConnection | Inferred। Lab body mysqli_connect(): (HY000/2006): MySQL server has gone away था जब oracle ने accept करके बंद कर दिया |
| आंतरिक 3306 से MySQL बोलें और posted user/password आज़माएँ | वही mysqli_connect | Inferred। lab db service पर नहीं भेजा गया |
validateRegex द्वारा user regex interpolate करके ReDoS | id=Servers/1/hide_db | Inferred। नहीं चलाया गया |
इस lab पर बंद: HTTP metadata SSRF (handshake MySQL है, GET /latest/meta-data नहीं), unauthenticated PMA login, OS shell, और setup wizard स्वयं (index.php disabled रहता है)। FAIL यदि setup/ deploy नहीं है (आधिकारिक image default)।
RELEASE_5_2_3 की आठ समानांतर source hunts। setup/index.php में config-exists fatal है। setup/validate.php में नहीं है। setup/lib/common.inc.php $isMinimumCommon सेट करता है और CONFIG_FILE को नहीं खोजता।
गलत रास्ते: आधिकारिक image को इस leftover के रूप में मानना (यह setup/ को हटा देती है); login-page token के बिना POST करना (शून्य oracle hits); इसे HTTP metadata SSRF मानना (handshake MySQL है)।
python3 phpmyadmin-setup-validate-Abraxas-Labs.py
या
cd lab
./run.sh
केवल loopback: http://127.0.0.1:19230। Compose project phpmyadmin-setup-validate। Dockerfile 5.2.3 tarball से setup/ को restore करता है और port 13306 पर एक TCP oracle चलाता है। Witness PMA-SETUP-VALIDATE-WITNESS।
SUCCESS phpmyadmin-setup-validate how=live tcp=yes setup-index-disabled=yes PMA-SETUP-VALIDATE-WITNESS
file_exists(CONFIG_FILE) fatal को setup/lib/common.inc.php में रखें ताकि हर setup script मर जाए। testDBConnection hosts को प्रतिबंधित करें। user strings से preg_match delimiters न बनाएँ।
962857e)setup/index.php config-exists fatalsetup/validate.php में वह जाँच नहींlibraries/classes/Config/Validator.php testDBConnection / mysqli_connectGNU Affero GPL v3.0। देखें LICENSE। केवल loopback lab। कोई warranty नहीं।