
Apache OpenMeetings 9.1.0 - عالية - عن بُعد - بقايا صلاحيات - معالج /install القديم يُدرج مسؤول ADMIN ثانيًا
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-stale-install-admin
الفئة: صلاحية متبقية الوصول: عن بُعد
Apache OpenMeetings 9.1.0 (9773c59e) - Apache Software Foundation
تعيد InstallWizardPage توجيه الطلبات الجديدة بعد isInstalled(). تبقى صفحة Wicket المفتوحة قبل التثبيت الأول حيّة. تشغيل Finish على تلك الجلسة القديمة ينفّذ loadAll(cfg, true). تسجّل ImportInitvalues.checkInstalled رسالة "no need to install" ولا تعود. الإنهاء الثاني يُدخل مستخدم ADMIN+SOAP آخر.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية |
| الوصول | عن بُعد (/install دون مصادقة أثناء الإعداد الأول) |
| CWE | CWE-367، CWE-269 |
| CVSS | عالٍ: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| المنتج | Apache OpenMeetings |
| المتأثر | 9.1.0 (9773c59e1af327bf988018e661f456ae9997c29f) نافذة التثبيت الأول |
| المصادقة | لا شيء على جلسة المعالج القديمة |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18159 فقط. حزمة 9.1.0 الرسمية، غير مثبّتة، HTTP 5080. |
ثبّتُ الوسم 9.1.0، وأزلتُ الغلاف 9773c59e1af327bf988018e661f456ae9997c29f. تتطلب الصلاحية المتبقية صفحة معالج مفتوحة قبل اكتمال التثبيت الأول.
الوصول إلى /openmeetings/install بينما المثيل غير مثبّت بعد. الاحتفاظ بـ JSESSIONID ذلك. الانتظار حتى يُنهي مشغّل التثبيت الأول. إرسال POST Finish على الصفحة القديمة.
| الطريقة | المَصبّ | الصلاحية |
|---|---|---|
POST Finish قديم على المعالج (wizard-form-buttons-finish) | ImportInitvalues.checkInstalled يسجّل ويكمل (ImportInitvalues.java:607-612)؛ loadInitUserAndGroup | السلامة (مُثبتة مختبريًا): مستخدم ثانٍ staleadm بحقوق ADMIN، SOAP، LOGIN، DASHBOARD، ROOM. نجح تسجيل دخول SOAP. عدد قائمة المستخدمين=2. |
نفس loadAll(cfg, true) | الاستمرارية / SMTP / المسارات من النموذج القديم | السلامة (مُستنتجة): إعادة كتابة persistence.xml وإعدادات البريد من حقول المعالج التي يتحكم بها المهاجم. غير مطلوبة لتحقيق SUCCESS. |
مُثبت مختبريًا مقابل مُستنتج: تسجيل دخول ADMIN+SOAP الثاني مختبري. إعادة كتابة persistence.xml مُستنتجة من loadAll.
يتطلب: أن يكون المهاجم قد جلب /install قبل isInstalled(). ثم أكمل المشغّل التثبيت. ما زال معرّف صفحة Wicket نفسه يُرسَل. صورة docker الرسمية مثبّتة مسبقًا، لذا فهذه نافذة الإقلاع الأول لحزمة tarball (وأي إعادة تثبيت).
| السطح | السبب |
|---|---|
GET /install جديد بعد التثبيت | يعيد المُنشئ التوجيه إلى /signin (InstallWizardPage.java:31-34). المختبر: وصلت الجلسة الجديدة إلى signin. |
| تسجيل دخول SOAP دون مصادقة قبل التثبيت | health installed=false؛ يفشل تسجيل الدخول حتى إنهاء المعالج. |
| Tomcat manager / H2 console | manager مستبعد، H2 console معطّل على هذا التثبيت. |
يبدو قفل المُنشئ إصلاحًا كاملًا لـ "التثبيت بعد التثبيت". ما زالت checkInstalled تسجّل فقط. يخزّن Wicket الصفحة في الجلسة. الجلسة التي تجاوزت isInstalled() تحتفظ بزر Finish الذي ما زال يستدعي loadAll.
admin.sh -i هو JVM ثانٍ ولا يحمّل Tomcat CryptProvider، لذا يستخدم هذا المختبر معالج ويب ثانيًا كمثبّت أول والصفحة القديمة كمهاجم.
cd lab
./run.sh
Loopback http://127.0.0.1:18159/openmeetings. السطر الأخير من الشاهد:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
يجب أن تُرجع checkInstalled (أو ترمي استثناءً) عندما يكون التثبيت قد تم بالفعل. اربط Finish برمز تثبيت لمرة واحدة. أزل صفحة Wicket من الجلسة عندما تتبدّل isInstalled(). لا تُدرج ADMIN ثانيًا من loadInitUserAndGroup إذا كان هناك مسؤول موجود بالفعل.
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]
المورّد: [email protected]