
مُختبِر لـ CVE-2026-43284
أداة تشخيص مجتمعية لتحديد ما إذا كان مضيف XCP-ng dom0 معرضًا لـ CVE-2026-43284 ("Dirty Frag")، وهي ثغرة رفع صلاحيات محلية في نظام xfrm-ESP الفرعي لنواة لينكس.
الخلاصة — جميع إصدارات XCP-ng الحالية (8.1, 8.2, 8.3) التي تعمل بنواة dom0 القياسية 4.19 تقع في النطاق البرمجي المعرض للثغرة. لم يتم نشر أي تصحيح رسمي من XCP-ng حتى مايو 2026. تمنحك هذه الأداة إجابة قاطعة حول ما إذا كان مضيفك معرضًا للثغرة وتوفر إجراء تخفيف مؤقت آمن.
"Dirty Frag" هي ثغرة رفع صلاحيات محلية تم الإفصاح عنها علنًا في مايو 2026 من قبل الباحث Hyunwoo Kim (@v4bel). تستغل مسار فك تشفير في الموقع في نظام IPsec ESP الفرعي لنواة لينكس، الذي تم تقديمه في يناير 2017 (النواة 4.14+). ينتج عن إثبات المفهوم العام العامل شل جذر عبر استدعاءات نظام قياسية دون الحاجة إلى استغلال النواة.
تم نشر ثغرتي CVE:
| CVE | النظام الفرعي | تاريخ التقديم | ينطبق على XCP-ng 4.19؟ |
|---|---|---|---|
| CVE-2026-43284 | xfrm-ESP (esp4/esp6) | نواة 4.14، يناير 2017 | نعم |
| CVE-2026-43500 | RxRPC (rxkad) | نواة 6.4، يونيو 2023 | لا — rxrpc.ko غير مضمن |
لا يتطلب XCP-ng وجود CVE-2026-43500 ليكون قابلاً للاستغلال. مسار esp4 (CVE-2026-43284) وحده كافٍ لأن dom0 XCP-ng ليس لديه سياسة AppArmor ويسمح بإنشاء مساحات أسماء مستخدم غير مميزة — الشرط المسبق الوحيد الذي يتطلبه مسار استغلال esp4. راجع TECHNICAL.md للتحليل الكامل.
يختبر البرنامج النصي التشخيصي الشرط المسبق الضروري والكافي لـ CVE-2026-43284 على XCP-ng: ما إذا كانت عملية غير مميزة يمكنها تشغيل محرك فك تشفير esp4 في الموقع عبر واجهة XFRM netlink داخل مساحة اسم مستخدم.
لا تقوم الأداة بما يلي:
من الآمن تشغيلها على dom0 الإنتاجي.
# استنساخ المستودع
git clone https://github.com/grabesec/XCP_ng_CVE-2026-43284_tester.git
cd XCP_ng_CVE-2026-43284_tester
# تشغيل التشخيص (كمستخدم غير جذر للحصول على أقوى دليل)
python3 XCP_ng_CVE_2026_43284_tester.py
ملاحظة: قم بتشغيل الأداة كمستخدم غير جذر قدر الإمكان. هذا يحاكي نموذج التهديد الحقيقي: حساب خدمة مخترق أو هروب ضيف يصل إلى dom0. تشغيلها كجذر لا يزال يعطي نتيجة صحيحة ولكنه أقل دلالة.
=================================================================
XCP-ng Dirty Frag Diagnostic -- CVE-2026-43284
xfrm-ESP Page-Cache Write / Local Privilege Escalation
=================================================================
Kernel : 4.19.0+1
Host : xcpng-prod-01
PID : 52306 | UID: 1000
=================================================================
[Phase 0] Pre-flight environment checks
---------------------------------------------
[*] Unprivileged user namespaces : ALLOWED
[*] esp4 blacklist in modprobe.d : NOT FOUND
[*] CVE-2026-43284 patch in kernel RPM : NOT FOUND
[Phase 1] Baseline esp4 module state
---------------------------------------------
[*] esp4 is DORMANT -- not currently loaded in the kernel.
The autoload mechanism may fetch it on demand via XFRM.
[Phase 2] Attempting esp4 engagement from unprivileged namespace
---------------------------------------------
[*] Spawning child in isolated user+network namespace
(unshare -U -n -r) -- simulating a non-root local attacker
[*] Child signal : XFRM SA accepted by kernel
[*] esp4 refcount : 0 (before) -> 1 (now)
[*] /proc/modules : esp4 16384 1 - Live 0xffffffffc0a12000
[Phase 3] Engineering verdict
=================================================================
[!!!] PROOF OF EXPOSURE -- CVE-2026-43284 [!!!]
esp4 refcount increased: 0 -> 1
An unprivileged process inside a user+network namespace
successfully registered an XFRM Security Association and
engaged the esp4 in-place decryption engine in the host
kernel. This is the gate condition for CVE-2026-43284.
XCP-ng-specific analysis:
[FAIL] Kernel 4.19 carries the vulnerable code (since 4.14)
[FAIL] User namespaces are open -- esp4 path is reachable
[OK] rxrpc.ko absent -- CVE-2026-43500 does not apply
[FAIL] esp4 path alone is sufficient on this configuration
[Phase 0] Pre-flight environment checks
---------------------------------------------
[+] esp4 blacklist found in /etc/modprobe.d/
Module-load mitigation appears to be in place.
...
[Phase 2] Attempting esp4 engagement from unprivileged namespace
---------------------------------------------
[+] XFRM state add was REJECTED by the kernel.
The esp4 engine was not engaged from the namespace.
[RESULT] The namespace loophole did NOT grant esp4 access.
يقوم البرنامج النصي المضمن mitigate.sh بتطبيق التخفيف بأمان، مع كشف IPsec مدمج لمنع كسر الأنفاق:
# فحص الحالة الحالية فقط (بدون تغييرات)
sudo ./mitigate.sh --check
# تطبيق التخفيف (يتوقف إذا تم كشف IPsec)
sudo ./mitigate.sh
# إزالة التخفيف (بعد تطبيق تصحيح النواة الرسمي)
sudo ./mitigate.sh --undo
الخيار أ — المضيفات التي لا تستخدم IPsec (معظم dom0s):
echo 'install esp4 /bin/false' > /etc/modprobe.d/dirtyfrag-cve-2026-43284.conf
rmmod esp4 2>/dev/null || true
echo 3 > /proc/sys/vm/drop_caches
الخيار ب — المضيفات التي تستخدم IPsec (strongSwan / Libreswan):
لا تقم بوضع esp4 في القائمة السوداء — سيؤدي ذلك فورًا إلى كسر جميع الأنفاق. بدلاً من ذلك:
⚠️ هذه ثغرة رفع صلاحيات محلية. يجب أن يكون لدى المهاجم بالفعل شل أو تنفيذ كود على dom0. الدفاع الأساسي هو تقييد من لديه وصول محلي إلى dom0 في المقام الأول. جذر dom0 = جذر الهايبرفايزر = اختراق جميع الأجهزة الافتراضية الضيفة.
| المتطلب | ملاحظات |
|---|
لا حاجة لمكتبات بايثون خارجية. لا حاجة لتثبيت pip.
XCP_ng_CVE-2026-43284_tester/
├── XCP_ng_CVE_2026_43284_tester.py # البرنامج النصي التشخيصي — قم بتشغيله أولاً
├── mitigate.sh # برنامج نصي للتخفيف مع كشف IPsec
├── README.md # هذا الملف — بداية سريعة ونظرة عامة
├── TECHNICAL.md # تحليل فني عميق — سلسلة الهجوم،
│ # لماذا لا نحتاج rxrpc على XCP-ng،
│ # شرح داخل البرنامج النصي
├── CHANGELOG.md # تاريخ الإصدارات
└── LICENSE # MIT
للحصول على شرح كامل لـ:
راجع TECHNICAL.md.
تابع: https://xcp-ng.org/forum/topic/365/updates-announcements
تختبر هذه الأداة الشرط المسبق للاستغلال فقط (الوصول إلى مساحة الاسم وesp4). لا تحتوي على أي كود استغلال أو تستنسخه أو تشير إليه. الثغرة الأساسية معروفة علنًا، ولها إثبات مفهوم منشور من قبل الباحث الأصلي، وتم تعيين CVEs لها. الغرض من هذه الأداة هو مساعدة مسؤولي XCP-ng في تحديد مدى تعرضهم وتطبيق إجراءات تخفيف مؤقتة أثناء انتظار تصحيح النواة الرسمي من Vates.
Rodrigo Gracia — مساهمة أمنية مجتمعية
ممارس XCP-ng / Xen Orchestra
https://github.com/grabesec
مايو 2026
| Python 3.6+ | مضمن مع XCP-ng 8.x dom0 |
iproute2 (أمر ip) | مضمن مع XCP-ng 8.x dom0 |
unshare | جزء من util-linux، مضمن مع XCP-ng 8.x dom0 |
| نواة لينكس | أي نواة 4.14–6.x على XCP-ng dom0 |
| إصدار XCP-ng | النواة | معرض؟ | تصحيح رسمي؟ |
|---|
| 8.3 LTS | 4.19 + تصحيحات Vates | نعم | لم ينشر حتى مايو 2026 |
| 8.2 | 4.19 + تصحيحات Vates | نعم | لم ينشر حتى مايو 2026 |
| 8.1 (منتهي الدعم) | 4.19 + تصحيحات Vates | نعم | غير متوقع |