
Plausible Analytics master d44e104 - عالية - عن بُعد - بقايا صلاحيات - محرر أشخاص HTML تسريبات نقل nanoid
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · plausible-editor-invite
Plausible Analytics إصدار المجتمع، فرع GitHub الرئيسي d44e104ae3943a9240d5cb6b62e67dff0f069d3a (2026-10-16) - Plausible Insights OÜ
التصنيف: صلاحية متبقية (تسريب رمز الدعوة). الوصول: عن بُعد (محرر ضيف أو محرر فريق لذلك الموقع).
Sites.list_people/1 يحدد guest_invitations.invitation_id وteam_site_transfers.transfer_id الخامّين. settings_people.html.heex يضع ذلك الـ nanoid المكوّن من 21 حرفًا في id="invitation-#{invitation.invitation_id}" لكل صف معلّق. إعدادات الأشخاص ليست ضمن @special_cased_actions في SiteController، لذا يسمح AuthorizeSiteAccess بـ :editor. محرر الضيف يُعيَّن إلى دور الموقع :editor. مشاهد الضيف يحصل على 404.
Nanoid.generate/0 هو حامل رمز التسجيل من الدعوة. طلب غير مصادق عليه GET /register/invitation/:invitation_id يبحث بالمعرّف فقط. LiveView register يستبدل البريد الإلكتروني المُرسَل بـ invitation.email. الإعداد الافتراضي في CE هو DISABLE_REGISTRATION=invite_only وENABLE_EMAIL_VERIFICATION=false. القبول يتم عبر POST /sites/invitations/:id/accept بمطابقة بريد citext.
محرر ضيف يستطيع بالفعل رؤية HTML صفحة الأشخاص يقرأ nanoid نقل ملكية معلّق، ثم يسجّل بصفة المدعو، ويقبل. ينتقل الموقع إلى الفريق الشخصي للمهاجم.
| ID | لا يوجد CVE بعد |
| CWE | CWE-200 / CWE-269 |
| CVSS | عالٍ: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L |
| المنتج | Plausible Analytics |
| المتأثر | فرع GitHub الرئيسي d44e104ae3943a9240d5cb6b62e67dff0f069d3a (2026-10-16). آخر وسم CE v3.2.1 (e4f5a87a5570bd61605217e7ceb376636db8eddb، 2026-05-15) متأخر بخمسة أشهر. SECURITY.md يوجّه المشغّلين إلى تشغيل :latest. التثبيت هو HEAD الحالي. CE MIX_ENV=ce يترجم lib/ فقط. |
| المصادقة | محرر ضيف مصادق عليه (:guest_member, :editor) أو محرر فريق لذلك الموقع. ليس غير مصادق عليه. ليس مشاهد ضيف. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18180 (http) 18181 (postgres) 18182 (clickhouse http) فقط |
المتبقي #1 من بقايا Plausible Analytics. نفس التثبيت، حزمة أخرى: plausible-traffic-notify (إسناد جماعي لـ site_id في PUT traffic-change-notification). هذه الحزمة هي التي تسرق نقل ملكية معلّقًا.
محرر ضيف مصادق عليه أو محرر فريق لموقع لديه دعوة ضيف معلّقة و/أو نقل ملكية. يحتاج إلى ملف تعريف ارتباط جلسة عادي. لا مالك، لا مسؤول، لا LiveView لمسؤول أعلى. لا يقوم بتخمين الـ nanoid المكوّن من 21 حرفًا. يقرأه من HTML المسموح له بتحميله، ثم يسجّل بصفة المدعو.
جدول الصلاحيات (شامل). نفس المعيار كـ Signal-Server Dropwizard admin: الطريقة + المسار، ما يمنحه ذلك الاستدعاء، الاستطلاع مقابل السلامة مقابل التوافر، مُثبت مختبريًا مقابل مُستنتج، السطح المجاور الذي يبقى مغلقًا.
| المحور | الطريقة + المسار | ما يمنحه | المصدر |
|---|---|---|---|
| الاستطلاع | GET /:domain/settings/people بصفتك ضيفًا/محرر فريق | الصفوف المعلّقة تُصيّر id="invitation-<nanoid>". الـ nanoid هو invitation_id أو transfer_id. نفس الموقع فقط. بريد المدعو موجود أيضًا في الجدول. | مُثبت مختبريًا. صفحة people للمحرر 200 سرّبت nanoid Hc8DiBC2q08mv5LFmBysu |
| الاستطلاع | GET /register/invitation/:id بدون مصادقة | بريد المدعو في نموذج التسجيل. البحث يتم بالمعرّف فقط (find_by_id_unified). | مُثبت مختبريًا. أظهر HTML التسجيل [email protected] |
| السلامة | LiveView register على /register/invitation/:id | يُستبدل user[email] المُرسَل بـ invitation.email. حساب CE جديد على عنوان المدعو. التحقق من بريد CE معطّل افتراضيًا. وضع الدعوة فقط لا يزال يسمح بـ :invitation. | مُثبت مختبريًا. أُرسل [email protected]؛ البريد المخزّن كان [email protected] |
| السلامة | POST /sites/invitations/:id/accept بذلك الحساب الجديد | نقل الملكية المعلّق ينقل sites.team_id إلى فريق newowner الشخصي. صف النقل يختفي. | مُثبت مختبريًا. sites.team_id 1 → 2 |
| السلامة | نفس القبول على دعوة ضيف معلّقة لذلك البريد | عضوية جديدة على ذلك الموقع (محرر مقابل محرر ليس مكسبًا). صفوف الفريق/الضيف/النقل المعلّقة الأخرى لذلك البريد تصبح أيضًا قابلة للقبول. | المصدر (InvitationController.accept_invitation) |
| الإتاحة | بعد قبول النقل | الفريق الأصلي يفقد الموقع. الإحصاءات تستمر بالعمل على الفريق الجديد. | مُثبت مختبريًا. team_id انتقل |
يبقى مغلقًا على هذا التثبيت
| المحور | الطريقة + المسار | لماذا هو مغلق |
|---|---|---|
| الاستطلاع | عارض ضيف GET /:domain/settings/people | 404. العارض ليس :editor. مُثبت مختبريًا. |
| السلامة | قبول المحرر POST /sites/invitations/:id/accept لمعرّف النقل المسرّب | تطابق البريد. المحرر ليس [email protected]. الموقع يبقى على الفريق 1. مُثبت مختبريًا. |
| السلامة | تسجيل بدون مصادقة دون معرّف دعوة صالح | check_registration_enabled(:default) مقابل :invitation. خطأ whoareme 02، مُرقّع. |
| الاستطلاع | تخمين nanoid بـ 21 حرفًا | أبجدية آمنة لعناوين URL، 21 حرفًا. خارج هذا المتبقي. |
| الاستطلاع | أحداث ClickHouse، SMTP، صفحات people لمواقع أخرى | نفس الموقع فقط. لا صلاحية إدارة ClickHouse. لا قراءة لصندوق البريد. |
| السلامة | دعوة ونقل المالك/المدير | يمكنهم ذلك بالفعل. هذا المتبقي يخص المحرر الذي لا يستطيع. |
| السلامة | LiveView للمدير الأعلى، صدفة نظام التشغيل، extra/lib EE SSO | مغلق. مختبر CE. لا صدفة. |
لا أدّعي الاستيلاء على حساب مستخدم مسجّل مسبقًا دون مصادقة، ولا صدفة عكسية، ولا تفريغ ClickHouse. حالة الخطورة العالية هي نقل ملكية معلّق (أو دعوات إلى مواقع/فرق أخرى لذلك البريد) على CE الافتراضي: وضع الدعوة فقط مع تعطيل التحقق من البريد. EE يضبط دائمًا email_verified: false و/activate يحتاج صندوق بريد المدعو.
أغلق خطأ whoareme 02 (المُفصح عنه في 2026-05-22) تسجيل LiveView في وضع الدعوة فقط دون دعوة صالحة، إضافة إلى إسناد جماعي لـ site_id في Shield/Goal. جلست على master الحالي على أي حال. SECURITY.md يرقّع فقط أحدث MAJOR.MINOR ويخبر المشغّلين بتشغيل :latest. آخر وسم CE v3.2.1 متأخر خمسة أشهر عن HEAD.
قرأت كل موضع يغادر فيه invitation_id من نوع nanoid قاعدة البيانات. القبول والتسجيل يعاملانه كحامل صلاحية. إعدادات people تضعه في id= داخل HTML لزر الحذف. الحذف للمالك/المدير فقط. أما id= فليس كذلك. المحررون يحمّلون الصفحة.
run.sh يستنسخ التثبيت إذا كان plausible-lab:d44e104ae3943a مفقودًا، ويشغّل compose مع DISABLE_REGISTRATION=invite_only، ويزرع مالكًا / محررًا / عارضًا / نقلًا معلّقًا، ثم يقارن HTML صفحة people.
مسارات خاطئة مسجّلة مسبقًا: معاملة تسجيل الضيف كقبول تلقائي (يلزم POST /sites/invitations/:id/accept بعد تسجيل الدخول)؛ معاملة قبول المحرر للنقل المسرّب كسرقة (تطابق البريد، لا نقل)؛ تسجيل الدخول 429 من CE login_ip=5 في الدقيقة (أبقِ جلسة واحدة لكل مستخدم)؛ الادعاء بأن العارض يمكنه قراءة people (404). مسرح.
python3 plausible-editor-invite-Abraxas-Labs.py
أو
cd lab
./run.sh