
Element Desktop v1.12.29 - عالي - محلي - ملف - ناقل: يقرأ البروتوكول ملفات Windows خارج سجن asar
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-vector-drive-letter
Element Desktop v1.12.29 - Element Creations Ltd
الفئة: قراءة ملفات الوصول: محلي
apps/desktop/src/electron-main.ts يسجّل vector: كبروتوكول ملفات مميّز. الحماية الوحيدة هي relTarget.startsWith("..") بعد path.normalize(path.join(...pathname.split("/").slice(2))). على Windows، دمج C: وWindows وwin.ini يكون بالفعل C:\Windows\win.ini. المسارات المطلقة لا تبدأ بـ ..، لذا يسمح لها الفحص بالمرور. كما أن ملاحظة Electron الخاصة بالبروتوكولات المخصّصة ترفض path.isAbsolute. دالة path.join في POSIX لا تعتبر C: مسارًا مطلقًا، لذا فإن Linux وmacOS ليستا ضمن هذا الثغرة. will-navigate يسمح بمرور vector:.
يمكن لـ XSS في الـ Renderer أو DevTools أو أي عملية محلية أخرى تنفيذ fetch("vector://vector/webapp/C:/Windows/win.ini") وقراءة الملفات التي تستطيع عملية Element فتحها.
| المعرّف | لا يوجد CVE بعد |
| CWE | CWE-22 / CWE-73 |
| CVSS | مرتفع: 8.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N |
| المنتج | element-web Desktop (apps/desktop) |
| المتأثر | v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). على Windows فقط. |
| المصادقة | renderer محلي (DevTools / XSS) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
XSS في الـ Renderer أو DevTools أو أي عملية محلية أخرى تستطيع الوصول إلى vector:. لم يتم تشغيل Element Desktop الأصلي على Windows. الأداة تنسخ محلّل URL الخاص بالـ pin وتستخدم Node path.win32.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبت مختبريًا أو مُستنتج |
|---|---|---|---|
| قراءة ملف تستطيع عملية Element فتحه | fetch("vector://vector/webapp/C:/Windows/win.ini"). الحماية الوحيدة هي relTarget.startsWith(".."). دمج حرف محرك الأقراص يكون مطلقًا، لذا يمر الفحص. path.win32.resolve(asar, relTarget) يكون C:\Windows\win.ini | استطلاع | مُثبت مختبريًا على أداة محلّل URL. المحتوى هو ELEMENT-VECTOR-DRIVE-LETTER-WITNESS. لم يتم تشغيل Desktop الأصلي |
نفس القراءة لـ electron-config والملفات الشخصية وملفات مستخدمين آخرين على نفس ACL | نفس طلب vector://vector/webapp/C:/... | استطلاع | مُستنتج. المختبر زرع win.ini وليس أسرارًا حقيقية |
| الاستيلاء على حساب Matrix إذا حمّل الإطار الرئيسي HTML مهاجم موجود مسبقًا على القرص | will-navigate يسمح بمرور vector:. HTML خبيث على vector://vector يحصل على preload / window.electron (الرموز، Seshat، clearStorage) | السلامة | مُستنتج من webcontents-handler.ts وpreload. لم يقم المختبر بتوجيه BrowserWindow |
اجتياز ../ لشجرة asar | vector://vector/webapp/../ | لا ينطبق | مُغلق هنا. WHATWG URL يدمجه؛ المعالج يعيد FILE_NOT_FOUND (-6) |
| طلب حرف محرك الأقراص على POSIX / macOS / Linux | path.posix.join يترك C:/Windows/win.ini تحت asar | لا ينطبق | مُغلق هنا. الأداة posix 404، لا شاهد |
| RCE / LPE على مستوى نظام التشغيل | nodeIntegration: false، app.enableSandbox() | لا ينطبق | مُغلق. ليس هذه الثغرة |
ثغرات أخرى في نفس الـ pin: fragment guest wipe، Univention ICS javascript: href.
ثبّتُّ element-hq/element-web v1.12.29 بعد إصدار GitHub في 22 سبتمبر 2026. ثغرات Timeline XSS وHTML-export XSS (GHSA-wqmv) وhomepage HTML (GHSA-wrcp) وwidget media token (GHSA-3jm3) وElement Call keys (GHSA-69q3) مُغلقة على هذا الـ tag. لا يزال البروتوكول المخصّص في Desktop يفحص فقط startsWith("..").
new URL("vector://vector/webapp/C:/Windows/win.ini") يُبقي C: كجزء من المسار. path.win32.join("C:", "Windows", "win.ini") يكون C:\Windows\win.ini. دالة Node path.win32.join(asar, abs) تدمج؛ بينما path.win32.resolve يُسقط جذر asar.
مسارات خاطئة مسجّلة مسبقًا: اعتبار ../ هي الثغرة (WHATWG يدمجها، المعالج يعيد 404)؛ اعتبار C: في POSIX نفس الخطأ (posix join يبقى تحت asar)؛ تضخيم قراءة الملف إلى RCE على مستوى نظام التشغيل (sandbox وnodeIntegration: false يبقيان مفعّلين). reverse shell. مسرحية.
أداة محلّل URL. Node path.win32 مقابل path.posix. لا توجد عملية Element Desktop على Windows. /lab/oracle/win.ini المزروع يمثّل C:\Windows\win.ini. /lab/asar/index.html هو سجن asar.
python3 element-vector-drive-letter-Abraxas-Labs.py
أو
cd lab
./run.sh
استهدف فقط http://127.0.0.1:19610. مشروع Compose باسم element-vector-drive-letter. يتم تفكيك الحزمة بعد التشغيل.
SUCCESS element-vector-drive-letter how=gadget win32-drive-letter=200 posix-drive-letter=404 control-dotdot=404 patched-isabs=404 ELEMENT-VECTOR-DRIVE-LETTER-WITNESS
بعد normalize، ارفض path.isAbsolute(relTarget) واشترط أن يبقى path.resolve(baseDir, relTarget) تحت path.resolve(baseDir) (path.relative، وارفض ..).
electron-main.ts (registerFileProtocol)webcontents-handler.ts (will-navigate)GNU Affero GPL v3.0. راجع LICENSE. مختبر loopback فقط. لا ضمان.