
phpMyAdmin 5.2.3 - उच्च - रिमोट - 2FA - config/set दो-कारक को साफ़ करता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-config-set-2fa
राइट-अप: https://abraxaslabs.tech/research/phpmyadmin-config-set-2fa
वर्ग: विशेषाधिकार अवशेष / अनुपस्थित स्टेप-अप पहुँच: रिमोट
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
POST index.php?route=/config/set किसी भी अनुमत-सूचीबद्ध प्राथमिकता को लिखता है, जिसमें 2fa भी शामिल है। UserPreferences::persistOption कोई सत्यापन नहीं करता। Settings -> Two-factor अभी भी फ़ैक्टर हटाने से पहले TwoFactor::check(true) को कॉल करता है। /config/set ऐसा नहीं करता।
एक लॉग-इन सत्र, या XSS/CSRF जो पेज टोकन को POST कर सके, key=2fa और value=null भेज सकता है। अगले पासवर्ड लॉगिन में कोई TOTP, WebAuthn, या Simple प्रॉम्प्ट नहीं होता। यह टिकाऊ हटाव है, एक-अनुरोध की छूट नहीं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष / अनुपस्थित स्टेप-अप |
| पहुँच | रिमोट (प्रमाणित कुकी लॉगिन; CSRF टोकन आवश्यक) |
| CWE | CWE-620 |
| CVSS | उच्च: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| उत्पाद | phpMyAdmin |
| प्रभावित | 5.2.3 टैग RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| प्रमाणीकरण | कुकी लॉगिन। CSRF टोकन आवश्यक। XSS या CSRF को टिकाऊ 2FA हटाव तक पूर्ण करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
TOTP, WebAuthn, या Simple पुष्टि फ़ील्ड प्रस्तुत किए बिना phpMyAdmin खाते से 2FA हटाएँ। अगला पासवर्ड लॉगिन केवल पासवर्ड-आधारित होता है। उस MySQL उपयोगकर्ता के रूप में पूर्ण PMA (SQL, उपयोगकर्ता, निर्यात)।
| विशेषाधिकार | विधि / पथ | रेकॉन / अखंडता / उपलब्धता | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
2fa को null में स्थायी करें और pmadb से दूसरा फ़ैक्टर हटाएँ | प्रमाणित POST index.php?route=/config/set key=2fa value=null साथ में वैध token | प्राथमिकता स्टोर की अखंडता | लैब-प्रमाणित। success:true, pmadb config_data [] हो गया |
| उस लेखन के बाद केवल पासवर्ड से लॉगिन करें | नया कुकी सत्र, वही MySQL उपयोगकर्ता | लॉगिन पथ की अखंडता | लैब-प्रमाणित। कोई 2fa_confirm नहीं, सामान्य UI में पहुँचा |
| वर्तमान सत्र बनाए रखें जबकि बाद के लॉगिन के लिए 2FA गायब हो जाए | वही हैंडलर; persistOption स्टोर लिखता है, लाइव two_factor_check फ़्लैग नहीं | बाद के सत्रों की अखंडता | लैब-प्रमाणित। सत्र A अंदर रहा। सत्र B ने 2FA देखा था। सत्र C ने नहीं देखा |
| संग्रहीत XSS या CSRF से श्रृंखलाबद्ध करें जो पेज टोकन के साथ POST कर सके | समान-समीक्षा अवशेष, यह लैब नहीं | समान-मूल POST के बाद 2FA की अखंडता | अनुमानित |
| Settings के माध्यम से 2FA हटाएँ | POST /preferences/two-factor 2fa_remove=1 | प्रलेखित UI के माध्यम से 2FA की अखंडता | लैब-प्रमाणित बंद। फ़ैक्टर के बिना, PMA पुष्टि पेज दिखाता है और pmadb में अभी भी backend=simple है |
इस अवशेष पर बंद: अप्रमाणित पहुँच, MySQL पासवर्ड छोड़ना, OS RCE, अन्य उपयोगकर्ताओं की pmadb पंक्तियाँ पढ़ना। मुझे अवशेष #1 (CustomServer हस्ताक्षर) की आवश्यकता नहीं थी। मैंने MySQL पासवर्ड नहीं छोड़ा।
समान पिन: WebAuthn CustomServer अवशेष।
मैंने PMASA-2025-1/2/3 के बाद 5.2.3 पिन किया। Cookie auth, pmadb pma__userconfig। लैब केवल इसलिए $cfg['DBG']['simple2fa'] चालू करता है ताकि Settings बिना हार्डवेयर key के Simple backend enroll कर सके। TOTP और WebAuthn एक ही 2fa preference key में रहते हैं।
SetConfigController key और JSON value लेता है और Config::setUserValue को कॉल करता है। UserPreferences::persistOption का दस्तावेज़ कहता है "No validation is done!" apply() 2fa को allowlist करता है ताकि key अज्ञात pref के रूप में drop न हो।
$result = $this->config->setUserValue(null, $key, json_decode($value));
json_decode('null') PHP null है। persistOption('2fa', null, $default) फिर config_data['2fa'] को unset कर देता है क्योंकि उस path के लिए default भी null है।
Settings -> Two-factor इसके विपरीत है। TwoFactorController तब तक configure('') नहीं करेगा जब तक TwoFactor::check(true) true न लौटाए।
पहले से दर्ज गलत मोड़: Settings 2fa_remove को छेद मानना (यह अभी भी factor की मांग करता है); unauthenticated access का दावा करना; MySQL password को skip करने का दावा करना; इसे leftover #1 (CustomServer) मानना; एक reverse shell। नाटक।
python3 phpmyadmin-config-set-2fa-Abraxas-Labs.py
# or: cd lab && ./run.sh
केवल http://127.0.0.1:19280 को लक्षित करें। प्रोजेक्ट phpmyadmin-config-set-2fa को कंपोज़ करें। RELEASE_5_2_3 को पिन करें। run.sh उस टैग को इमेज के लिए lab/src/ में कॉपी या क्लोन करता है। रन के बाद स्टैक टियर डाउन हो जाता है।
सेटिंग्स ने Simple 2FA को एनरोल किया। एक दूसरे ब्राउज़र ने 2fa_confirm पेज को हिट किया। फैक्टर के बिना POST 2fa_remove कॉन्फ़र्म UI पर ही रहा और pmadb में backend=simple छोड़ गया। इसके बाद POST /config/set ने success:true लौटाया, pmadb [] हो गया, और अगला लॉगिन सामान्य UI में पहुँच गया।
SUCCESS phpmyadmin-config-set-2fa enroll=simple ui-remove-blocked=yes config-set-cleared=yes next-login-password-only=yes PMA-CONFIG-SET-2FA-WITNESS
/config/set पर 2fa (और अन्य auth कुंजियों) को अस्वीकार करें। किसी भी 2FA परिवर्तन से पहले TwoFactor::check(true) आवश्यक करें। Settings पथ को ही एकमात्र लेखक बनाए रखें।
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/Controllers/Config/SetConfigController.phplibraries/classes/Config/UserPreferences.phpGNU Affero GPL v3.0. देखें LICENSE. केवल लूपबैक लैब। कोई वारंटी नहीं।