
در هفتهٔ آخر مهر ۱۴۰۵ دو آسیبپذیری بحرانی در هستهٔ PHP اعلام شد که با نام PHP2Shell شناخته میشوند. این دو باگ به مهاجم اجازه میدهند بدون نام کاربری و رمز، روی سروری که PHP را برای صفحههای وب اجرا میکند کد دلخواه اجرا کند. یعنی سایتهای وردپرسی، فروشگاهها، پنلهای مدیریتی و پنل وب مرکز تلفن ایزابل همه در محدودهٔ خطر هستند.
این مقاله توضیح میدهد کدام نسخهها آسیبپذیرند، نسخهٔ PHP خودتان را چطور پیدا کنید، و برای ایزابل و سایتها دقیقاً چه کاری انجام دهید.
PHP2Shell چیست؟
- CVE-2026-109618: اجرای کد از راه دور از طریق خراب شدن دادهها هنگام کمبود حافظه.
- CVE-2026-109619: اجرای کد از راه دور از طریق باقی ماندن وضعیت داخلی یک درخواست برای درخواست بعدی.
هر دو در CVSS نسخهٔ ۴ امتیاز ۹٫۲ از ۱۰ گرفتهاند. طبق اطلاعیهٔ PHP، همهٔ نصبهایی که درخواست وب را اجرا میکنند در معرضاند: PHP-FPM، آپاچی با mod_php، php-cgi، LiteSpeed و FrankenPHP. بیشترین خطر برای آپاچی با mod_php است، چون حمله میتواند پیش از اجرای کد خود برنامه موفق شود.
جزئیات این باگها ۲۸ مهر، یک روز پیش از انتشار وصله، فاش شد. شرکتهای امنیتی از جمله watchTowr و Sophos از تلاشهای واقعی برای سوءاستفاده خبر دادهاند. پس این یک خطر نظری نیست.
کدام نسخهها آسیبپذیرند؟
نسخههای اصلاحشده ۲۹ مهر ۱۴۰۵ (۲۱ اکتبر ۲۰۲۶) منتشر شدند:
- 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 7.4، 8.0 و 8.1: پشتیبانی رسمی این نسخهها تمام شده و نسخهٔ رسمی تازه ندارند. فقط وصلهٔ منبع حداقلی از پروژهٔ PHP یا بستهٔ اصلاحشده از توزیع لینوکس یا شرکتهای پشتیبانی بلندمدت در دسترس است.
- PHP 7.3 و قدیمیتر، از جمله 5.x: آسیبپذیرند و اصلاحیهٔ رسمی ندارند. راه درست، رفتن به نسخهٔ پشتیبانیشده است.
نکتهٔ مهم: بهروزرسانی وردپرس، افزونهها یا خود برنامه این مشکل را حل نمیکند. باید خود PHP بهروز شود. تنظیمات هم به گفتهٔ خود PHP «خطر را کم میکنند ولی نصب را امن نمیکنند».
قدم اول: نسخهٔ PHP واقعی را پیدا کنید
در ترمینال سرور:
php -vاما نسخهٔ خط فرمان ممکن است با نسخهای که سایت را اجرا میکند فرق داشته باشد. اینها را هم ببینید:
php-fpm -v
httpd -M 2>/dev/null | grep -i php
apache2ctl -M 2>/dev/null | grep -i phpخروجی دو دستور آخر اگر php_module یا php7_module نشان دهد، یعنی PHP بهصورت mod_php داخل آپاچی اجرا میشود؛ همان حالتی که بیشترین خطر را دارد.
توجه: توزیعهای لینوکس (اوبونتو، دبیان، Rocky) وصله را معمولاً روی همان شمارهٔ نسخهٔ خودشان اعمال میکنند. یعنی ممکن است نسخه همچنان مثلاً 8.3.6 نشان داده شود ولی بسته اصلاح شده باشد. برای اطمینان، تاریخچهٔ تغییرات بسته را برای شمارهٔ CVE جستوجو کنید (نمونهها پایینتر آمده است).
ایزابل: چه کنیم؟
پنل وب ایزابل روی آپاچی و PHP اجرا میشود. اگر این پنل از اینترنت در دسترس باشد، مهاجم میتواند از راه همین باگ سرور مرکز تلفن را بگیرد؛ و مرکز تلفن آلوده یعنی خطر تماسهای غیرمجاز بینالمللی به هزینهٔ شما.
ایزابل ۴ (روی CentOS 7)
ایزابل ۴ با PHP 5.4 کار میکند و CentOS 7 هم از تیر ۱۴۰۳ پشتیبانی نمیشود. برای این نسخه اصلاحیهٔ رسمی وجود ندارد. کارهای لازم به ترتیب اهمیت:
- همین امروز دسترسی به پنل وب (پورتهای 80 و 443) را از اینترنت ببندید و فقط به شبکهٔ داخلی و VPN اجازه دهید.
- تنظیمات کاهش خطر را (پایینتر) اعمال کنید.
- مهاجرت به ایزابل ۵ روی Rocky Linux 8 را برنامهریزی کنید.
ایزابل ۵ (روی Rocky Linux 8)
نسخهٔ PHP و بستههای نصبشده را ببینید:
php -v
rpm -qa 'php*'بهروزرسانیهای موجود را بررسی و نصب کنید:
dnf check-update 'php*'
dnf update 'php*'ببینید بستهٔ نصبشده وصلهٔ PHP2Shell را دارد یا نه:
rpm -q --changelog php | grep -i -E "109618|109619"اگر خروجی خالی بود، یعنی بستهٔ اصلاحشده هنوز برای شاخهٔ PHP شما در مخزنهای فعلی نیامده است. در این حالت، مثل ایزابل ۴، پنل را از اینترنت ببندید و تنظیمات کاهش خطر را اعمال کنید. از اسکریپتهای ناشناس که «PHP ایزابل را ارتقا میدهند» بدون نسخهٔ پشتیبان و آزمایش استفاده نکنید؛ تغییر نسخهٔ PHP ممکن است بخشهایی از پنل را از کار بیندازد.
بعد از هر تغییر، آپاچی را دوباره راهاندازی کنید:
systemctl restart httpdبستن پنل ایزابل از اینترنت
سادهترین و مؤثرترین کار همین است. اگر ایزابل پشت روتر میکروتیک است و فقط ترانک SIP باید از بیرون بیاید، دسترسی وب را فقط برای فهرست آدرسهای مدیران باز بگذارید:
/ip firewall address-list add list=admins address=192.168.1.0/24
/ip firewall filter add chain=forward dst-address=192.168.1.10 protocol=tcp dst-port=80,443 src-address-list=!admins action=drop comment="Issabel web: admins only"آدرسها را با شبکه و آدرس ایزابل خودتان عوض کنید و قانون را بالاتر از قانونهای اجازه بگذارید. برای دسترسی از بیرون سازمان، از VPN استفاده کنید.
تنظیمات کاهش خطر (وقتی هنوز نمیشود بهروز کرد)
اطلاعیهٔ PHP این تنظیمات را پیشنهاد کرده است. تأکید خود PHP: اینها خطر را کم میکنند ولی جایگزین بهروزرسانی نیستند. در فایل php.ini (در ایزابل معمولاً /etc/php.ini)، یا تنظیمات pool در PHP-FPM:
session.upload_progress.enabled = 0
post_max_size = 8Msession.upload_progress.enabled = 0مسیر شناختهشدهٔ CVE-2026-109619 را میبندد. باید درphp.iniیا تنظیمات سرور باشد، نه باini_set()در کد.post_max_sizeرا کم کنید: اگر از پنل فایل بزرگ بالا نمیگذارید ۸ مگابایت، و اگر فایل صوتی یا پشتیبان بارگذاری میکنید، حدود ۳۲ مگابایت.- اطلاعیهٔ PHP برای CVE-2026-109618 تنظیم
memory_limitرا هم توصیه کرده است؛ پیش از تغییر آن، توضیح کامل اطلاعیه را بخوانید، چون روی رفتار برنامه اثر دارد.
بعد از تغییر، همهٔ پردازشهای PHP باید دوباره راهاندازی شوند (آپاچی یا PHP-FPM). تا زمانی که پردازشهای قدیمی در حال اجرا هستند، تنظیم جدید اعمال نمیشود.
سایتهای PHP: هاست اشتراکی، VPS و داکر
هاست اشتراکی (cPanel، DirectAdmin)
- از بخش Select PHP Version یا MultiPHP Manager، نسخهٔ PHP سایت را به یکی از شاخههای پشتیبانیشده (۸٫۲ تا ۸٫۵) ببرید.
- از شرکت هاستینگ بپرسید بستههای اصلاحشده روی سرور نصب شدهاند یا نه. روی هاست اشتراکی، بهروزرسانی خود PHP کار میزبان است.
- پیش از تغییر نسخه، از سایت پشتیبان بگیرید. افزونهها و قالبهای قدیمی ممکن است با PHP 8 سازگار نباشند.
سرور مجازی یا اختصاصی اوبونتو و دبیان
sudo apt update
sudo apt list --upgradable | grep -i php
sudo apt upgradeبعد سرویس PHP و وبسرور را دوباره راهاندازی کنید، مثلاً:
sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2سرور Rocky، AlmaLinux و RHEL
sudo dnf update 'php*'
sudo systemctl restart php-fpm httpdداکر
ایمیجهای رسمی PHP با نسخهٔ اصلاحشده منتشر شدهاند. ایمیج را دوباره بکشید، کانتینر را از نو بسازید و مطمئن شوید شمارهٔ نسخه حداقل یکی از نسخههای اصلاحشدهٔ بالاست؛ اگر نسخهٔ ایمیج را در Dockerfile ثابت کردهاید، آن را عوض کنید.
بعد از بهروزرسانی: بررسی کنید وارد نشده باشند
چون سوءاستفاده پیش از انتشار وصله هم گزارش شده، بهروزرسانی کافی نیست؛ بررسی کنید چیزی از قبل جا نمانده باشد:
- فایلهای PHP تازه یا ناشناس در پوشههای سایت، بهخصوص پوشههای بارگذاری:
find /var/www -name "*.php" -newermt "2026-10-15" -ls- کاربرهای تازهٔ سیستم، Cron Jobهای ناشناس و ارتباطهای خروجی عجیب از سرور.
- در ایزابل: ترانکها و Outbound Routeهای تازه، داخلیهای ناشناس و تماسهای بینالمللی غیرعادی در گزارش تماسها. رمز حساب admin پنل و رمزهای SIP را هم عوض کنید.
اگر نشانهٔ نفوذ دیدید، پاک کردن چند فایل کافی نیست. سرور را از نسخهٔ پشتیبان سالم یا نصب تازه بازسازی و همهٔ رمزها را عوض کنید.
یک مورد دیگر: CVE-2026-115560
اول آبان، PHP دربارهٔ یک مسیر کماحتمال دیگر هم اطلاعرسانی کرد. این مسیر فقط برنامههایی را تهدید میکند که روش ذخیرهٔ نشست (session) را وسط اجرا عوض میکنند. توصیهٔ PHP همان تنظیم session.upload_progress.enabled = 0 است تا نسخهٔ معمولی بعدی منتشر شود. اگر این تنظیم را از قبل گذاشتهاید، کار دیگری لازم نیست.
خلاصه
- نسخهٔ واقعی PHP سایت و ایزابل را پیدا کنید.
- به نسخهٔ اصلاحشده (8.2.35، 8.3.36، 8.4.27، 8.5.12 یا بالاتر) یا بستهٔ وصلهشدهٔ توزیعتان بهروز کنید.
- اگر نمیشود، پنلها را از اینترنت ببندید و تنظیمات کاهش خطر را بگذارید.
- همهٔ پردازشهای PHP را دوباره راهاندازی کنید.
- ردپای نفوذ را بررسی کنید.
اگر ایزابل یا سرور سایت شما روی نسخهٔ قدیمی PHP است و نمیدانید از کجا شروع کنید، از صفحههای VoIP و ارتباطات سازمانی و امنیت و فایروال درخواست بررسی بدهید. برای بستن دسترسیها روی میکروتیک هم مقالهٔ امنیت شبکه با میکروتیک را ببینید.
منابع: اطلاعیههای امنیتی PHP، پرسشوپاسخ watchTowr دربارهٔ PHP2Shell، تحلیل Datadog Security Labs، بحث FreePBX دربارهٔ وصلهٔ PHP.
عکس: lmonk72، مالکیت عمومی (CC0)، از ویکیمدیا کامنز؛ برش داده شده.



