
Element Web v1.12.29 - عالي - عن بُعد - الجلسة - شظية بيانات اعتماد الضيف تمحو جلسة حقيقية قبل whoami
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-fragment-guest
Element Web v1.12.29 - Element / New Vector
الفئة: تدمير الجلسة الوصول: عن بُعد
Lifecycle.loadSession يفضّل guest_user_id و guest_access_token من URL hash على restoreSessionFromStorage. الضيوف مفعّلون افتراضيًا (enableGuest={!config.disable_guests}). ملف config.json الخاص بـ app.element.io لا يضبط disable_guests. الدالة onTokenLoginCompleted تُزيل معاملات SSO و OIDC فقط. لا تُزيل مفاتيح الضيف أبدًا. ملف url_utils.ts يعلّق بالفعل بأن معاملات fragment هذه تبدو غير مستخدمة. لكنها لا تزال تتفوّق.
أي شخص يستطيع جعل مستخدم مسجّل الدخول يفتح رابط hash يحتوي على معاملات fragment الخاصة بالضيف، سيؤدي إلى تسجيل خروجه ومحو التشفير المحلي. رمز عشوائي كافٍ. لا يتم استدعاء whoami أبدًا.
| المعرّف | لا يوجد CVE بعد |
| CWE | CWE-384 / CWE-352 / CWE-613 |
| CVSS | مرتفع: 7.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H |
| المنتج | Element Web |
| المتأثر | وسم v1.12.29 v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). الضيوف مفعّلون (افتراضي). |
| المصادقة | مهاجم غير مصادَق. يجب على الضحية فتح (أو إعادة تحميل) رابط. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
جعل مستخدم مسجّل الدخول يفتح رابط hash يحتوي على معاملات fragment الخاصة بالضيف. يقوم العميل بتسجيل خروجه، ومحو التشفير المحلي، وربما يضعه في حساب ضيف يتحكم به المهاجم. هذا تسجيل خروج ومحو تشفير. ليس سرقة الرمز الحقيقي. وليس RCE على نظام التشغيل.
| الصلاحية | الطريقة / الهدف | الاستطلاع / السلامة / التوافر | مُثبت مختبريًا أو مُستنتج |
|---|---|---|---|
| تحليل بيانات اعتماد الضيف من الـ hash | url_utils.ts guest: { keys: ["guest_user_id", "guest_access_token"], location: "fragment" } | سلامة اختيار الجلسة | مُثبت مختبريًا. #/home?guest_user_id=...&guest_access_token=... أصبح guest_params. سلسلة الاستعلام وحدها لم تفعل ذلك. |
| تفضيل الضيف على جلسة مخزّنة غير ضيف | فرع Lifecycle.loadSession الذي يفضّل الضيف، السجل Using guest access credentials | السلامة | مُثبت مختبريًا. لم تتم استعادة @victim:example.org المُهيّأ. |
| محو localStorage و IndexedDB account و sessionStorage والتشفير | doSetLoggedIn(..., clearStorageEnabled=true) ثم clearStorage() | السلامة / توافر الجلسة المحلية | مُثبت مختبريًا. crypto_empty=yes، الرمز السابق اختفى. |
| تخطي التحقق من الرمز | مسار الضيف لا يستدعي /_matrix/client/v3/account/whoami أبدًا | السلامة | مُثبت مختبريًا. whoami_called=no. الرمز العشوائي not-a-real-token أدى إلى المحو رغم ذلك. |
| استمرار بيانات اعتماد ضيف المهاجم | persistCredentials بعد المحو | السلامة | مُثبت مختبريًا. after_user=@x:example.org، after_token=not-a-real-token، mx_is_guest=true. |
| التثبيت على ضيف حقيقي على HS الافتراضي | نفس الاستمرار إذا كان رمز الضيف صالحًا | السلامة | مُستنتج. استخدم المختبر رمزًا عشوائيًا، لذا لا يوجد تسجيل دخول حي على HS. |
| الاستمرار في فعل ذلك عند إعادة التحميل | تبقى مفاتيح الضيف في الـ hash؛ onTokenLoginCompleted لا يحذفها | السلامة | مُستنتج من تثبيت app.tsx. فتح المختبر الرابط مرة واحدة. |
مغلق على هذه البقايا: سرقة رمز الوصول الحقيقي (يُحذف، لا يُسرَّب). RCE / LPE على نظام التشغيل (Desktop nodeIntegration: false، sandbox). Element SPA الحي (how=gadget). سلسلة الاستعلام ?guest_user_id= (fragment فقط). disable_guests: true يحافظ على الجلسة غير الضيف. loadSession المُرقّع الذي يتجاهل الضيف عند وجود جلسة غير ضيف يحافظ عليها أيضًا.
بقايا نفس التثبيت: vector: Windows drive-letter، Univention ICS javascript: href.
ثبّتت Element Web v1.12.29 بعد إصدار GitHub في 22 سبتمبر 2026. loginToken الخاص بـ SSO موجود في سلسلة الاستعلام فقط ويُزال بعد الاستخدام. مفاتيح الضيف لا تزال موجودة في الـ fragment وتتفوّق على الاستعادة. التعليق في url_utils.ts هو الدليل: لقد شكّوا بالفعل في أن هذه المفاتيح محددة.
المنعطفات الخاطئة المسجّلة مسبقًا: اعتبار سلسلة الاستعلام ?guest_user_id= هي المتجه (المفاتيح موجودة في الـ hash)؛ تسمية هذا سرقة رمز (الرمز الحقيقي يُحذف، لا يُرسل)؛ توقّع disable_guests في إعدادات app.element.io (غير مضبوط). reverse shell. مسرحية.
أداة Gadget لوظائف التثبيت. ليس حاوية Element Web حية. how=gadget.
python3 element-fragment-guest-Abraxas-Labs.py
أو
cd lab
./run.sh
استهدف فقط http://127.0.0.1:19600. مشروع Compose element-fragment-guest. يتم تفكيك الحزمة بعد التشغيل.
SUCCESS element-fragment-guest how=gadget guest-wipe=yes prior-kept=no garbage-token=yes disable-guests-keeps=yes ELEMENT-FRAGMENT-GUEST-WITNESS
تجاهل معاملات fragment الخاصة بالضيف عند وجود جلسة غير ضيف بالفعل. تحقق من رمز الضيف عبر /_matrix/client/v3/account/whoami قبل clearStorage. أزل guest_user_id و guest_access_token بنفس طريقة إزالة رموز SSO. اجعل disable_guests: true افتراضيًا لـ app.element.io المستضاف.
Lifecycle.ts (loadSession يفضّل الضيف)url_utils.tsapp.tsx (enableGuest={!config.disable_guests})GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.