Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-46558 — اعتمد نظام Plane’s V2 asset subsystem على workspace slugs و asset UUIDs دون فرض فحوصات العضوية الصحيحة، مما يسمح لمستخدم موثّق واحد بقراءة ونسخ وحذف والكتابة فوق الأصول في مساحات عمل أخرى. | Kitploit
أدوات/GitHubGitHub/0xmrma/cve-2026-46558
تحليل الثغرات الأمنيةاستغلال تطبيقات الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليمموارد منسقة
GitHub0xmrma/cve-2026-46558

CVE-2026-46558

اعتمد نظام Plane’s V2 asset subsystem على workspace slugs و asset UUIDs دون فرض فحوصات العضوية الصحيحة، مما يسمح لمستخدم موثّق واحد بقراءة ونسخ وحذف والكتابة فوق الأصول في مساحات عمل أخرى.

عرض المستودع
منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-46558

النظام الفرعي للأصول V2 في Plane وثق في slugs مساحات العمل ومعرفات UUID للأصول دون فرض عمليات التحقق المناسبة من العضوية، مما سمح لمستخدم مصادق واحد بقراءة الأصول ونسخها وحذفها والكتابة فوقها في مساحات عمل أخرى.

مقدمة

اكتشفت هذه الثغرة أثناء مراجعة Plane، منصة إدارة المشاريع مفتوحة المصدر، مع سؤال محدد جدًا في ذهني:

هل تقوم نقاط نهاية الأصول V2 بفرض حدود مساحات العمل فعليًا، أم أنها تثق في slugs مساحات العمل ومعرفات UUID للأصول التي يقدمها المهاجم إلى حد كبير جدًا؟

في هذه الحالة، كانت الإجابة لا.

كشف النظام الفرعي للأصول V2 في Plane عن ثغرتين مرتبطتين في التفويض كسرتا عزل مساحة العمل لأي مستخدم مصادق:

  • نقطة نهاية الأصول على مستوى مساحة العمل لم تفرض عضوية مساحة العمل المستهدفة قبل عمليات الأصول
  • تدفق تكرار الأصول أذن فقط لمساحة العمل الوجهة ووثق في معرف UUID للأصل المصدر دون التحقق من الوصول إلى مساحة العمل المصدر

مما جعل إساءة استخدام الأصول عبر مساحات العمل ممكنة.

في إثبات المفهوم (PoC) الذي قمت بالتحقق منه، تمكن مستخدم عادي واحد في مساحة عمل Bravo من:

  • تنزيل أصل خاص مرفوع من Alpha
  • تكرار ذلك الأصل إلى مساحة عمل Bravo الخاصة به
  • حذف الأصل الأصلي من Alpha
  • الكتابة فوق شعار مساحة عمل Alpha بمحتوى يتحكم فيه المهاجم

تم تخصيص CVE-2026-46558 لهذه الثغرة لاحقًا.

Plane: Plane على GitHub
CVE: CVE-2026-46558

أثر هذا على Plane، الذي يُقدم على موقعه الرسمي على أنه يُستخدم من قبل أكثر من 50,000 فريق حول العالم. كما تسلط Plane الضوء على اعتماد مفتوح المصدر قوي، بما في ذلك أكثر من 46,000 نجمة على GitHub و أكثر من 1,000,000 عملية سحب لـ Docker، وتظهر مؤسسات مثل Tencent و Accenture و Microsoft و Amazon.

photo0

سلسلة الهجوم

مهاجم مصادق في مساحة العمل B ← نقطة نهاية الأصول V2 على مستوى مساحة العمل تثق في slug مساحة العمل المستهدفة ومعرف UUID للأصل دون التحقق المناسب من العضوية ← قراءة / تصحيح / حذف موقّعة مسبقًا ضد أصول مساحة العمل A + تدفق تكرار الأصول يثق في معرف UUID للأصل المرفوع المصدر ← كشف ونسخ وحذف واستبدال العلامات التجارية عبر مساحات العمل


