Nextcloud 35.0.0 — سر المشاركة الموحّدة هو كلمة مرور تطبيق غير محدودة النطاق لكامل شجرة الملفات الخاصة بالمشارِك
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-federated-ocm-token
Nextcloud Server 35.0.0 - Nextcloud GmbH
يُصدر سرّ المشاركة الموحّدة (federated share secret) ككلمة مرور تطبيق PERMANENT_TOKEN غير محدودة النطاق للمشارِك. وتعيده واجهة برمجة التطبيقات للمستلم باسم refresh_token. وإعادة استخدامه كـ Bearer على WebDAV الخاص بالمرسل تسجّل الدخول بصفة المشارِك وتقرأ ملفات لم تُشارَك قط.
أي جهة خبيثة تشاركها ملفًا واحدًا عبر المشاركة الموحّدة يمكنها تسجيل الدخول بصفتك على Nextcloud الخاص بك، وتجاوز المصادقة الثنائية، وقراءة أو الكتابة فوق جميع ملفاتك، وليس فقط الملف الذي شاركته.
| ID | لا يوجد CVE بعد |
| CWE | CWE-269, CWE-287 |
| CVSS | حرج: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N (المستلم الموحّد). تحويل الرابط العام أسوأ (لا يوجد حساب مستلم على النظير). |
| المنتج | Nextcloud Server |
| المتأثر | 35.0.0 (da02f41) الرسمي nextcloud:35.0.0-apache |
| المصادقة | مستلم موحّد (أو محوّل رابط عام) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
تشارك ملفًا واحدًا أو مجلدًا مع bob على Nextcloud آخر. يُصدر Nextcloud سرًّا من 32 حرفًا، ويخزّنه كـ كلمة مرور تطبيقك، ويسلّم ذلك السرّ إلى Bob باسم refresh_token.
ثم يقوم Bob (أو أي شخص يحوّل رابطك العام إلى مشاركة موحّدة) بما يلي:
لا يحصلون على shell PHP على المضيف. ولا يحتاجون إلى كلمة مرورك. لا تقبل المشاركة ولا تستدعِ OCM access-token أولًا: ذلك التبادل يقفل نطاق نظام الملفات. يثبت المختبر السرّ قبل التبادل.
المشاركة يُفترض أن تكون مشاركة. ملف واحد. مجلد واحد. قرأت FederatedShareProvider::createFederatedShare على الوسم v35.0.0. يُصدر سرًّا من 32 حرفًا كـ IToken::PERMANENT_TOKEN للمشارِك دون نطاق. وPublicKeyToken::getScopeAsArray تجعل SCOPE_FILESYSTEM => true افتراضيًا. تلك كلمة مرور تطبيق. وSession::tryTokenLogin تقبل Bearer دائمًا.
عمل تبادل OCM (PR #57234 / #57166) يقفل نطاق نظام الملفات بالفعل بعد التبادل الأول. استخدم أحد الكتابات غير الرسمية ذلك الانتقال بعد التبادل. جرّبته أولًا. على هذه الشجرة تكون الرمز المتبادل TEMPORARY، باسم OCM Access Token، ويرفضه /remote.php/dav (allowOcmAccessToken false). قال DAV لا.
لذلك لم أتبادل. بقي ocm_discovery_enabled false حتى لا يبادله المستلم نيابة عني. صندوقان رسميان nextcloud:35.0.0-apache، مع overwrite.cli.url كـ docker DNS (http://sender / http://recipient). اترك ذلك على 127.0.0.1 وستتحدث S2S مع نفسها.
تشارك Alice ملفًا واحدًا مع bob@http://recipient. يقرأ Bob المشاركات المعلّقة. طول refresh_token هو 32. طول access_token هو 0. طلب Bearer GET غير مصادق عليه لملف الشاهد الخاص بـ Alice، الذي لم يكن في المشاركة قط، أعاد 200، مع X-User-Id: alice.
cd lab
./run.sh
استهدف فقط http://127.0.0.1:18340 (المرسل) و:18341 (المستلم).
SUCCESS NEXTCLOUD-OCM-PERMANENT-TOKEN who=federated-recipient uid=alice NEXTCLOUD-OCM-PERMANENT-TOKEN-WITNESS
أصدر السرّ الموحّد بنطاق نظام ملفات false من أول إدراج. لا تقبل ذلك السرّ كـ Bearer/Basic على /remote.php/dav. التبادل الأول يقفل نطاق FS بالفعل؛ كان يجب ألا يمنح الإنشاء كلمة مرور تطبيق قط.
GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. دون أي ضمان.