
phpMyAdmin - उच्च 8.1 - प्रमाणित POST /index.php - 2FA बायपास
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · PMA-5.2.3-WebAuthn-2FA
phpMyAdmin 5.2.3 - phpMyAdmin
डिफ़ॉल्ट tarball। web-auth/webauthn-lib suggest / require-dev है। composer install --no-dev इसे इंस्टॉल नहीं करता। इसलिए createServer CustomServer का उपयोग करता है। वह क्लास response.signature को पार्स करती है (फ़ील्ड का मौजूद होना और डिकोड होना आवश्यक है) और इसे कभी COSE-verify नहीं करती। यह संग्रहीत credentialPublicKey का कभी उपयोग नहीं करती। उत्पाद का अपना CustomServerTest बिना किसी public key के एक assertion स्वीकार करता है।
MySQL पासवर्ड के बाद, एक कचरा WebAuthn signature जो अभी भी challenge, origin, rpIdHash और user-present से मेल खाता है, एक पूर्ण phpMyAdmin सत्र है। वही डेटाबेस है।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-347, CWE-287 |
| 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 डिफ़ॉल्ट tarball (web-auth/webauthn-lib अनुपस्थित) |
| Auth | MySQL पासवर्ड, फिर WebAuthn छोड़ दिया गया |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
उन्हें अभी भी MySQL पासवर्ड चाहिए (cookie लॉगिन)। उस पासवर्ड के बाद, वे मेल खाते challenge, origin host, rpIdHash, user-present, नामांकित credential id और एक कचरा signature के साथ webauthn_request_response POST करते हैं। वे सामान्य UI में पहुँच जाते हैं। 2FA खत्म। यह डेटा पर RCE है, होस्ट पर PHP शेल नहीं।
यदि आपने वास्तव में web-auth/webauthn-lib इंस्टॉल किया है, तो आप WebauthnLibServer पर हैं और इस बग से प्रभावित नहीं हैं।
मैंने createServer पढ़ा, फिर parseAndValidateAssertionResponse, फिर वह यूनिट टेस्ट जो public key पास नहीं करता। संरचनात्मक जाँचें वास्तविक हैं: allowCredentials में credential id, clientData.type == webauthn.get, challenge सत्र से मेल खाता है, origin host, rpIdHash, user-present। Signature पार्स की जाती है और अनदेखी की जाती है।
पहला क्लाइंट जिसे मैंने इस पर इंगित किया, वह विनम्र था। उसने पूर्व पासवर्ड सत्र के बिना एक WebAuthn JSON POST किया। लॉगिन पेज। उसने route=/ के साथ एक signature POST किया जो संरचनात्मक जाँचों को भी पूरा नहीं करता था। आप 2FA पर ही रहते हैं। webauthn_request_response अभी भी HTML में है।
पहले से दर्ज गलत रास्ते: Webauthn\Server मौजूद (गलत सर्वर क्लास); challenge इस सत्र का नहीं; origin host बेमेल; user-present फ़्लैग स्पष्ट; credential id allowCredentials में नहीं; unauthenticated, कोई MySQL पासवर्ड नहीं; एक reverse shell। नाटक। संकेत है 2FA फ़ील्ड का गायब होना और एक phpMyAdmin नेविगेशन पेज।
क्लाइंट बग उत्पाद बग जैसे दिखते हैं। एक helper जो http.client को shadow करता है, कभी पैकेट नहीं भेजता। HTTPResponse पर .recv() .read() नहीं है। मैं यह एक बार बता रहा हूँ क्योंकि इसने समय बर्बाद किया और एक मिनट के लिए ऐसा लगा जैसे phpMyAdmin ठीक था।
फिर: username/password/token POST करें। 2FA पेज से सत्र challenge निकालें। नकली assertion POST करें। still_2fa=False landed=True। लैब Dockerfile 5.2.3 कॉपी करता है, composer install --no-dev, फिर vendor/web-auth को हटा देता है ताकि CustomServer ही खेल में हो। अंतिम php -r यदि Webauthn\Server मौजूद है तो 1 पर एक्ज़िट करता है। यदि लाइब्रेरी अभी भी मौजूद है तो इमेज को बिल्ड विफल करना चाहिए। init.sql हार्डवेयर कुंजी के बिना appuser के लिए WebAuthn 2FA नामांकित करता है।
cd lab
./run.sh
केवल http://127.0.0.1:18080 को लक्षित करें। पहले phpMyAdmin 5.2.3 को Dockerfile के बगल में src/ के रूप में रखें।
password-login status=200 webauthn=True
2fa-post status=200 still_2fa=False landed=True
SUCCESS PMA-WEBAUTHN-BYPASS WebAuthn 2FA accepted with garbage signature
web-auth/webauthn-lib इंस्टॉल करें ताकि createServer इस लाइब्रेरी का उपयोग करे, या CustomServer में संग्रहीत सार्वजनिक कुंजी के विरुद्ध response.signature का वास्तविक COSE-सत्यापन करें। तब तक, WebAuthn 2FA अक्षम करें या इस phpMyAdmin को उजागर न करें।
CustomServer::parseAndValidateAssertionResponse · WebAuthn::createServer · CustomServerTestGNU Affero GPL v3.0. देखें LICENSE. केवल लूपबैक लैब के लिए। कोई वारंटी नहीं।