ما يفعله Plane

Plane هي منصة إدارة مشاريع مفتوحة المصدر تُستخدم لإدارة:

  • المهام
  • المشكلات
  • سباقات السرعة
  • المستندات
  • التصنيف
  • العلامات التجارية والأصول على مستوى مساحة العمل

وهذا يعني أن نظام الأصول الفرعي الخاص بها يقع على حدود ثقة حقيقية.

السؤال المهم هنا لم يكن ما إذا كانت Plane تدعم الرفع.

السؤال الحقيقي كان:

هل يفرض Plane عزل مساحة العمل عندما يشير مستخدم مصادق واحد إلى أصول مملوكة لمساحة عمل أخرى؟

في هذه الحالة، لم يفعل.


لماذا كانت هذه الثغرة تستحق النظر

الكثير من مراجعات التطبيقات متعددة المستأجرين تركز أولاً على نقاط نهاية المسؤول الواضحة أو تحديثات الإعدادات المباشرة.

هذا يغفل فئة أخطاء شائعة وحقيقية جدًا:

الوصول إلى الكائنات الثانوية من خلال أنظمة الملفات أو الأصول المشتركة

من السهل ارتكاب الأخطاء في أنظمة الأصول لأنها غالبًا ما تجمع بين:

  • معرفات يتحكم فيها المستخدم
  • طبقات غير مباشرة للتخزين
  • ربط كائنات تعتمد على البيانات الوصفية
  • إنشاء روابط URL موقعة مسبقًا
  • أنواع كيانات متعددة خلف مسار مشترك

هذا هو بالضبط النوع من الأماكن الذي تضعف فيه حدود المستأجرين بصمت.

هذه المشكلة لم تكن حول تلف التخزين. لم تكن حول S3 نفسه. لم تكن حول معالجة MIME للرفع.

كانت فشلًا في حدود التفويض:

  • معرفات يتحكم فيها المهاجم عبرت الحدود
  • الخادم حل الكائنات عبر مساحة العمل
  • كان التفويض غير مكتمل أو مفقودًا
  • إجراءات الأصول المميزة لا تزال ناجحة

هذا كافٍ لإنشاء ثغرة حقيقية.


الحدود التي ركزت عليها

لم أتعامل مع Plane بالتجربة العمياء لنقاط نهاية عشوائية أو تخمين معرفات UUID بدون نموذج.

النهج الأقوى هو تحديد الحدود الواعدة للعزل أولاً.

بالنسبة لـ Plane، كان ذلك النظام الفرعي للأصول V2.

لماذا؟

لأن نظام الأصول المشترك يصبح خطيرًا عندما:

  • توجد عدة مساحات عمل
  • يتم الإشارة إلى الكائنات المرفوعة بواسطة UUID
  • slugs مساحات العمل تكون مدخلات مسار يتحكم فيها المهاجم
  • يحول التطبيق لاحقًا عمليات البحث الناجحة إلى مسارات تنزيل أو تحوير موقّعة مسبقًا

كان هذا هو الحدود الصحيحة للفحص.

وكان بالضبط المكان الذي عاشت فيه الثغرة.


السبب الجذري

كان هذا في الحقيقة فشلين في التفويض مرتبطين في نفس النظام الفرعي.

السبب الجذري 1: مسارات أصول مساحة العمل تفتقد لإنفاذ العضوية

تم عرض مسارات الأصول على مستوى مساحة العمل من خلال:

  • apps/api/plane/app/urls/asset.py:50-56

كانت المعالجات الضعيفة في:

  • apps/api/plane/app/views/asset/v2.py:314
  • apps/api/plane/app/views/asset/v2.py:379
  • apps/api/plane/app/views/asset/v2.py:400
  • apps/api/plane/app/views/asset/v2.py:409

المشكلة كانت بسيطة.

