
إضافة Checkmk مع مكوّن إضافي للوكيل يقوم بجرد ثنائيات PHP وApache mod_php على مضيفات Linux ويبلّغ عن حالة PHP2Shell (CVE-2026-109618/109619) والترقيعات الخلفية والعمليات القديمة.
إضافة Checkmk تُظهر، لكل تثبيت PHP على مضيف Linux، ما إذا كان متأثرًا بـ PHP2Shell - ثغرات تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة CVE-2026-109618 وCVE-2026-109619، التي أُفصح عنها وأُصلحت في 2026-10-21 في PHP 8.2.35 و8.3.36 و8.4.27 و8.5.12.
تتضمن ملحق وكيل صغير بصدفة POSIX يجمع الحقائق فقط (ثنائيات PHP، ومكتبات PHP الخاصة بـ Apache mod_php وNGINX Unit وFrankenPHP، والإصدارات، وسجلات تغييرات الحزم، وإعدادات php.ini، والعمليات التي لا تزال تشغّل ثنائيًا مستبدلًا). أما ما إذا كان ذلك يعني "مُصلحًا" أو "متأثرًا" فيقرره ملحق الفحص على خادم Checkmk، لذا فإن المعلومات الجديدة - إصدار مُصلح آخر، أو ثغرة جديدة - لا تحتاج إلا إلى .mkp محدّث، وليس إلى سكربت جديد على كل مضيف.
لماذا لا يكفي مقارنة أرقام الإصدارات فقط: تُرجع التوزيعات الإصلاح دون تغيير الإصدار الأصلي. يشحن Ubuntu 24.04 الإصدار PHP 8.3.6 وتشحن AlmaLinux 9 الإصدار 8.0.30 - كلاهما مُصلح، وكلاهما "متأثر" بحسب الإصدار. لذلك تقرأ الإضافة أيضًا سجل تغييرات الحزمة التي تملك كل ثنائي.
cmk_addons.plugins الحالية)./proc/<pid>/maps لجميع العمليات). صدفة POSIX عادية sh مع أدوات GNU أو busybox؛ تُقرأ سجلات تغييرات الحزم باستخدام dpkg أو rpm أو apk. تم الاختبار على عائلة Debian (Debian، Ubuntu)، وعائلة Red Hat (RHEL، AlmaLinux، Rocky Linux، Oracle Linux، CentOS Stream، Fedora، Amazon Linux 2023، CentOS 7) وAlpine، انظر أدناه.| صورة Checkmk | التاريخ | النتيجة |
|---|---|---|
checkmk/check-mk-ultimate:2.5.0p17 | 2026-10-27 | OK (build, cmk-validate-plugins, smoke test, install + discovery + check + agent bake) |
checkmk/check-mk-ultimate:3.0.0-2026.10.27 (daily) | 2026-10-27 | OK (build, cmk-validate-plugins, smoke test, install + discovery + check + agent bake) |
شُغّل ملحق الوكيل مقابل حزم PHP الخاصة بالتوزيعات في 2026-10-27 (scripts/test_agent_plugin.sh). وحيث يبدأ الهدف واجهات SAPIs للويب (FPM، وApache mod_php حيث لا تزال التوزيعة تشحنه، وNGINX Unit، وFrankenPHP)، استُبدل ثنائي FPM وlibphp على القرص بعد ذلك، وأبلغ كشف إعادة التشغيل عن العمليات قيد التشغيل.
عائلة Debian وAlpine
| التوزيعة | حزم PHP | نتيجة الملحق |
|---|---|---|
| Ubuntu 24.04 | 8.3.6-0ubuntu0.24.04.13 (CLI, FPM, CGI, mod_php) | مُصلح عبر backport (يذكر سجل التغييرات كلتا الثغرتين) |
| Debian 12 | 8.2.35-1~deb12u1 (CLI, FPM, mod_php) | مُصلح بحسب الإصدار |
| Debian 12 + nginx | 8.2.35-1~deb12u1 (CLI, FPM خلف nginx) | مُصلح بحسب الإصدار |
| Debian 13 | 8.4.27-1~deb13u1 (CLI, FPM) | مُصلح بحسب الإصدار |
| Alpine 3.22 | php83 8.3.36-r0 (CLI, FPM, CGI) | مُصلح بحسب الإصدار |
عائلة Red Hat
| التوزيعة | حزم PHP | نتيجة الإضافة |
|---|---|---|
| AlmaLinux 8.10 | 7.2.24-1.module_el8.10.0 (CLI, FPM, CGI, mod_php libphp7.so) | مُصلحة عبر backport (تسرد سجلات التغيير كلا الثغرتين CVE) |
AlmaLinux 8.10، الوحدة php:8.2 | 8.2.35-1.module_el8.10.0 (CLI, FPM, CGI) | مُصلحة عبر الإصدار |
| RHEL 9.8 (UBI)، AlmaLinux 9.8، Rocky Linux 9.8، Oracle Linux 9.8 | 8.0.30-8.el9_8.1 (CLI, FPM, CGI) | مُصلحة عبر backport (تسرد سجلات التغيير كلا الثغرتين CVE) |
AlmaLinux 9.8، الوحدة php:8.3 | 8.3.36-1.module_el9.8.0 (CLI, FPM, CGI) | مُصلحة عبر الإصدار |
| AlmaLinux 9.8 + Remi SCL | php74 7.4.33-31.el9.remi، php81 8.1.34-6.el9.remi (/opt/remi) | مُصلحة عبر backport (تسرد سجلات التغيير كلا الثغرتين CVE) |
| AlmaLinux 10.2، CentOS Stream 10 | 8.3.36-1.el10 (CLI, FPM, CGI) | مُصلحة عبر الإصدار |
| Fedora 44 | 8.5.12-1.fc44 (CLI, FPM, CGI) | مُصلحة عبر الإصدار |
| Amazon Linux 2023 | php8.5 8.5.12-1.amzn2023.0.1 (CLI, FPM, CGI) | مُصلحة عبر الإصدار |
| CentOS 7 (منتهية الصلاحية، vault) | 5.4.16-48.el7 (CLI, FPM, CGI) | عرضة للثغرة - لا يوجد backport لـ EL7 خارج الدعم الممتد المدفوع |
صور الحاويات الرسمية وFrankenPHP
| الصورة | PHP | نتيجة الإضافة |
|---|---|---|
php:8.2.20-fpm | 8.2.20، مبنية من المصدر | عرضة للثغرة |
unit:php8.3 (NGINX Unit) | 8.3.26 (CLI, CGI, libphp مضمّنة) | عرضة للثغرة |
dunglas/frankenphp:latest | 8.5.12 (CLI, CGI, libphp مضمّنة) | مُصلحة عبر الإصدار |
| FrankenPHP static binary (إصدار GitHub) | 8.5.12 | مُصلحة عبر الإصدار |
لم يتم تشغيله بعد على مضيف إنتاجي خارج الحاويات - وعلى وجه الخصوص ليس مع تفعيل SELinux (عائلة RHEL)؛ إذ يعمل الوكيل عادةً هناك دون تقييد.
نزّل ملف .mkp من أحد الإصدارات (أو ابنِه بنفسك، انظر
التطوير).
Setup > Maintenance > Extension packages > Upload package، أو من سطر الأوامر داخل الموقع:
mkp add php2shell-<version>.mkp
mkp enable php2shell <version>
انشر إضافة الوكيل على المضيفين الذين تريد فحصهم:
نفّذ اكتشاف الخدمات على المضيفين. تحصل كل ثنائية PHP ووحدة Apache PHP على
خدمتها الخاصة، بالإضافة إلى خدمة PHP2Shell restart واحدة لكل مضيف.
اختياري: اضبط الحالات في Setup > Services > Service monitoring rules > PHP2Shell (CVE-2026-109618 / CVE-2026-109619) و PHP2Shell restart.
انسخ package/agents/plugins/php2shell إلى دليل فرعي لفاصل التخزين المؤقت داخل دليل
إضافات الوكيل واجعلها قابلة للتنفيذ:
install -m 755 php2shell /usr/lib/check_mk_agent/plugins/3600/php2shell
مجلد 3600 يجعل الوكيل يشغّله في الخلفية مرة كل ساعة ويقدّم النتيجة المخزّنة مؤقتًا في الفترة بينهما. لا تضعه مباشرةً في plugins/: فهو يشغّل كل ملف PHP تنفيذي ويقرأ خريطة الذاكرة لكل عملية، وهو ما يمثّل عبئًا كبيرًا على كل استعلام للوكيل.
| الخدمة | واحدة لكل | الحالات (افتراضية، قابلة للتهيئة) |
|---|---|---|
PHP2Shell <path> | ملف PHP تنفيذي أو مكتبة، مثل PHP2Shell /usr/sbin/php-fpm8.3 | OK ثابتة - CRIT واجهة SAPI ويب مصابة - WARN واجهة SAPI ويب مصابة مع جميع التخفيفات المؤقتة - WARN واجهة CLI مصابة - UNKNOWN تعذّر تحديد الإصدار |
PHP2Shell restart | مضيف يعمل عليه PHP | OK - CRIT العمليات ما زالت تشغّل ملف PHP تنفيذي أو libphp مستبدَلًا |
flowchart TD
A[PHP binary or module] --> B{Version known?}
B -- no --> U[UNKNOWN]
B -- yes --> C{"Version >= fix of its branch?<br/>8.2.35 / 8.3.36 / 8.4.27 / 8.5.12<br/>or branch newer than 8.5"}
C -- yes --> OK[OK: fixed]
C -- no --> D{"Package changelog names<br/>both CVEs?"}
D -- yes --> OKB[OK: fixed by distribution backport]
D -- no --> E{SAPI}
E -- CLI --> W1[WARN: vulnerable, CLI only]
E -- "FPM / CGI / LiteSpeed / Apache module /<br/>embedded libphp / FrankenPHP" --> F{"All interim mitigations<br/>in this SAPI's php.ini?"}
F -- yes --> W2[WARN: vulnerable, mitigated]
F -- no --> CR[CRIT: vulnerable]
OK --> G{"session.upload_progress.enabled<br/>= On?"}
OKB --> G
G -- yes --> H["Hint: CVE-2026-115560 not fixed yet<br/>(state configurable, default OK)"]