روح للمحتوى
MizanStack

ثغرات PHP2Shell واختراق LiteLLM: تعمل إيه النهارده

يوم 21 أكتوبر 2026 PHP صلّحت ثغرتين خطيرين بيخلّوا المهاجم يشغّل كود على سيرفر الويب من غير login. وفي نفس اليوم اتكشف إن LiteLLM 1.107.0 بتسرق المفاتيح. الجزء الأول للكل، والتاني للي عنده موقع PHP أو بيستخدم LiteLLM.

إيه اللي حصل؟

  • PHP شغالة على حوالي 70% من المواقع (69.3% من المواقع اللي لغة السيرفر بتاعتها معروفة، W3Techs (بيفتح في تاب جديد)، 21 أكتوبر 2026).
  • ثغرتين في محرك PHP نفسه، CVE-2026-109618 وCVE-2026-109619، الاتنين تقييمهم 9.2 (critical). بيسمحوا بتنفيذ كود عن بعد (RCE) من غير login. الباحثين سمّوهم PHP2Shell.
  • الخبر اتسرب على Hacker News يوم 20 أكتوبر 2026، وPHP نزّلت الإصلاح يوم 21 أكتوبر 2026 الساعة 14:00 UTC.
  • الهجمات بدأت بسرعة: watchTowr بتقول إن الـhoneypots بتاعتها شافت استغلال in the wild يوم 21 أكتوبر، وCloudflare شافت attack traffic.
  • الـCISA الأمريكية والـNCSC البريطاني والـFBI Cyber Division قالوا لكل اللي بيستخدم PHP: حدّث دلوقتي.
  • وفي نفس اليوم، الـPython package اللي اسمها LiteLLM (حوالي 23 مليون تحميل في الأسبوع) نزلت منها نسخة ملغومة، 1.107.0، بتسرق المفاتيح والباسوردات. شوف جزء LiteLLM تحت.

الجزء الأول: لو إنت بتستخدم المواقع بس

الثغرات في سيرفرات المواقع، مش في موبايلك أو اللابتوب بتاعك. إنت مش هتقدر تصلّح مواقع غيرك، بس تقدر تقلّل الضرر لو موقع منهم سرّب بياناتك:

  1. باسورد مختلف لكل موقع، وسيب الـpassword manager يفتكرهم.

  2. شغّل التحقق على خطوتين (2FA) في كل حتة تقدر، خصوصًا الإيميل والبنك.

  3. ما تفتحش أي link مفاجئ، حتى لو الرسالة شكلها جاية من موقع إنت بتستخدمه.

  4. شغّل تنبيهات البنك، وما تكلّمش غير الأرقام الرسمية اللي على الكارت أو على موقع البنك.

عندك موقع WordPress أو غيره عند شركة hosting؟ اسألهم هل PHP بتاعة موقعك اتحدّثت، أو شوف نسخة PHP في لوحة التحكم (الأجزاء اللي جاية).

الجزء التاني: إنت متأثر؟

  • تقريبًا كل نسخ PHP من 5.4 وطالع متأثرة بثغرة واحدة على الأقل. WordPress وDrupal وJoomla وLaravel وأي app بـPHP كلهم شغالين على نفس المحرك، فتحديث الـapp لوحده مش كفاية.
  • Apache مع mod_php مؤكد إنه متأثر. وPHP-FPM كمان مؤكد، عن طريق مسارات في الـapp. وphp-cgi وFrankenPHP وLiteSpeed كمان في الليستة.
  • النسخ المصلّحة: 8.5.12 و8.4.27 و8.3.36 و8.2.35. أي نسخة أقدم منها على نفس الفرع فيها الثغرة، إلا لو توزيعة لينكس بتاعتك عملت backport للإصلاح (النقطة اللي جاية).
  • PHP 8.1 و8.0 و7.4 مالهمش نسخة رسمية جاهزة، فيه بس source patches للي بيبني PHP بنفسه. توزيعات لينكس بتنزّل الإصلاح في الـpackages بتاعتها: Debian DSA-6574-1 (بيفتح في تاب جديد) بتنزّل النسخ المصلّحة 8.4.27 و8.2.35، وUbuntu USN-8948-1 (بيفتح في تاب جديد) بتعمل backport للإصلاح وبتسيب الرقم القديم (8.3.6 على Ubuntu 24.04، و8.1.2 على 22.04). يعني سيرفر متصلّح ممكن يطلّع رقم قديم: قارن نسخة الـpackage (مثلًا apt policy php8.3) بإعلان التوزيعة بتاعتك.
  • PHP 7.3 وأقدم: مفيش إصلاح رسمي ولا patch. خطّط إنك تنقل لنسخة مدعومة.

اعرف موقعك شغال بأنهي نسخة بجد

  • Shared hosting: افتح لوحة التحكم (cPanel أو Plesk أو لوحة الشركة) ودوّر على صفحة PHP version أو PHP selector.
  • سيرفرك الخاص: الأمر اللي تحت بيوريك PHP بتاعة الـTerminal. الموقع ممكن يكون شغال بـPHP تانية (Apache أو PHP-FPM)، فاتأكد كمان من لوحة التحكم أو من صفحة phpinfo، وامسح الصفحة دي بعدها.
php -v