WorkspaceFileAssetEndpoint قبلت slug مساحة العمل ومعرف UUID للأصل، ثم حلت الكائنات مباشرة مثل:

root@kitploit:~
workspace = Workspace.objects.get(slug=slug)

و:

root@kitploit:~
asset = FileAsset.objects.get(id=asset_id, workspace__slug=slug)

دون فرض أن المتصل هو بالفعل عضو مخول في مساحة العمل المستهدفة أولاً.

هذا يعني أن نقطة النهاية لا تزال قادرة على:

  • إنشاء الأصول
  • إنهاء الأصول
  • حذف الأصول
  • إرجاع روابط URL للتنزيل الموقّعة مسبقًا

لكائنات مساحة عمل أخرى.

السبب الجذري 2: تكرار الأصول وثق في معرف UUID للأصل المصدر

تم تعيين مسار تكرار الأصول من خلال:

  • apps/api/plane/app/urls/asset.py:100-101

المنطق الضعيف كان في:

  • apps/api/plane/app/views/asset/v2.py:736-780

كان لمساحة العمل الوجهة معدّل تفويض. لكن البحث عن الأصل المصدر لم يكن لديه.

تم تحميل الكائن المصدر باستخدام:

root@kitploit:~
original_asset = FileAsset.objects.filter(id=asset_id, is_uploaded=True).first()

هذا يعني أن المتصل يحتاج فقط:

  • وصول صالح إلى مساحة العمل الوجهة
  • معرف UUID لأصل مصدر تم رفعه

لم يكن هناك تحقق من أن المتصل ينتمي إلى مساحة العمل المصدر التي تملك ذلك الأصل بالفعل.

هذا هو كل الثغرة الثانية.


لماذا هذه مشكلة أمنية، وليست مجرد منطق وصول سيئ

الفرق المهم هو التأثير عبر مساحات العمل.

الكثير من أخطاء التفويض يتم التقليل من شأنها على النحو التالي:

"لا تزال تتطلب تسجيل الدخول"

هذا يغفل النقطة.

السؤال الحقيقي ليس:

"هل المتصل مصادق؟"

السؤال الحقيقي هو:

"هل المتصل مخول لمساحة العمل المحددة والأصل المحدد الذي يتم التعامل معه؟"

في Plane، كانت الإجابة لا.

هذا يحول ما قد يبدو كمعالجة عادية للكائنات إلى مشكلة أمنية حقيقية متعددة المستأجرين.

هناك فرق واضح بين:

  • الوصول المصادق داخل مساحة عملك الخاصة
  • والوصول المصادق الذي يعبر حدود مستأجر آخر

كانت هذه المشكلة في الحالة الثانية بالتأكيد.


إثبات المفهوم (PoC)

لقد قمت بالتحقق من المشكلة محليًا ضد Plane Community Edition 1.2.3 باستخدام مستخدمين عاديين في مساحتي عمل غير مرتبطتين:

  • Alpha في مساحة العمل alpha-20260323072017
  • Bravo في مساحة العمل bravo-20260323072017

استخدمت Alpha لإنشاء أصل خاص مرفوع مشروع في مشكلة.

معرف الأصل الخاص الذي تم التحقق منه في تشغيلتي كان:

root@kitploit:~
6ed6ed62-d1b2-4399-8220-336c01b7d72c

الحالة 1: قراءة غير مصرح بها من مساحة عمل أخرى

كمستخدم Bravo، طلبت:

root@kitploit:~
GET /api/assets/v2/workspaces/alpha-20260323072017/6ed6ed62-d1b2-4399-8220-336c01b7d72c/

أعادت Plane:

root@kitploit:~
HTTP/1.1 302 Found

مع رابط URL تنزيل موقّع مسبقًا لأصل Alpha.

تطابق تجزئة الملف الذي تم تنزيله تمامًا مع أصل Alpha الخاص الأصلي:

