
phpMyAdmin 5.2.3 - उच्च - रिमोट - 2FA - config/set दो-कारक को साफ़ करता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-config-set-2fa
Class: Privilege leftover / missing step-up Reach: Remote
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
POST index.php?route=/config/set किसी भी allowlisted preference को लिखता है, जिसमें 2fa भी शामिल है। UserPreferences::persistOption कोई validation नहीं करता। Settings -> Two-factor अभी भी factor को हटाने से पहले TwoFactor::check(true) को कॉल करता है। /config/set ऐसा नहीं करता।
एक logged-in session, या XSS/CSRF जो page token को POST कर सकता है, key=2fa और value=null भेज सकता है। अगले password login में कोई TOTP, WebAuthn, या Simple prompt नहीं होता। यह स्थायी strip है, एक-request skip नहीं।
| ID | अभी तक कोई CVE नहीं |
| Class | Privilege leftover / missing step-up |
| Reach | Remote (authenticated cookie login; CSRF token आवश्यक) |
| CWE | CWE-620 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Product | phpMyAdmin |
| Affected | 5.2.3 tag RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| Auth | cookie login. CSRF token आवश्यक। स्थायी 2FA strip तक XSS या CSRF को पूरा करता है |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
TOTP, WebAuthn, या Simple confirm field प्रस्तुत किए बिना phpMyAdmin account से 2FA को strip करें। अगला password login केवल password-only होता है। उस MySQL user के रूप में पूर्ण PMA (SQL, users, export)।
| Privilege | Method / path | Recon / integrity / availability | Lab-proven या inferred |
|---|---|---|---|
2fa को null में persist करें और pmadb से second factor हटाएं | Authenticated POST index.php?route=/config/set key=2fa value=null साथ में valid token | Preference store की integrity | Lab-proven। success:true, pmadb config_data [] हो गया |
| उस write के बाद केवल password से login करें | नया cookie session, वही MySQL user | Login path की integrity | Lab-proven। कोई 2fa_confirm नहीं, सामान्य UI में पहुंचा |
| बाद के logins के लिए 2FA गायब होने के दौरान वर्तमान session बनाए रखें | वही handler; persistOption store को लिखता है, live two_factor_check flag को नहीं | बाद के sessions की integrity | Lab-proven। Session A अंदर रहा। Session B ने 2FA देखा था। Session C ने नहीं देखा |
| Stored XSS या CSRF से chain करें जो page token के साथ POST कर सकता है | Same-review leftovers, यह lab नहीं | Same-origin POST के बाद 2FA की integrity | Inferred |
| Settings के माध्यम से 2FA हटाएं | POST /preferences/two-factor 2fa_remove=1 | Documented UI के माध्यम से 2FA की integrity | Lab-proven closed। Factor के बिना, PMA confirm page दिखाता है और pmadb में अभी भी backend=simple है |
इस leftover पर closed: unauthenticated access, MySQL password को skip करना, OS RCE, अन्य users की pmadb rows पढ़ना। मुझे leftover #1 (CustomServer signature) की आवश्यकता नहीं थी। मैंने MySQL password को skip नहीं किया।
Same pin: WebAuthn CustomServer leftover।
मैंने PMASA-2025-1/2/3 के बाद 5.2.3 को pin किया। Cookie auth, pmadb pma__userconfig। Lab केवल $cfg['DBG']['simple2fa'] को चालू करता है ताकि Settings hardware key के बिना Simple backend को enroll कर सके। TOTP और WebAuthn उसी 2fa preference key में रहते हैं।
SetConfigController key और JSON value लेता है और Config::setUserValue को कॉल करता है। UserPreferences::persistOption documented है "No validation is done!" apply() 2fa को allowlist करता है ताकि key unknown 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 को hole मानना (यह अभी भी factor की मांग करता है); unauthenticated access का दावा; MySQL password के skip का दावा; इसे leftover #1 (CustomServer) मानना; एक reverse shell। Theatre।
python3 phpmyadmin-config-set-2fa-Abraxas-Labs.py
# or: cd lab && ./run.sh
Target केवल http://127.0.0.1:19280। Compose project phpmyadmin-config-set-2fa। Pin RELEASE_5_2_3। run.sh उस tag को image के लिए lab/src/ में copy या clone करता है। Run के बाद stack tear down हो जाता है।
Settings ने Simple 2FA enroll किया। एक दूसरे browser ने 2fa_confirm page hit किया। Factor के बिना POST 2fa_remove confirm UI पर ही रहा और pmadb में backend=simple छोड़ गया। फिर POST /config/set ने success:true लौटाया, pmadb [] हो गया, और अगला login सामान्य 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 keys) को deny करें। किसी भी 2FA mutation से पहले TwoFactor::check(true) की आवश्यकता रखें। Settings path को ही एकमात्र writer रखें।
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/Controllers/Config/SetConfigController.phplibraries/classes/Config/UserPreferences.phpGNU Affero GPL v3.0. देखें LICENSE। केवल Loopback lab। कोई warranty नहीं।