الـphp2shell-checker (بيفتح في تاب جديد) المجاني من OpenAI بيقرا النسخة اللي الموقع بيعلنها في الـheaders، ويرد بـOK أو VULNERABLE أو UNKNOWN. UNKNOWN مش معناها إنك آمن، وOK بتقارن رقم النسخة بس، والـbackport ممكن يطلّع VULNERABLE على سيرفر متصلّح أصلًا.

حدّث PHP

لوحة التحكم

اختار 8.5.12 أو 8.4.27 أو 8.3.36 أو 8.2.35 (أو أحدث) من صفحة نسخة PHP. لو شركة الـhosting لسه ما نزّلتش نسخة مصلّحة، اسألهم إمتى.

سيرفر Ubuntu أو Debian

  1. نزّل التحديثات من التوزيعة:

    sudo apt update && sudo apt upgrade
  2. اعمل restart للسيرفر عشان يحمّل PHP الجديدة. الـprocesses القديمة بتفضل شغالة بالكود القديم لحد ما تعمل كده. لـApache:

    sudo systemctl restart apache2
  3. لـPHP-FPM، حط نسختك في الاسم (هنا 8.3):

    sudo systemctl restart php8.3-fpm

Docker

الإصلاح بييجي في الـimages الرسمية بتاعة PHP بعد ما بتتبني من جديد. نزّل الـimages الجديدة، ابني الـimages بتاعتك عليها من تاني، واعمل restart. الـimage المتثبّتة على tag أو digest قديم بتفضل بـPHP القديمة، فثبّتها على نسخة مصلّحة.

docker compose pull --ignore-buildable && docker compose build --pull && docker compose up -d

لو مش هتقدر تحدّث النهارده

مفيش حل مؤقت كامل: التحديث هو الحل الآمن الوحيد. الـCISA (بيفتح في تاب جديد) بتقول إن السيستم اللي مش هيتحدّث على طول، أو شغال بـPHP 8.1 أو أقدم، يتقفل لحد ما يتصلّح. والـNCSC البريطاني (بيفتح في تاب جديد) بيقول طبّق الحلول المؤقتة، ولو مش قادر، فكّر تقفل السيستم.

حلول مؤقتة

  • اقفل session.upload_progress.enabled.
  • قلّل post_max_size وmax_input_nesting_level.
  • خلّي workers بتوع PHP-FPM يتجددوا بعد كل request بـpm.max_requests = 1.
  • امنع الـmultipart uploads في الأماكن اللي موقعك مش محتاجها فيها، وحط حد لحجم الـrequest قبل ما يوصل لـPHP.
  • ما تستخدمش RLIMIT_AS أو RLIMIT_DATA عشان تحدد الميموري: الـadvisory بيقول إنهم بيشغّلوا نفس المسار اللي فيه الثغرة.
  • الـWAF أو الـCDN بيساعد، بس مش كفاية لوحده.

اتأكد إن محدش دخل

  • احتفظ بالـlogs بتاعة السيرفر واقراها، وبص على العلامات اللي في php2shell.com (بيفتح في تاب جديد).
  • لو شاكك إن السيرفر اتخترق: اعزله، احتفظ بالـlogs، غيّر كل باسورد ومفتاح السيرفر كان يقدر يقراه، واعمل sign out لكل المستخدمين.

نزّلت LiteLLM 1.107.0؟

LiteLLM 1.107.0 على PyPI (نزلت يوم 21 أكتوبر 2026 الساعة 11:39 UTC) والـDocker images الرسمية بتاعتها (tags v1.107.0 وlatest وmain-latest وmain-stable) كانت ملغومة. الكود بيشتغل أول ما Python تفتح، من غير أي import، وبيسرق مفاتيح الـcloud ومفاتيح الـAPI ومفاتيح SSH وlogins أدوات الـAI وبيانات المتصفح.

  1. اتأكد من غير ما تشغّل Python دي: الكود الملغوم بيشتغل كل ما Python تفتح، حتى مع pip. في فولدر المشروع، لو الـenvironment اسمه .venv:

    ls .venv/lib/python3*/site-packages | grep -i -e litellm -e cook.pth
  2. على ويندوز، افتح .venv\Lib\site-packages في File Explorer ودوّر على نفس الأسامي.

  3. لو لقيت litellm-1.107.0.dist-info أو cook.pth، أو نزّلت واحد من الـDocker tags دول اليوم ده، اعتبر الجهاز مكشوف وما تشغّلش Python في الـenvironment ده تاني.

  4. امسح الـenvironment ده (أو الـcontainer). لو سطّبت LiteLLM برة أي virtual environment، أأمن حل إنك تعمل الجهاز من الأول؛ وعلى الأقل امسح LiteLLM وcook.pth والـsitecustomize.py اللي ضافه.

  5. بعدها غيّر كل مفتاح وباسورد الجهاز ده كان يقدر يقراه: الـcloud، شركات الـAI، GitHub، SSH، مفاتيح GPG وTLS، بيانات دخول الـLiteLLM proxy، وأي logins متسجّلة في المتصفح.

  6. اعمل environment جديد وسطّب النسخة السليمة:

    pip install "litellm==1.106.2"

اتراجع على الإعلانات الرسمية يومي 21 و22 أكتوبر 2026. ممكن يكون فيه جديد من ساعتها، فشوف المصادر.