
اكتشف ما إذا كان مثيل Strapi معرضًا لـ CVE-2026-27886 (تسريب أسرار المسؤول عبر هجوم Boolean Oracle غير مصادق عليه).
اكتشف بأمان ما إذا كانت مثيل Strapi معرضة لـ CVE-2026-27886 دون تنفيذ سلسلة الاستيلاء الكاملة على الحساب. اطلع على الشرح الكامل على مدونة Bishop Fox.
CVE-2026-27886 هي ثغرة تجاوز لتعقيم المعاملات غير الموثقة في إصدارات Strapi من 4.0.0 إلى 5.36.1، تسمح للمهاجمين غير الموثوقين عن بُعد بتسريب أسرار المسؤول من خلال واجهة برمجة تطبيقات المحتوى العامة. يعالج مُعقّم الاستعلامات في @strapi/utils فقط مفاتيح الاستعلامات الموثقة filters وsort وfields وpopulate ويحافظ بصمت على كل مفتاح آخر من المستوى الأعلى في الطلب. ثم يتم تمرير المفاتيح غير المعروفة عبر transformQueryParams وتصل إلى strapi.db.query(...) كشرط SQL WHERE. من خلال استقصاء where[updatedBy][resetPasswordToken][$startsWith]=<prefix> ضد أي مجموعة من واجهة برمجة تطبيقات المحتوى العامة، يمكن للمهاجم تسريب أسرار المسؤول حرفًا حرفًا عبر حقل meta.pagination.total في الاستجابة.
تؤدي هذه الأداة اختبارًا غير مدمر للثغرة عن طريق:
GET /api/<collection>GET مع إلحاق ?where[id][$lt]=-1meta.pagination.total لتحديد ما إذا كان شرط where قد وصل إلى طبقة قاعدة البياناتالمسند where[id][$lt]=-1 لا يمكن أن يطابق أي صف حقيقي، لذلك عند تطبيق الشرط في طبقة قاعدة البيانات، تنهار الاستجابة إلى صفر صفوف. عندما يكون التصحيح موجودًا، يتم إسقاط المفتاح غير المعروف where بواسطة القائمة البيضاء للمعقّم قبل بناء الاستجابة وتكون الاستجابة مطابقة للأساسية. لا يلمس الفحص أبدًا أعمدة المسؤول الخاصة ولا يعدل أي بيانات.
where تم تطبيقه في طبقة قاعدة البيانات.sanitizeQuery يزيل أي مفاتيح غير معروفة من المستوى الأعلى قبل وصولها إلى قاعدة البيانات.INCONCLUSIVE.على خادم معرض، تقوم الأداة بعد ذلك بتعداد عنوان البريد الإلكتروني للمسؤول حرفًا حرفًا عبر where[updatedBy][email][$startsWith]=<prefix>. لا ترتبط بسلسلة الاستيلاء على حساب المسؤول.
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
لا توجد تبعيات خارجية. يستخدم الماسح الضوئي وحدات مكتبة بايثون القياسية فقط.
اختبر نقطة نهاية مجموعة واجهة برمجة تطبيقات المحتوى العامة لخادم Strapi. يقوم Strapi بتعيين pluralName لنوع المحتوى إلى مسار URL، لذلك يختلف الاسم الدقيق حسب النشر.
python3 CVE-2026-27886-check.py <ENDPOINT>
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential confirmed: baseline total=1, where-test total=0 -> VULNERABLE
[+] Enumerating admin email
admin email = [email protected]
[+] Done. To remediate, upgrade to Strapi 5.37.0 or later.
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential check: baseline total=1, where-test total=1 -> NOT VULNERABLE
يمكن للأداة اكتشاف الثغرة فقط إذا تم استيفاء الشروط التالية:
find على نوع محتوى واحد على الأقلupdated_by_id غير فارغإذا لم يتم استيفاء أي شرط، ستُبلغ الأداة عن نتيجة INCONCLUSIVE.
يتم توزيع هذا الرمز بموجب ترخيص MIT.
استخدام هذه الأداة لمهاجمة الأهداف دون موافقة متبادلة مسبقة غير قانوني. تقع على عاتق المستخدم النهائي مسؤولية الامتثال لجميع القوانين المحلية والولائية والفيدرالية المعمول بها. لا يتحمل المطورون أي مسؤولية ولا يتحملون أي مسؤولية عن أي سوء استخدام أو ضرر ناتج عن هذا البرنامج.