
إصلاح غير رسمي لـ CVE-2026-109618 / CVE-2026-109619 (php2shell) لحزم PHP 5.4 / 5.3 التي وصلت إلى نهاية عمرها الافتراضي في RHEL وCentOS وOracle Linux 7 / 6
إصلاح غير رسمي لـ CVE-2026-109618 و CVE-2026-109619 ("php2shell") لحزم PHP منتهية الصلاحية
في Enterprise Linux 6 و7: php-5.3.3 (RHEL / CentOS / Oracle Linux 6) و php-5.4.16
(RHEL / CentOS / Oracle Linux / Scientific Linux 7).
أصلحت PHP كلتا الثغرتين في 21 أكتوبر 2026 في 8.2.35 و8.3.36 و8.4.27 و8.5.12، ونشرت ترقيعات خلفية للمصدر لـ 7.4 و8.0 و8.1. لم يُصدر شيء لـ PHP 5، ولم تُصدر جهات توزيع EL6 / EL7 إصلاحًا. إذا كان عليك إبقاء نظام كهذا قيد التشغيل، يمنحك هذا المشروع حزمًا مُعاد بناؤها من جهة التوزيع مع نقل الإصلاح الأدنى الرسمي.
هذا ليس إصلاحًا رسميًا من PHP أو Red Hat أو Oracle. إنه يقلل المخاطر حتى تتمكن من الانتقال إلى إصدار PHP مدعوم — افعل ذلك في أقرب وقت ممكن. على EL8 / EL9 / EL10، ثبّت تحديثات جهة التوزيع بدلًا من ذلك (على سبيل المثال ELSA/RHSA-2026:87080، 87151، 87079).
php-5.4.16 /
php-5.3.3، التي تفتقر إلى إصلاحات جهة التوزيع الأمنية اللاحقة في الشيفرة نفسها
(على سبيل المثال CVE-2015-4024 في تحليل ترويسات multipart).| التوزيعة | حزمة جهة التوزيع | الحزمة المُصلحة من هذا المشروع |
|---|---|---|
| RHEL / CentOS / Oracle Linux / Scientific Linux 7 | php-5.4.16-48.el7 | php-5.4.16-48.el7.php2shell.1 |
| RHEL / CentOS / Oracle Linux 6 | php-5.3.3-50.el6_10 | php-5.3.3-50.el6_10.php2shell.1 |
تُرتَّب لاحقة الإصدار أعلى من حزمة جهة التوزيع، وأدنى من أي إصدار تصحيحي مستقبلي من جهة التوزيع
(على سبيل المثال 48.el7_9.1)، لذا فإن الإصلاح الرسمي، إن ظهر يومًا ما، يستبدل هذا الإصلاح بتحديث عادي.
على الأرجح أقل من PHP 7 و8، لكن لا توجد إجابة قاطعة بعد:
php في RHEL 6 / 7 على أنها غير متأثرة بـ CVE-2026-109619 ("الشيفرة المعرضة للخطر غير موجودة")
وتُدرج CVE-2026-109618 على أنها قيد التحقيق
(CSAF VEX).يطبّق هذا المشروع التخفيف الرسمي على أي حال: فهو يزيل مسار الخطأ غير الآمن نفسه، وليس فقط الطريقة المعروفة للوصول إليه.
من مستودع yum الموقّع على GitHub Pages:
# EL7
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el7.repo
# EL6
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el6.repo
yum update 'php*' # confirm the signing key: fingerprint under "Signing key" below
service httpd restart # and php-fpm, if you use it
يحتوي المستودع على حزم PHP الخاصة بهذا المشروع فقط، وكلا الحزم وبيانات التعريف الخاصة بالمستودع موقّعة (gpgcheck=1، repo_gpgcheck=1). كما تُرفَق حزم RPM وحزم RPM المصدرية بكل
إصدار، مع ملف SHA256SUMS موقّع؛ ثبّتها
باستخدام yum localinstall.
./tools/check-patched.sh
يسرد كل حزمة PHP 5 مثبّتة على أنها FIXED أو VULNERABLE، ويتحقق من أن PHP CLI يشغّل الشيفرة المُصلحة،
ويحذّر إذا كان httpd أو php-fpm قد بدأ قبل التحديث ولا يزال يشغّل الشيفرة القديمة.
يتبع الإصلاح عملية backport الرسمية الدنيا، التي تُفضّل السلامة على معالجة الأخطاء بلطف:
memory_limit (أو يفيض حجم تخصيص)،
تطبع PHP Fatal error: ... إلى stderr (سجل أخطاء خادم الويب) وتخرج العملية فورًا.
يبدأ Apache / php-fpm عاملًا جديدًا. لا تُنفَّذ دوال الإغلاق، ولا تُزال الملفات المؤقتة للتحميلات في ذلك
الطلب — ينظّفها tmpwatch (EL6) وsystemd-tmpfiles (EL7) من /tmp بمرور الوقت.Content-Disposition وContent-Type لكل جزء
(وهي الوحيدة التي تستخدمها PHP)، وتحدّ توجيهات php.ini الجديدة max_multipart_body_parts من عدد
الأجزاء (الافتراضي -1 = max_input_vars + max_file_uploads).zend_mm_safe_error_ex) ولا تغيّر أي API أو ABI قائم، لذا
تستمر الإضافات المبنية لحزمة المورّد في العمل.هذا تخفيف أدنى لمسارات الهجوم المنشورة، وليس تحديثًا أمنيًا كاملًا لـ PHP 5.
بُنيت من حزم RPM المصدرية للمورّد (SHA-256 مثبّت في build/build.sh)؛ تغيير spec هو 8 أسطر
(spec/*/php.spec.diff).
قُورنت مجموعة اختبارات PHP (make test، التي تُشغَّل أثناء بناء RPM) بإعادة بناء غير معدّلة
لنفس حزمة المورّد. الإخفاقات الجديدة الوحيدة متوقعة:
اختبارات تقدّم تحميل الجلسة (الميزة معطّلة) وtests/lang/bug45392.phpt (رسالة الخطأ القاتل
تبدأ الآن بسطر فارغ، كما في رقعة 7.4 الرسمية).
| الاختبارات | فشل: المورّد | فشل: المُرقَّع | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23 (8 تقدّم التحميل + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56 (bug45392) |
تتفاوت الأعداد الدقيقة قليلًا بين بيئات البناء: على مشغّلات GitHub يفشل أيضًا اختبارا مالك ملف SPL
(DirectoryIterator_getOwner/getGroup_basic)، وtime_sleep_until_basic حساس للتوقيت.
لا يمسّ أيٌّ منها الشيفرة التي غيّرتها الرقعة.
قُورنت رقعة PHP 5.4 بنقل مستقل لنفس الإصلاح الخاص بـ php-5.4.16 في Amazon Linux 2:
التغييرات الأساسية متطابقة. الفروقات مذكورة في docs/ALTERNATIVES.md.
لم تُكتب أو تُستخدم أي شيفرة استغلال. يُرجى مراجعة الرقعة مقابل الـ commit upstream بنفسك.
راجع docs/ALTERNATIVES.md لحالة المورّد وقائمة المشاريع ومقارنة.
يتطلب Docker وحوالي 3 GB من المساحة الحرة على القرص لكل عملية بناء.
build/build.sh el7 # results in _build/el7/RPMS
build/build.sh el6 # results in _build/el6/RPMS
يقوم السكربت بتنزيل حزمة RPM المصدرية من المورّد، ويتحقق من تجزئتها SHA-256، ويعيد بناءها داخل حاوية Oracle Linux مثبّتة الإصدار مع ملف spec والتصحيح (patch) من هذا المستودع.
تُوقَّع الحزم ووسوم الإصدار باستخدام:
pub rsa4096/80797C97A561BC94 2026-10-22 [SC] [expires: 2029-10-21]
2757 B60F D23D ED25 021B BE37 8079 7C97 A561 BC94
uid Oleksii Molchanov (php2shell-eol-backport signing key) <[email protected]>
المفتاح موجود في هذا المستودع (RPM-GPG-KEY-php2shell-eol-backport) وعلى keyserver.ubuntu.com.
patches/el7, patches/el6 the fix, as a patch against the vendor source tree
spec/el7, spec/el6 vendor spec files with the patch added, and their diffs
build/ reproducible container build
tools/check-patched.sh check an installed system
docs/ALTERNATIVES.md vendor status, other projects, comparison
SECURITY.md how to report a security problem