root@kitploit:~
original:          0d4d070f550ba59ba6b30bee62343cf68ea221af7034f131f72f6409cf5a598e
unauthorized read: 0d4d070f550ba59ba6b30bee62343cf68ea221af7034f131f72f6409cf5a598e

أثبت ذلك أن مسار القراءة عبر حدود مساحة العمل بنجاح.


الحالة 2: تكرار عبر مساحات العمل من خلال الثقة في UUID المصدر

كمستخدم Bravo، طلبت بعد ذلك:

root@kitploit:~
POST /api/assets/v2/workspaces/bravo-20260323072017/duplicate-assets/6ed6ed62-d1b2-4399-8220-336c01b7d72c/

أعادت Plane:

root@kitploit:~
HTTP/1.1 200 OK

وأنشأت أصلًا مكررًا في جانب المهاجم:

root@kitploit:~
72d51497-ccc1-4546-ba14-28fae5d37dbb

تطابق تجزئة SHA-256 للملف المكرر تمامًا مع أصل Alpha الأصلي:

root@kitploit:~
0d4d070f550ba59ba6b30bee62343cf68ea221af7034f131f72f6409cf5a598e

أثبت ذلك أن معرف UUID للأصل المصدر وحده كان كافيًا لنسخ محتوى عبر مساحة عمل إلى مساحة عمل يتحكم فيها المهاجم.


الحالة 3: حذف غير مصرح به لأصل الضحية

كمستخدم Bravo، أرسلت بعد ذلك:

root@kitploit:~
DELETE /api/assets/v2/workspaces/alpha-20260323072017/6ed6ed62-d1b2-4399-8220-336c01b7d72c/

أعادت Plane:

root@kitploit:~
HTTP/1.1 204 No Content

عندما جلب Alpha ذلك الأصل لاحقًا، أعاد الخادم:

root@kitploit:~
HTTP/1.1 404 Not Found

أثبت ذلك تأثيرًا على سلامة مساحة العمل عبر الحدود، وليس مجرد كشف.


الحالة 4: الكتابة فوق شعار مساحة العمل غير مصرح بها

كمستخدم Bravo، قمت بإنشاء أصل WORKSPACE_LOGO ضد مساحة عمل Alpha من خلال مسار أصول مستوى مساحة العمل الضعيف، قمت برفع محتوى يتحكم فيه المهاجم، وأكملته.

بعد ذلك، أشارت البيانات الوصفية لمساحة عمل Alpha إلى أصل الشعار الذي يتحكم فيه المهاجم:

root@kitploit:~
c1032f06-3cf5-4f7e-b139-e6976d8c567d

تطابق تجزئة الشعار النهائي الذي تم تنزيله تمامًا مع حمولة المهاجم:

root@kitploit:~
expected: b9d1ef1de88d61bf55dd18055839bacacb832a752e17a7312547f641113d0e7b
observed: b9d1ef1de88d61bf55dd18055839bacacb832a752e17a7312547f641113d0e7b

أثبت ذلك مسارًا مرئيًا للكتابة فوق الشعار عبر مساحة العمل، وليس مجرد مشكلة وصول خلفية مخفية.


لماذا السلسلة الكاملة مهمة

أي من النتائج المذكورة أعلاه كان سيكون كافيًا لتبرير تقرير ثغرة حقيقي.

لكن التحقق من السلسلة الكاملة كان مهمًا لسببين.

أولاً

أظهر أن المشكلة لم تقتصر على التعرض للقراءة فقط.

نفس الحدود الضعيفة مكنت:

  • الكشف
  • النسخ
  • الحذف
  • الكتابة فوق

هذا يجعل التأثير أقوى بكثير من مجرد IDOR ضيق "يمكنه جلب ملف واحد".

ثانيًا

أظهر أن مساري الكود كانا مرتبطين لكن مستقلاً بأهمية كل منهما.

