
مجموعة أدوات للكشف والتحقق والاستجابة للحوادث الخاصة بـ CVE-2026-85097: تقييم Bricksforge عن بُعد، والبحث عن مؤشرات الاختراق في السجلات، وتدقيق البرمجيات الخبيثة في نظام الملفات، إضافة إلى قواعد Sigma وWAF.
رفع ملفات عشوائي بدون مصادقة ← تنفيذ تعليمات برمجية عن بُعد (RCE) في إضافة Bricksforge لـ WordPress
مجموعة أدوات للكشف والتحقق والاستجابة للحوادث الخاصة بـ CVE-2026-85097، وهو ثغرة CVSS 10.0
رفع ملفات عشوائي بدون مصادقة في إضافة Bricksforge
لـ WordPress ويُستغَلّ بنشاط في البرّية.
سكربت واحد، ثلاثة أوضاع: تقييم هدف عن بُعد، وتفتيش السجلات التاريخية بحثًا عن الاستغلال، وتدقيق جذر الويب بحثًا عن برمجيات خبيثة مزروعة.
____ _ _ _ __ ___ _ _
| __ ) _ __(_) | _| | __/ _| ___ _ __ __ _ / _ \ ___| | _| | ___ _ __
| _ \| '__| | |/ / |/ / |_ / _ \| '__/ _` | | | / __| |/ / |/ _ \| '_ \
| |_) | | | | <| <| _| (_) | | | (_| | |_| \__ \ <| | (_) | | | |
|____/|_| |_|_|\_\_|\_\_| \___/|_| \__, |\___/|___/_|\_\_|\___/|_| |_|
|___/
CVE-2026-85097 | Unauthenticated Arbitrary File Upload -> RCE
CVSS 10.0 CRITICAL | Bricksforge <= 3.1.8.9 | Fixed 3.1.8.10
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-85097 |
| المنتج | Bricksforge (إضافة WordPress، ملحق لـ Bricks Builder) |
| النوع | رفع ملفات عشوائي دون مصادقة ← تنفيذ تعليمات برمجية عن بُعد |
| CWE | CWE-434: رفع غير مقيّد لملف من نوع خطير |
| CVSS | 10.0 حرج: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H (المتجه مستنتج، انظر القيود) |
| المصادقة | لا شيء |
| المتأثر | <= 3.1.8.9 |
| المُصلَح | 3.1.8.10 (خط إصدار المورّد المشار إليه في البيان الصحفي: 4.0.1) |
| الاستغلال | نشط في البرية |
| أول رصد | 2026-10-07 21:47:17 UTC |
| عدد عمليات التثبيت | ~6,000 |
| عناوين IP المصدر المرصودة | 63 فريدًا (أعلى 6 ≈ 46% من الطلبات) |
| نقطة النهاية الأساسية | POST /wp-json/bricksforge/v1/form_submit |
| نقطة النهاية الاحتياطية | POST /wp-admin/admin-ajax.php (action=bricksforge_form_submit) |
| تسمية الزرعة | login_admin_*.php |
[!CAUTION] للاستخدام المصرّح به فقط. هذه الأداة مخصصة لتقييم الأمن المسموح به، والتحقق الدفاعي، والاستجابة للحوادث. تشغيل أي اختبار نشط ضد نظام لا تملكه أو لا تملك إذنًا كتابيًا باختباره غير قانوني في معظم الولايات القضائية. انظر SAFETY-AND-LEGAL.md.
يوسّع Bricksforge من قدرات Bricks Builder بنماذج متقدمة
وحركات وبيانات ديناميكية. تقبل ميزة Pro Forms رفع الملفات. تتحقق الإضافة
بشكل صحيح من نوع MIME للملف عند رفعه لأول مرة، ولكن عند إرسال النموذج
لاحقًا، فإنها تثق ببيانات وصفية للملف يرسلها العميل، ولا تتحقق أبدًا
من حقل url داخل المعامل temporaryFileUploads.
هذا الفحص الواحد المفقود يحوّل رفع صورة حميد إلى تنفيذ تعليمات برمجية عن بُعد
دون مصادقة. لا يحتاج المهاجم إلى أي حساب، ولا إلى رمز CSRF لا يستطيع إنشاءه
بنفسه، ولا إلى أي تفاعل من المستخدم. رصدت Patchstack بدء الاستغلال في
2026-10-07 21:47:17 UTC من 63 عنوان IP مصدر فريدًا تمتد عبر مراكز البيانات والسحابة وشبكات VPN
والبنية التحتية السكنية.
file (المسار على جانب الخادم الذي تم فحص نوع MIME الخاص به) وurl (الوجهة التي
ستكتب إليها الإضافة) مفصولان. تعيد الإضافة قراءة url المقدَّم من العميل عند
وقت الإرسال وتكتب البايتات المرحلية هناك.
{
"temporaryFileUploads": [
{
"field": "form-field-file",
"file": {
"file": "/var/www/example.com/wp-content/uploads/bricksforge/tmp/img_example.gif",
"url": "https://example.com/wp-content/uploads/bricksforge/tmp/img_example.php",
"type": "image/gif"
}
}
]
}
التوقيع هو عدم التطابق: المسار على جانب الخادم ينتهي بـ .gif، بينما عنوان URL الوجهة ينتهي بـ .php. في 95% من الطلبات المُلتقطة كان المسار على جانب الخادم ينتهي بـ .gif أو .png.
| الملف | الدور |
|---|---|
wp-content/plugins/bricksforge/includes/elements/pro-forms/actions/init.php | نقطة الحقن: تُدمج البيانات الوصفية المقدَّمة من العميل (بما فيها url) في سياق إجراء النموذج دون التحقق منها. |
wp-content/plugins/bricksforge/includes/elements/pro-forms/actions/base.php | نقطة الغرق (Sink): تقود البيانات الوصفية الموثوقة عملية كتابة الملف النهائية، لذا يتحكم المهاجم في اسم ملف الوجهة على القرص وامتداده. |
| # | الخطوة | القابل للملاحظة |
|---|---|---|
| 1 | الحصول على nonce دون مصادقة: POST /wp-admin/admin-ajax.php مع action=bricksforge_regenerate_nonce. لا يتطلب مصادقة؛ ويعيد nonce صالحًا. | طلب إلى admin-ajax.php مع action=bricksforge_regenerate_nonce |
| 2 | رفع ملف polyglot من نوع GIF/PHP: صورة صالحة تحمل في الوقت نفسه شيفرة PHP. يتم إجراء التحقق من نوع MIME هنا، لذا يمر الملف ويستقر في wp-content/uploads/bricksforge/tmp/. | رفع متعدد الأجزاء (multipart) يكتب في /wp-content/uploads/bricksforge/tmp/ |
| 3 | إرسال النموذج ببيانات وصفية غير متطابقة: يشير file إلى ملف .gif الذي تم التحقق منه، بينما ينتهي url بـ .php. | طلب form_submit يحتوي على temporaryFileUploads |
| 4 | يكتب الإضافة المحتوى إلى موقع PHP ← تنفيذ شيفرة عن بُعد (RCE). طلب ذلك العنوان ينفّذ الشيفرة المضمّنة: قواقع ويب، تعديل المحتوى، سرقة البيانات، الاستمرارية. | طلب HTTP GET إلى ملف .php مُنشأ حديثًا ضمن دليل uploads |
يفحص المهاجمون بنشاط سبلًا للالتفاف حول تصفية الامتدادات. أربع عائلات:
| العائلة | العينات | القصد |
|---|---|---|
| امتدادات PHP بديلة | .php .php5 .php7 .php8 .phtml .pht .phtm .phps | الوصول إلى معالج PHP باسم لا تحجبه التصفية |
| التلاعب بحالة الأحرف | .PHP .Php .pHp .PHTML | التغلب على القوائم السوداء الحساسة لحالة الأحرف؛ إذ تُحلّ إعدادات Windows/بعض إعدادات Apache دون حساسية لحالة الأحرف |
| امتدادات مُرمَّزة | %2ephp .%70hp .%2570%2568%2570 | تهريب الامتداد عبر تصفية تُفحص قبل فك ترميز URL |
| بيانات وصفية معدَّلة | path أو name أو originalFilename أو url معدَّلة/مفقودة | تحديد الحقول التي تتحقق منها الإضافة فعليًا |
تكتشف هذه الأداة جميع التنويعات الـ 18 للعائلات الثلاث الأولى (انظر نتائج التحقق).
يتطلب Python 3.9+. اعتماديتان فقط، وكلتاهما شائعة.
git clone https://github.com/Masriyan/CVE-2026-85097.git
cd CVE-2026-85097
python3 -m venv .venv && source .venv/bin/activate # optional but recommended
pip install -r requirements.txt
chmod +x bricksforge_checker.py
./bricksforge_checker.py --version
rich اختياري، وبدونه يعود الأداة إلى إخراج ANSI عادي ولا يزال يعمل
على مضيف مجرّد.
تحقّق من أوليات الكشف قبل الوثوق بأي تشغيل:
./bricksforge_checker.py --self-test # 60/60 offline checks
# 1. Read the full intelligence briefing (no network, no target needed)
./bricksforge_checker.py --info