
phpMyAdmin 5.2.3 - عالي - عن بُعد - تخطي المصادقة الثنائية - يمكن تخطي عملية WebAuthn
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-webauthn
الفئة: تجاوز المصادقة الثنائية الوصول: عن بُعد
phpMyAdmin 5.2.3 (الوسم RELEASE_5_2_3). الحزمة الافتراضية. web-auth/webauthn-lib هي suggest / require-dev. الأمر composer install --no-dev لا يثبّتها. لذلك يستخدم createServer الصنف CustomServer. هذا الصنف يحلّل response.signature (يجب أن يكون الحقل موجودًا وقابلًا للفك) ولا يتحقق منه عبر COSE أبدًا. لا يستخدم أبدًا credentialPublicKey المخزّن. اختبار المنتج نفسه CustomServerTest يقبل تأكيدًا بدون مفتاح عام.
الفحوصات البنيوية حقيقية: معرّف الاعتماد في allowCredentials، وclientData.type == webauthn.get، وتطابق التحدي مع الجلسة، ومضيف الأصل، وrpIdHash، وحضور المستخدم. يتم تحليل التوقيع وتجاهله. بعد كلمة مرور MySQL، توقيع WebAuthn غير صالح لا يزال يطابق تلك الحقول يمنح جلسة phpMyAdmin كاملة. تلك هي قاعدة البيانات. إذا كنت قد ثبّتت web-auth/webauthn-lib فعليًا، فأنت على WebauthnLibServer ولست مصابًا بهذه الثغرة.
| المعرّف | لا يوجد CVE بعد |
| الفئة | تجاوز المصادقة الثنائية / غياب التحقق من التوقيع |
| الوصول | عن بُعد (تسجيل دخول بالكوكي، ثم تخطي 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. الحزمة الافتراضية / composer install --no-dev |
| المصادقة | تسجيل دخول بالكوكي (كلمة مرور MySQL)، ثم تخطي WebAuthn |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18080 فقط |
لا يزال بحاجة إلى كلمة مرور MySQL (تسجيل الدخول بالكوكي). بعد تلك الكلمة، يرسل POST إلى webauthn_request_response مع تحدي مطابق، ومضيف أصل مطابق، وrpIdHash، وحضور المستخدم، ومعرّف اعتماد مسجّل، وتوقيع غير صالح. يصل إلى الواجهة العادية. المصادقة الثنائية اختفت. تلك هي قاعدة البيانات (SQL، المستخدمون، التصدير)، وليست صدفة PHP على المضيف.
إذا كنت قد ثبّتت web-auth/webauthn-lib فعليًا، فأنت على WebauthnLibServer ولست مصابًا بهذه الثغرة.
| الصلاحية | الطريقة / المسار | مُثبت مختبريًا أو مُستنتج |
|---|---|---|
| إكمال المصادقة الثنائية WebAuthn دون المصادق (سلامة العامل الثاني) | POST webauthn_request_response بعد كلمة المرور، توقيع غير صالح | مُثبت مختبريًا. still_2fa=False landed=True |
| PMA كامل بصلاحية مستخدم MySQL ذلك (سلامة + استطلاع صندوق SQL) | نفس الجلسة | مُثبت مختبريًا. علامات واجهة الصفحة الرئيسية موجودة |
| تخطي كلمة مرور MySQL | POST غير مُصادق | مُثبت مختبريًا مغلق. يبقى على صفحة الدخول |
نفس التجاوز مع تثبيت web-auth/webauthn-lib | WebauthnLibServer | مغلق. ليس هذه الثغرة المتبقية |
| RCE على نظام التشغيل / صدفة عكسية | هذه الثغرة المتبقية | مغلق |
مغلق على هذه الثغرة المتبقية: PMA غير المُصادق، وصدفة PHP على المضيف، ومعاملة حزمة ثبّتت فعليًا web-auth/webauthn-lib على أنها هذه الثغرة.
قرأت createServer، ثم parseAndValidateAssertionResponse، ثم اختبار الوحدة الذي لا يمرّر مفتاحًا عامًا. الفحوصات البنيوية حقيقية. يتم تحليل التوقيع وتجاهله.
مسارات خاطئة: إرسال POST لـ WebAuthn JSON دون جلسة كلمة مرور سابقة؛ توقيع فشل في الفحوصات البنيوية؛ Webauthn\Server لا يزال موجودًا (صنف خادم خاطئ)؛ التحدي ليس من هذه الجلسة؛ عدم تطابق مضيف الأصل؛ علم حضور المستخدم غير مُفعّل؛ معرّف الاعتماد ليس في allowCredentials.
ملف Dockerfile الخاص بالمختبر ينسخ 5.2.3، ثم composer install --no-dev، ثم يحذف vendor/web-auth ليكون CustomServer هو المستخدم. آخر أمر php -r يخرج بالرمز 1 إذا وُجد Webauthn\Server. ملف init.sql يسجّل المصادقة الثنائية WebAuthn للمستخدم appuser دون مفتاح عتاد. الـ PoC يرسل POST بتوقيع not-a-real-signature-PMA-WEBAUTHN-BYPASS.
استنسخ الإصدار المثبّت بجانب 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
تحقق من authenticatorData || SHA-256(clientDataJSON) باستخدام مفتاح COSE العام المخزّن؛ واربط userHandle؛ وفرض signCount. اجعل web-auth/webauthn-lib تبعية حقيقية واحذف CustomServer، أو افشل بشكل آمن إذا كانت المكتبة مفقودة. حتى ذلك الحين، عطّل المصادقة الثنائية WebAuthn أو لا تعرّض phpMyAdmin هذا.
Plugins\TwoFactor\WebAuthn::createServerCustomServer::parseAndValidateAssertionResponseGNU Affero GPL v3.0. انظر LICENSE. مختبر على الواجهة المحلية فقط. دون أي ضمان.