ثغرة واحدة كشفت عمليات الأصول على مستوى مساحة العمل مباشرة. الثغرة الثانية حولت معرفات UUID للأصول المرفوعة إلى بدائية أولية لتسريب البيانات عبر التكرار.

هذا جعل القصة الأمنية الشاملة أكثر صعوبة للرفض.


التحقق من النطاق

التأثير الأكثر وضوحًا للكتابة فوق الذي تحققت منه كان:

  • WORKSPACE_LOGO

كان ذلك متعمدًا لأنه سهل التحقق ويظهر فشلًا واضحًا في سلامة المستأجرين.

لكن نقطة النهاية لم تقتصر على شعارات مساحة العمل.

تدفق الأصول الضعيف على مستوى مساحة العمل قبل أيضًا سياقات كيانات متعددة، بما في ذلك:

  • أغلفة المشاريع
  • صور المستخدمين
  • محتوى المشكلات
  • محتوى الصفحات
  • محتوى التعليقات

هذا كان مهمًا لأنه أظهر أن الثغرة كانت هيكلية، وليست مرتبطة بحقل علامة تجارية واحد.

لقد تحققت من مسار شعار مساحة العمل مباشرة. مسار الكود الأوسع اقترح بشدة أن سياقات إضافية مدعومة بالأصول كانت معرضة لنفس خطأ التفويض.


الخطورة والتصنيف

تم تصنيف هذه الثغرة بشكل معقول على أنها عالية.

تصنيف الإفصاح كان:

  • CWE-862: التفويض المفقود
  • CWE-639: تجاوز التفويض من خلال مفتاح يتحكم فيه المستخدم
  • CVSS:
root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L

هذا التصنيف منطقي.

الادعاء ليس أن مهاجمًا غير مصادق يمكنه اختراق Plane من الصفر. الادعاء هو أن أي مستخدم عادي مصادق يمكنه عبور حدود المستأجرين في النظام الفرعي للأصول V2 وتنفيذ عمليات أصول عالية التأثير ضد مساحات عمل أخرى.

هذه ثغرة تفويض حقيقية وقابلة للدفاع عنها في بيئة متعددة المستأجرين.


لماذا كان الإبلاغ عنها لا يزال يستحق العناء

بعض الناس يقللون من شأن الثغرات عبر المستأجرين المصادقين لأنهم يسمعون:

"المهاجم يحتاج بالفعل إلى حساب"

هذا ليس دفاعًا جادًا.

في البرامج متعددة مساحات العمل، يُفترض أن المستخدمين المصادقين العاديين يكونون محصورين داخل نطاق التفويض الخاص بهم.

إذا كان مستخدم ذو صلاحيات منخفضة في مساحة عمل Bravo يمكنه قراءة أو نسخ أو حذف أو الكتابة فوق كائنات في مساحة عمل Alpha، فإن عزل مساحة العمل قد انكسر.

هذه بالضبط الخاصية الأمنية التي يفترض أن يحميها التطبيق.

خاصة في منصة إدارة مشاريع تخزن محتوى العمل الداخلي وأصول العلامات التجارية، هذه مشكلة ذات معنى ذات تأثير حقيقي على السرية والسلامة.


تحليل الإصلاح

تم إصلاح المشكلة في Plane v1.3.1.

وصفت ملاحظات الإصدار لـ v1.3.1 الإصلاح بوضوح:

  • إضافة @allow_permission إلى جميع طرق WorkspaceFileAssetEndpoint
  • نطاق البحث عن الأصول المصدر في DuplicateAssetEndpoint لمساحات العمل التي يكون المتصل فيها عضوًا نشطًا

هذا هو اتجاه التصحيح الصحيح لأنه يعالج كلا الخاصيتين الأمنيتين الفاشلتين:

  1. إجراءات الأصول على مستوى مساحة العمل تتطلب الآن إنفاذ العضوية الحقيقية
  2. الأصول المصدر في تدفق التكرار لم تعد موثوقة بواسطة UUID وحده

