🛡️ ثغرة حرجة في PHP (PHP2Shell): كيف تعرف إن كان موقعك معنيًّا وكيف تحميه
🌐 Français · English · العربية
ثغرتان حرجتان في PHP تسمحان بتنفيذ شيفرة على الخادم دون أي بيانات دخول. إليك كيف تتحقق في دقائق إن كان موقعك معنيًّا، وكيف تصلحه بشكل سليم، وكيف لا تُفاجأ بالثغرة القادمة.
آخر تحديث: 22 أكتوبر 2026
باختصار
- في 21 أكتوبر 2026، أصلح فريق PHP ثغرتين حرجتين (CVE-2026-109618 وCVE-2026-109619، المعروفتين باسم «PHP2Shell») تسمحان بتنفيذ شيفرة عن بُعد دون مصادقة.
- الإصدارات المصحَّحة: 8.5.12 و8.4.27 و8.3.36 و8.2.35. ما دونها معنيّ بالثغرة.
- كل موقع يعمل بـ PHP معنيّ: ووردبريس، ووكومرس، بريستاشوب، لارافيل، المواقع المبرمجة خصيصًا.
- التحديث وحده لا يكفي دائمًا: يجب أيضًا إعادة تشغيل PHP، وإلا بقي الإصدار القديم في الذاكرة.
- على خادم أتولى إدارته، طُبِّق الإصلاح في اليوم التالي للإعلان، وفُحص كل موقع على حدة. هذا الدليل يتبع الطريقة نفسها بالضبط.
1. ماذا حدث؟
في 21 أكتوبر 2026، نشر فريق PHP نشرة أمنية بعنوان «ثغرات حرجة لتنفيذ الشيفرة عن بُعد، حدِّثوا الآن». وهي تصلح ثغرتين منفصلتين، تقييم كل منهما 9.2 من 10 (وفق CVSS v4):
| الثغرة | طبيعتها (دون تفاصيل تقنية) | النشرة الرسمية |
|---|---|---|
| CVE-2026-109618 | تلف في البيانات الداخلية عند نفاد ذاكرة PHP | GHSA-w8hw-w9fx-j79w |
| CVE-2026-109619 | حالة داخلية تبقى من طلب إلى الطلب الذي يليه | GHSA-6wmf-4rv5-p3rp |
ما الذي تسمح به: في ظروف معيّنة، يمكن لطلب واحد يُرسَل إلى موقعك، دون حساب أو كلمة مرور، أن يجعل الخادم ينفّذ شيفرة بصلاحيات الموقع. بعبارة بسيطة: الاستيلاء على الموقع، وسرقة قاعدة البيانات، وزرع صفحات خبيثة.
من المعرَّض للخطر: حسب النشرة الرسمية، كل تثبيت لـ PHP يخدم صفحات الويب، أيًّا كان نمط التشغيل: PHP-FPM، أو Apache مع mod_php، أو php-cgi، أو FrankenPHP، أو LiteSpeed. ويرى فريق PHP أن الخطر أعلى مع mod_php.
لماذا الأمر عاجل: تسرّبت معرّفات الثغرتين على أحد المنتديات قبل يوم من الإعلان الرسمي، أي قبل انتهاء فترة الحظر. وما إن تصبح ثغرة بهذه الخطورة علنية ويتوفر إصلاحها، حتى يستطيع آخرون دراسة التغييرات ومحاولة استغلالها. الأسلم أن تفترض أن الروبوتات التي تمسح الإنترنت بحثًا عن خوادم غير مُصلَحة ستهتم بها سريعًا.
الإصدارات المصحَّحة:
- PHP 8.5 ← 8.5.12
- PHP 8.4 ← 8.4.27
- PHP 8.3 ← 8.3.36
- PHP 8.2 ← 8.2.35
وماذا عن الإصدارات الأقدم؟ لم يعد PHP 8.1 وما قبله يتلقى تحديثات رسمية. ومع ذلك قدّم فريق PHP إصلاحات مصغّرة للإصدارات 7.4 و8.0 و8.1 لتوزيعات لينكس والجهات التي توفر دعمًا ممتدًّا. عمليًّا، إذا كان خادمك يستخدم PHP الذي توفره توزيعة لينكس (AlmaLinux أو Rocky أو Red Hat أو Debian أو Ubuntu…)، فالمهم هو تحديث حزمة التوزيعة، لا رقم الإصدار الظاهر. على سبيل المثال، أصدرت AlmaLinux منذ 21 أكتوبر تحديثًا لحزمة PHP 8.0 يصلح الثغرتين، بينما بقي الرقم «8.0.30» على حاله.
للتذكّر. ينتهي دعم PHP 8.2 في 31 ديسمبر 2026. إذا كنت ما زلت على 8.2 أو أقدم، فهذه هي اللحظة المناسبة للتخطيط للانتقال إلى 8.3 أو أحدث.
2. هل أنا معنيّ؟
يتوقف الجواب على طريقة استضافة موقعك. ابحث عن حالتك.
الاستضافة المشتركة (cPanel وPlesk وhPanel…)
هذه هي الحالة الأكثر شيوعًا للمواقع الصغيرة. أنت لا تدير الخادم: مزوّد الاستضافة هو من يثبّت إصلاحات PHP. دورك:
- تحقق من الإصدار المختار لموقعك في لوحة التحكم: «Select PHP Version» أو «MultiPHP Manager» في cPanel، و«PHP Settings» في Plesk، و«PHP Configuration» في hPanel. سجّل الفرع (8.1 أو 8.2 أو 8.3…).
- إذا كنت على 8.1 أو أقدم، انتقل إلى 8.3 أو أحدث، بعد التأكد من أن قالبك وإضافاتك تدعمه (انظر أدناه).
- راسل الدعم الفني لمزوّد الاستضافة: «هل طبّقتم إصلاحات PHP الصادرة في 21 أكتوبر 2026 (CVE-2026-109618 وCVE-2026-109619) على خادمي؟». المزوّد الجادّ يجيب بوضوح وبسرعة. وإن لم يفهم ما تتحدث عنه، فتلك معلومة ثمينة عن مدى موثوقيته.
موقع ووردبريس
في لوحة التحكم: أدوات ← صحة الموقع ← معلومات ← الخادم. يبيّن سطر «إصدار PHP» الإصدار الذي يستخدمه موقعك. في الاستضافة المشتركة، لا يكشف هذا الرقم دائمًا إن كان الإصلاح مطبَّقًا (انظر الملاحظة حول التوزيعات أعلاه): عند الشك، اسأل مزوّد الاستضافة.
قبل تغيير فرع PHP، تأكد من أن قالبك وإضافاتك محدَّثة، وخذ نسخة احتياطية. فالإضافات المهجورة منذ سنوات هي غالبًا ما يعيق الانتقال إلى إصدار حديث.
خادم VPS أو خادم مخصّص
أنت المسؤول عن الإدارة: الأمر بين يديك. الفخ الرئيسي أن الخادم قد تُثبَّت عليه عدة إصدارات من PHP في الوقت نفسه، وأن الأمر php -v لا يُظهر إلا إصدار سطر الأوامر، وليس بالضرورة الإصدار الذي يخدم مواقعك.
تحقق بهذا الترتيب:
1. الإصدارات المثبَّتة:
# AlmaLinux, Rocky, Red Hat
rpm -qa | grep -E '^php[0-9]*(-php)?-(common|fpm)'
# Debian, Ubuntu
dpkg -l | grep -E 'php[0-9.]*-(common|fpm)'
2. خدمات PHP-FPM العاملة (هي التي تشغّل مواقعك فعليًّا):
systemctl list-units --type=service --state=running | grep -i php
3. أي إصدار يخدم كل موقع: راجع إعدادات خادم الويب لتعرف إلى أي «مجمّع» (pool) من PHP-FPM يرسل كل موقع طلباته، ثم إلى أي إصدار ينتمي هذا المجمّع. في لوحات مثل Virtualmin وcPanel وPlesk، تظهر هذه المعلومة أيضًا في إعدادات كل نطاق.
4. التحديثات المتاحة:
# AlmaLinux, Rocky, Red Hat
dnf check-update 'php*'
# Debian, Ubuntu
apt update && apt list --upgradable | grep -i php
إذا ظهر تحديث لـ PHP، فاعتبر نفسك معنيًّا حتى يثبت العكس.
عادة يجب التخلي عنها: صفحة phpinfo العلنية
لمعرفة الإصدار، ينشئ كثيرون ملف info.php يحتوي على phpinfo(). لا تتركه منشورًا أبدًا. فهذه الصفحة تعرض الإصدار الدقيق والامتدادات ومسارات الخادم وجزءًا من الإعدادات: خريطة ثمينة لأي مهاجم. إن اضطررت لاستخدامها، فلثوانٍ معدودة ثم احذف الملف. شاشة «صحة الموقع» في ووردبريس أو سطر الأوامر خياران أفضل بكثير.
3. الإصلاح
التحديث
على خادم VPS، يكفي أمر واحد:
# AlmaLinux, Rocky, Red Hat
dnf upgrade 'php*'
# Debian, Ubuntu
apt update && apt install --only-upgrade 'php*'
قبل ذلك، إذا كنت تدير مواقع مهمة، خذ نسخة احتياطية (قاعدة البيانات والملفات). نادرًا جدًّا ما يُعطِب تحديثُ إصلاحٍ داخل الفرع نفسه (مثلًا من 8.3.35 إلى 8.3.36) شيئًا، لكن النسخة الاحتياطية لا تكلّف سوى دقائق.
إعادة تشغيل PHP: الخطوة التي ينساها الجميع
تثبيت الحزم الجديدة لا يستبدل PHP الذي يعمل حاليًّا: فعمليات PHP-FPM الجارية تحتفظ بالإصدار القديم المعرَّض للخطر في الذاكرة، أحيانًا لأسابيع. يجب إعادة تشغيل كل خدمة PHP-FPM:
systemctl restart php-fpm # the exact name depends on your setup
systemctl restart php8.3-fpm # Debian, Ubuntu
ومع mod_php، أعد تشغيل Apache.
ثم تحقق من أن العمليات الجارية بدأت بعد التحديث:
ps -eo pid,lstart,cmd | grep "php-fpm: master"
يجب أن يكون وقت البدء لاحقًا لوقت التحديث. على أنظمة Red Hat ومشتقاتها، يعرض الأمر dnf needs-restarting -s أيضًا الخدمات التي ما زالت تستخدم إصدارات قديمة.
فحص كل موقع
لا تكتفِ بالصفحة الرئيسية، فهي كثيرًا ما تُقدَّم من ذاكرة التخزين المؤقت. لكل موقع، اختبر:
- الصفحة الرئيسية؛
- صفحة تشغّل PHP فعلًا: صفحة الدخول إلى لوحة الإدارة (
/wp-login.phpفي ووردبريس)، أو سلة المشتريات أو صفحة الطلب في متجر؛ - خلوّ سجل أخطاء الموقع من أي خطأ.
على خادم أتولى إدارته، قارنت استجابة كل موقع قبل التحديث وبعده: كان كل شيء مطابقًا، ولم يظهر أي خطأ في السجلات.
4. التخفيف إن تعذّر التحديث فورًا
النشرة الرسمية واضحة: التحديث وحده يصلح هاتين الثغرتين إصلاحًا كاملًا. الإجراءات التالية تقلّص بعض مسارات الهجوم، لكنها لا تجعل الخادم آمنًا. هدفها الصمود بضع ساعات ريثما تنظّم التحديث.
- تعطيل تتبّع تقدّم رفع الملفات (لـ CVE-2026-109619): في
php.iniأو في إعدادات مجمّع PHP-FPM، session.upload_progress.enabled = 0، ثم أعد تشغيل كل عمليات PHP. وتنبّه النشرة إلى عدم الاعتماد علىini_set()ولا على ملف.user.ini، لأنهما يُطبَّقان متأخرَين. هذه الميزة نادرة الاستخدام: بل يوصي فريق PHP بإبقائها معطّلة بعد التحديث إن لم تكن بحاجة إليها. - الحدّ من حجم الطلبات (لـ CVE-2026-109618): قيمة منخفضة لـ
post_max_size، وحدود لحجم الطلبات على مستوى خادم الويب أو الوكيل (proxy). - على PHP 8.5 فقط:
fatal_error_backtraces = 0، ثم إعادة تشغيل العمليات.
تذكر النشرة الرسمية أيضًا إعدادات أخرى متعلقة بالذاكرة، لكن لها آثارًا جانبية كبيرة: لا تطبّقها قبل أن تفهم جيدًا عواقبها على خادمك.
5. هل تعرّضتُ للاختراق؟
إذا أُصلح خادمك بسرعة، فالخطر ضعيف. أما إذا بقيت عدة أيام على إصدار معرَّض للخطر، فخصّص عشر دقائق لفحص بعض العلامات، دون هلع.
- ملفات PHP حديثة وغير متوقعة، خاصة في مجلدات الصور أو التخزين المؤقت:
find /path/to/site -name '*.php' -newermt '2026-10-20' -not -path '*/cache/*'
في ووردبريس، وجود ملف PHP داخل wp-content/uploads مريب في أغلب الأحيان.
- حسابات مدير غير معروفة: في ووردبريس، المستخدمون ← التصفية حسب دور «مدير».
- مهام مجدولة غير معروفة:
crontab -lلكل مستخدم للموقع، ومجلد/etc/cron.d. - السجلات: سيل من الطلبات نحو عناوين غريبة، وأخطاء PHP غير معتادة بين 20 و22 أكتوبر.
- سلوك الموقع: تحويلات نحو مواقع قمار أو صيدليات، وصفحات بلغات أجنبية مفهرسة في غوغل، وتنبيهات أمنية من مزوّد الاستضافة.
إن عثرت على شيء: لا تكتفِ بحذف الملف. ضع الموقع في وضع الصيانة، وغيّر كل كلمات المرور (الإدارة وقاعدة البيانات وFTP والاستضافة)، واستعد نسخة احتياطية سليمة سابقة للحادث إن توفرت، وحدّث كل شيء، ثم راقب. وإن لم تكن واثقًا، فاستعن بمحترف: فالتنظيف الجزئي كثيرًا ما يترك بابًا خلفيًّا مفتوحًا.
6. كي لا تُفاجأ مرة أخرى
التحديثات الأمنية التلقائية
على الخادم، فعّل التثبيت التلقائي للإصلاحات الأمنية:
- AlmaLinux وRocky وRed Hat:
dnf-automatic، مضبوطًا على تطبيق التحديثات الأمنية؛ - Debian وUbuntu:
unattended-upgrades.
الفخ الذي اكتشفته
على خادم أتولى إدارته، لا يأتي PHP من التوزيعة، بل من مستودع خارجي واسع الانتشار (مستودع Remi Collet)، يتيح تثبيت عدة إصدارات حديثة من PHP. ينشر هذا المستودع إصلاحاته بسرعة، لكنه لا يصنّفها «تحديثات أمنية» في البيانات الوصفية التي تقرؤها الأدوات التلقائية. والنتيجة: إعداد «تثبيت التحديثات الأمنية فقط» كان سيتجاهل إصلاح PHP2Shell، بينما يبدو الخادم محميًّا.
الحل الذي اعتمدته وأوصي به:
- مهمة ليلية تطبّق الإصلاحات الأمنية للتوزيعة و، بشكل صريح، تحديثات حزم PHP (
dnf upgrade --securityثمdnf upgrade 'php*')؛ - إعادة تشغيل تلقائية لـ PHP-FPM كلما حُدِّث PHP؛
- فحص كل موقع بعد العملية، مع تنبيه إذا توقف أحدها عن الاستجابة.
تحديثات الإصلاح داخل الفرع نفسه من PHP مصمَّمة كي لا تُعطِب شيئًا، فأتمتتها أمر معقول؛ أما الانتقال بين الفروع (من 8.3 إلى 8.4 مثلًا) فيبقى قرارًا يُتَّخذ يدويًّا بعد الاختبار.
متابعة الإعلانات
- أخبار موقع php.net، حيث تُنشر النشرات الأمنية؛
- قائمة الإصدارات المدعومة، لاستباق مواعيد انتهاء الدعم؛
- الإعلانات الأمنية لتوزيعة لينكس التي تستخدمها أو لمزوّد الاستضافة.
قائمة التحقق
- [ ] أعرف إصدار PHP الذي يخدم كل موقع من مواقعي، لا إصدار سطر الأوامر فقط.
- [ ] مواقعي تعمل على 8.5.12 أو 8.4.27 أو 8.3.36 أو 8.2.35 أو أحدث، أو على حزمة توزيعة تلقّت الإصلاح.
- [ ] أُعيد تشغيل PHP-FPM (أو Apache مع mod_php) بعد التحديث، وتحققت من وقت بدء العمليات.
- [ ] اختبرت صفحة تشغّل PHP فعلًا على كل موقع.
- [ ] لا يوجد أي ملف
phpinfo()متاح على الإنترنت. - [ ] إن لم أكن أستخدم
session.upload_progress، فهو معطَّل. - [ ] تحققت من عدم وجود ملفات PHP مريبة أو حسابات مدير غير معروفة.
- [ ] التحديثات الأمنية تلقائية، بما فيها حزم PHP إن كانت تأتي من مستودع خارجي.
- [ ] إن كنت ما زلت على PHP 8.2 أو أقدم، فقد خطّطت للانتقال إلى فرع مدعوم.
الأسئلة الشائعة
هل موقعي على ووردبريس معنيّ حتى لو كان محدَّثًا؟
نعم، على الأرجح. الثغرة في PHP، اللغة التي يعمل بها ووردبريس، لا في ووردبريس نفسه ولا في إضافاتك. ووردبريس محدَّث بالكامل فوق PHP معرَّض للخطر يبقى مكشوفًا.
هل يتكفّل مزوّد الاستضافة بذلك تلقائيًّا؟
في الاستضافة المشتركة، هذا دوره، والمزوّدون الجادّون يطبّقون هذا النوع من الإصلاحات بأولوية. لكن تحقّق: اسأله صراحةً إن كان قد طبّق إصلاحات 21 أكتوبر 2026. أما على خادم VPS أو خادم مخصّص، فلن يقوم أحد بذلك نيابةً عنك.
حدّثت PHP، هل هذا كافٍ؟
فقط إذا أُعيد تشغيل PHP بعد ذلك. فما دامت عمليات PHP-FPM (أو Apache مع mod_php) لم تُعَد تشغيلها، يواصل الإصدار القديم المعرَّض للخطر خدمة صفحاتك.
الأمر php -v يعرض إصدارًا قديمًا، فهل أنا معرَّض للخطر حتمًا؟
ليس بالضرورة. أولًا، يعرض هذا الأمر إصدار سطر الأوامر، وهو ليس دائمًا الإصدار الذي يخدم مواقعك. ثانيًا، كثيرًا ما تُصلح توزيعات لينكس حزمها دون تغيير رقم الإصدار: العبرة بتاريخ الحزمة وتفاصيلها.
هل يحميني تعطيل session.upload_progress؟
جزئيًّا فقط. تذكر النشرة الرسمية أنه يسدّ مسارات الهجوم المؤكدة المرتبطة بالجلسات في إحدى الثغرتين، لا المتغيّرات الأخرى، ولا شيء بالنسبة للثغرة الثانية. إنه إجراء مؤقت، لا إصلاح.
ما زلت على PHP 7.4 أو 8.0، ماذا أفعل؟
هذه الإصدارات لم تعد تتلقى تحديثات رسمية. إذا كان PHP لديك يأتي من توزيعة توفّر دعمًا ممتدًّا، فتحقق من أن حزمتها تلقّت الإصلاح. وإلا، فالحل الحقيقي هو الانتقال إلى إصدار مدعوم: خطّط لذلك، فالقوالب والإضافات القديمة قد تحتاج إلى تعديلات.
كيف أعرف إن كانت هناك محاولة لاستغلال الثغرة على موقعي؟
لا توجد بصمة بسيطة وشاملة. ابحث عن علامات الاختراق الموصوفة أعلاه (ملفات حديثة، حسابات غير معروفة، مهام مجدولة، سلوك غير طبيعي). وإن كان لديك شكّ جدّي، فاطلب فحص الخادم من محترف.
المصادر
- php.net، النشرة الأمنية بتاريخ 21 أكتوبر 2026 (بالإنجليزية)
- php.net، سجل تغييرات PHP 8 (بالإنجليزية)
- php.net، الإصدارات المدعومة (بالإنجليزية)
- GitHub، النشرة GHSA-w8hw-w9fx-j79w (CVE-2026-109618) (بالإنجليزية)
- GitHub، النشرة GHSA-6wmf-4rv5-p3rp (CVE-2026-109619) (بالإنجليزية)
- Rapid7، تحليل CVE-2026-109618 وCVE-2026-109619 (بالإنجليزية)
- Datadog Security Labs، PHP2Shell (بالإنجليزية)
- ووردبريس، شاشة صحة الموقع (بالإنجليزية)
- توثيق dnf-automatic (بالإنجليزية)
- Debian، التحديثات التلقائية عبر unattended-upgrades (بالإنجليزية)
- مستودع Remi Collet (حزم PHP لـ Red Hat ومشتقاتها)
هل تحتاج مساعدة؟
يمكنني فحص خادمك أو استضافتك وإصلاحهما، وإعداد تحديثات أمنية تلقائية موثوقة، ومراقبة مواقعك يومًا بيوم. اطّلع على خدمة الصيانة والاستضافة أو تواصل معي. ولفحص أوّلي مجاني لنطاقك، جرّب أداة فحص صحة النطاق.