
phpMyAdmin 5.2.3 - उच्च - रिमोट - 2FA स्किप - WebAuthn सेरेमनी को छोड़ा जा सकता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-webauthn
राइट-अप: https://abraxaslabs.tech/research/phpmyadmin-webauthn
वर्ग: 2FA बायपास पहुँच: रिमोट
phpMyAdmin 5.2.3 (टैग RELEASE_5_2_3)। डिफ़ॉल्ट tarball। web-auth/webauthn-lib suggest / require-dev है। composer install --no-dev इसे इंस्टॉल नहीं करता। इसलिए createServer CustomServer का उपयोग करता है। वह क्लास response.signature को पार्स करती है (फ़ील्ड का मौजूद होना और डिकोड होना आवश्यक है) और इसे कभी COSE-सत्यापित नहीं करती। यह कभी भी संग्रहीत credentialPublicKey का उपयोग नहीं करती। उत्पाद का अपना CustomServerTest बिना किसी सार्वजनिक कुंजी के एक assertion स्वीकार करता है।
संरचनात्मक जाँचें वास्तविक हैं: allowCredentials में credential id, clientData.type == webauthn.get, challenge सत्र से मेल खाता है, origin host, rpIdHash, user-present। हस्ताक्षर पार्स किया जाता है और अनदेखा किया जाता है। MySQL पासवर्ड के बाद, एक कचरा WebAuthn हस्ताक्षर जो अभी भी उन फ़ील्ड्स से मेल खाता है, एक पूर्ण phpMyAdmin सत्र है। वह डेटाबेस है। यदि आपने वास्तव में web-auth/webauthn-lib इंस्टॉल किया है, तो आप WebauthnLibServer पर हैं और यह बग नहीं है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | 2FA बायपास / हस्ताक्षर सत्यापन अनुपस्थित |
| पहुँच | रिमोट (कुकी लॉगिन, फिर WebAuthn छोड़ा गया) |
| CWE | CWE-347, CWE-287 |
| 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। डिफ़ॉल्ट tarball / composer install --no-dev |
| प्रमाणीकरण | कुकी लॉगिन (MySQL पासवर्ड), फिर WebAuthn छोड़ा गया |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18080 |
उन्हें अभी भी MySQL पासवर्ड की आवश्यकता है (कुकी लॉगिन)। उस पासवर्ड के बाद, वे मेल खाते challenge, origin host, rpIdHash, user-present, नामांकित credential id, और एक कचरा हस्ताक्षर के साथ webauthn_request_response POST करते हैं। वे सामान्य UI में पहुँच जाते हैं। 2FA समाप्त हो गया है। वह डेटाबेस है (SQL, उपयोगकर्ता, निर्यात), होस्ट पर PHP शेल नहीं।
यदि आपने वास्तव में web-auth/webauthn-lib इंस्टॉल किया है, तो आप WebauthnLibServer पर हैं और यह बग नहीं है।
| विशेषाधिकार | विधि / पथ | लैब-प्रमाणित या अनुमानित |
|---|---|---|
| प्रमाणक के बिना पूर्ण WebAuthn 2FA (दूसरे कारक की अखंडता) | पासवर्ड के बाद POST webauthn_request_response, कचरा हस्ताक्षर | लैब-प्रमाणित। still_2fa=False landed=True |
| उस MySQL उपयोगकर्ता के रूप में पूर्ण PMA (अखंडता + SQL बॉक्स की जानकारी) | वही सत्र | लैब-प्रमाणित। होम UI मार्कर मौजूद |
| MySQL पासवर्ड छोड़ें | अप्रमाणित POST | लैब-प्रमाणित बंद। लॉगिन पर रहता है |
web-auth/webauthn-lib इंस्टॉल होने पर वही बायपास | WebauthnLibServer | बंद। यह अवशेष नहीं |
| OS RCE / रिवर्स शेल | यह अवशेष | बंद |
इस अवशेष पर बंद: अप्रमाणित PMA, होस्ट पर PHP शेल, और उस tarball को जिसने वास्तव में web-auth/webauthn-lib इंस्टॉल किया है, इस बग के रूप में मानना।
मैंने createServer पढ़ा, फिर parseAndValidateAssertionResponse, फिर वह यूनिट टेस्ट जो सार्वजनिक कुंजी पास नहीं करता। संरचनात्मक जाँचें वास्तविक हैं। हस्ताक्षर पार्स किया जाता है और अनदेखा किया जाता है।
गलत रास्ते: पूर्व पासवर्ड सत्र के बिना WebAuthn JSON POST करना; एक हस्ताक्षर जो संरचनात्मक जाँचों में विफल रहा; Webauthn\Server अभी भी मौजूद (गलत सर्वर क्लास); challenge इस सत्र से नहीं; origin host बेमेल; user-present फ़्लैग स्पष्ट; credential id allowCredentials में नहीं।
Dockerfile लैब 5.2.3 को कॉपी करता है, composer install --no-dev चलाता है, फिर vendor/web-auth को हटा देता है ताकि CustomServer ही उपयोग में हो। अंतिम php -r तब exit 1 करता है जब Webauthn\Server मौजूद हो। init.sql appuser के लिए बिना हार्डवेयर कुंजी के WebAuthn 2FA नामांकित करता है। PoC सिग्नेचर not-a-real-signature-PMA-WEBAUTHN-BYPASS को POST करता है।
Dockerfile के बगल में पिन को क्लोन करें, फिर चलाएँ:
cd lab
git clone --depth 1 --branch RELEASE_5_2_3 https://github.com/phpmyadmin/phpmyadmin.git src
./run.sh
या उस क्लोन के बाद पैक रूट से:
python3 phpmyadmin-webauthn-Abraxas-Labs.py
केवल लूपबैक: http://127.0.0.1:18080। Compose प्रोजेक्ट pma-webauthn-lab। RELEASE_5_2_3 पिन करें। src/ को शिप न करें। PMA-WEBAUTHN-BYPASS को साक्षी बनाएं।
SUCCESS PMA-WEBAUTHN-BYPASS WebAuthn 2FA accepted with garbage signature
संग्रहीत COSE सार्वजनिक कुंजी के साथ authenticatorData || SHA-256(clientDataJSON) को सत्यापित करें; userHandle को बांधें; signCount को लागू करें। web-auth/webauthn-lib को एक वास्तविक निर्भरता बनाएं और CustomServer को हटा दें, या यदि लाइब्रेरी अनुपस्थित है तो विफल-बंद (fail closed) करें। तब तक, WebAuthn 2FA को अक्षम करें या इस phpMyAdmin को उजागर न करें।
Plugins\TwoFactor\WebAuthn::createServerCustomServer::parseAndValidateAssertionResponseGNU Affero GPL v3.0. देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।