هذا هو بالضبط ما تحتاجه هذه الثغرة.

الإصلاح الجيد هنا لا يتعلق بإخفاء معرفات UUID بشكل أفضل. لا يتعلق بتغيير إنشاء روابط URL الموقعة مسبقًا.

إنه يتعلق باستعادة القاعدة الصحيحة:

slug مساحة العمل بالإضافة إلى UUID للأصل يجب ألا يكونا كافيين أبدًا بدون تفويض محدود للمستخدم الحالي

هذا هو الجزء الذي استعادته التصحيح.


الإفصاح

تم الإبلاغ عن هذه المشكلة بشكل خاص من خلال استشارات أمان GitHub.

تضمن التقرير:

  • تحليل السبب الجذري لكلا مساري الكود
  • إثبات مفهوم محلي من البداية إلى النهاية
  • أدلة HTTP خام
  • إثبات يعتمد على التجزئة للتنزيل والتكرار والكتابة فوق غير المصرح بها
  • إرشادات للتصحيح

تم نشر المشكلة لاحقًا كـ:

  • GHSA-qw87-v5w3-6vxx
  • CVE-2026-46558

تم نشر الاستشارة في 15 مايو 2026. تم إصدار الإصلاح في Plane v1.3.1.


ما تعلمه هذه الثغرة حقًا

الدرس الرئيسي هنا بسيط:

أنظمة الأصول المشتركة هي حدود تفويض، وليست مجرد أدوات تخزين مساعدة

الكثير من المطورين يفكرون من حيث:

  • الرفع ناجح
  • الكائن موجود
  • UUID يحل
  • رابط URL الموقّع يعمل

هذه الأشياء هي تفاصيل تنفيذ.

السؤال الأمني الحقيقي هو:

من المسموح له بحل أو تحوير أو نسخ أو إعادة ربط ذلك الأصل عبر حدود المستأجرين؟

في Plane، لم يتم إنفاذ تلك الحدود بشكل متناسق.

هذا هو الاستنتاج الحقيقي.

تعزز هذه الثغرة أيضًا شيئًا مهمًا حول مراجعة التطبيقات متعددة المستأجرين:

  • طبقات الكائنات المشتركة تستحق مراجعة أمنية مباشرة
  • المعرفات التي يتحكم فيها المهاجم كافية عندما يكون التفويض غير مكتمل
  • يمكن لنظام فرعي واحد أن يكشف فشلًا في السرية والسلامة في وقت واحد

النقاط الرئيسية

  • نقاط نهاية الأصول هي حدود أمنية حقيقية للمستأجرين المتعددين
  • الوصول المصادق ليس هو نفسه الوصول المخوّل عبر مساحة العمل
  • لا ينبغي أبدًا أن تكون slugs مساحات العمل ومعرفات UUID للأصول كافية بمفردها
  • يصبح إنشاء روابط التنزيل الموقعة مسبقًا خطيرًا عندما يكون التفويض في المراحل العليا ضعيفًا
  • التحقق من عواقب القراءة والكتابة يجعل تقرير التفويض أقوى بكثير
  • أخطاء التفويض الهيكلية في أنظمة الأصول المشتركة غالبًا ما تؤثر على أكثر من نوع كيان واحد

الكلمات الختامية

لم تكن هذه الثغرة تتعلق بسلوك تخزين غريب.

كانت تتعلق بطرح سؤال حدود الثقة الصحيح.

في Plane، يمكن لمستخدم مصادق واحد تقديم slug مساحة عمل أخرى ومعرفات UUID لأصولها، ووثق النظام الفرعي للأصول V2 في تلك المعرفات أكثر مما ينبغي.

لهذا أصبحت CVE-2026-46558.

تم إصلاحها في Plane v1.3.1.

تنزيل الأداة