دو آسیب‌پذیری بحرانی اجرای کد از راه دور (RCE) در هسته محیط اجرای PHP تحت شناسه‌های CVE-2026-109618 و CVE-2026-109619 شناسایی شده است. این دو نقص، بخش اجرای کد را در گروه گسترده‌تری از آسیب‌پذیری‌های هسته PHP تشکیل می‌دهند که توسط شرکت پژوهشی Wiz با نام PHP2Shell نام‌گذاری شده است. طبق گزارش Wiz، مجموعه PHP2Shell شامل چندین نقص بحرانی — از افشای حافظه پردازشی مشابه Heartbleed تا اجرای کد احرازهویت‌نشده — است که بر تمام نسخه‌های عرضه شده PHP در یک دهه گذشته تا نسخه ۵.۴ تأثیر می‌گذارد و سرورهای میزبان ۷۰٪ از کل وب‌سایت‌های جهان را در معرض خطر قرار می‌دهد. مدیران سیستم باید فوراً سرویس‌های وب خود را بررسی و به‌روزرسانی کنند و کاربران اینترنت نیز اصول ایمنی دیجیتال را رعایت نمایند.

این گزارش به بررسی فنی ریشه این آسیب‌پذیری‌ها، فهرست نسخه‌های رسمی اصلاح‌شده PHP، توصیه‌های امنیتی برای کاربران و راهنمای اقدامات فنی برای مدیران شبکه می‌پردازد.

شرح ماجرا: دوگانه آسیب‌پذیری php2shell

بر اساس گزارش رسمی پایگاه ملی آسیب‌پذیری‌ها (NVD) در تاریخ ۲۱ اکتبر ۲۰۲۶، این دو نقص در بخش تخصیص حافظه و چرخه مدیریت درخواست‌های موتور Zend Engine قرار دارند.

هنگام بروز خطاهای بحرانی یا کمبود حافظه (OOM) در حین پردازش یک درخواست، PHP از دستور داخلی longjmp برای توقف اجرای فرآیند استفاده می‌کند. در نسخه‌های وصله‌نشده، این توقف ناگهانی به ساختار ردیابی حافظه آسیب می‌زند و دو سناریوی خطرناک ایجاد می‌کند:

  1. استفاده مجدد از حافظه مقداردهی‌نشده (CVE-2026-109618): در صورتی که تخصیص حافظه در حین پردازش با شکست مواجه شود، فضاهای حافظه اختصاص‌یافته برای متغیرهای درخواست بدون مقداردهی اولیه باقی می‌مانند. سپس فرآیند پاک‌سازی برنامه این حافظه را می‌خواند که باعث تخریب حافظه Heap و امکان اجرای کد از راه دور می‌شود.
  2. ارجاع به متغیرهای سراسری منسوخ (CVE-2026-109619): اشاره‌گرهای سراسری که موقتاً به حافظه درخواست لغوشده ارجاع می‌دهند، پس از خروج اضطراری پاک نمی‌شوند. هنگامی که همان فرآیند درخواست بعدی را دریافت می‌کند، با این آدرس‌های آزادشده تعامل پیدا کرده و به مهاجم امکان هدایت جریان کنترل برنامه را می‌دهد.

از آنجا که فرآیندهای PHP (مانند PHP-FPM یا کانتینرهای پایدار) صدها درخواست را به صورت متوالی پردازش می‌کنند، مهاجمان خارجی می‌توانند با ارسال درخواست‌های دستکاری‌شده HTTP، کمبود حافظه ایجاد کرده و بدون نیاز به اطلاعات کاربری، دستورات سیستمی را بر روی سرور اجرا کنند.

نسخه‌های آسیب‌پذیر PHP و وصله‌های رسمی

تیم توسعه PHP در تاریخ ۲۲ اکتبر ۲۰۲۶ وصله‌های رسمی را برای تمام شاخه‌های فعال منتشر کرده است. تمامی سازمان‌ها باید سرورهای خود را طبق جدول زیر بازبینی نمایند:

شاخه نسخه‌های آسیب‌پذیر نسخه اصلاح‌شده وضعیت پشتیبانی
PHP 8.5 از 8.5.0 تا 8.5.11 8.5.12 پشتیبانی فعال (Active support)
PHP 8.4 از 8.4.0 تا 8.4.26 8.4.27 پشتیبانی فعال (Active support)
PHP 8.3 از 8.3.0 تا 8.3.35 8.3.36 فقط وصله‌های امنیتی
PHP 8.2 از 8.2.0 تا 8.2.34 8.2.35 فقط امنیتی (پایان در ۳۱ دسامبر ۲۰۲۶)
PHP 8.1 و نسخه‌های قدیمی‌تر تمام نسخه‌ها فاقد وصله پایان چرخه عمر (End of Life)

بر اساس مستندات رسمی پشتیبانی PHP، شاخه‌های تحت پشتیبانی فعال (PHP 8.4 و PHP 8.5) هم اصلاحات نرم‌افزاری و هم وصله‌های امنیتی را دریافت می‌کنند. شاخه‌های محدود به امنیت (PHP 8.2 و PHP 8.3) منحصراً به‌روزرسانی‌های امنیتی را دریافت می‌نمایند؛ نسخه PHP 8.2 در ۳۱ دسامبر ۲۰۲۶ کاملاً از رده خارج خواهد شد.

سرورهایی که همچنان از PHP 8.1 یا نسخه‌های قدیمی‌تر استفاده می‌کنند، برای همیشه در معرض خطر باقی خواهند ماند زیرا این شاخه‌ها دیگر به‌روزرسانی دریافت نمی‌کنند. سازمان‌ها باید هرچه سریع‌تر به شاخه‌های جدید مهاجرت کنند.

این اتفاق برای کاربران عادی چه معنایی دارد

بر اساس داده‌های ارائه‌شده توسط شرکت Wiz، زبان PHP میزبان نزدیک به ۷۰٪ از کل وب‌سایت‌های جهان است که شامل سیستم‌های مدیریت محتوا، فروشگاه‌های اینترنتی و درگاه‌های خدمات دیجیتال می‌شود. حتی اگر سروری را مدیریت نمی‌کنید، خدمات آنلاینی که روزانه با آن‌ها سروکار دارید ممکن است از این پلتفرم استفاده کنند.

اگرچه کاربران عادی دسترسی مستقیمی برای اصلاح سرورها ندارند، رعایت این نکات امنیتی ضروری است:

  • توجه به هشدارهای امنیتی سرویس‌ها: چنانچه پلتفرم یا فروشگاه آنلاینی که در آن عضو هستید وقوع حادثه امنیتی را اعلام کرد، بلافاصله رمز عبور خود را در آن سرویس تغییر دهید.
  • عدم استفاده از رمزهای عبور تکراری: استفاده از یک رمز عبور یکسان در چندین وب‌سایت ریسک بالایی دارد. در صورت نفوذ به یک سرور، هکرها این اطلاعات را روی سایر حساب‌های بانکی و ایمیل‌ها آزمایش می‌کنند. برای هر حساب از رمز عبور اختصاصی و پیچیده استفاده کنید.
  • فعال‌سازی احراز هویت دومرحله‌ای (2FA): در تمام پلتفرم‌هایی که این قابلیت را ارائه می‌دهند، تأیید دو مرحله‌ای را فعال کنید و اولویت را به نرم‌افزارهای تولید رمز یا کلیدهای امنیتی بدهید تا در صورت افشای رمز عبور نیز از ورود غیرمجاز جلوگیری شود.
  • مراقبت از اعلان‌های فریبنده به‌روزرسانی: مهاجمان پس از دسترسی به سرور ممکن است صفحات سایت را دستکاری کرده و هشدارهای جعلی مبنی بر لزوم به‌روزرسانی مرورگر نمایش دهند. هرگز از این پنجره‌ها فایلی دریافت نکنید و نرم‌افزارها را فقط از طریق بخش تنظیمات رسمی سیستم یا مرورگر ارتقا دهید.
  • محافظت از ترافیک شبکه: در زمان استفاده از Wi-Fi عمومی، یک VPN ترافیک میان دستگاه شما و سرور VPN را رمزگذاری می‌کند تا سایر افراد در همان شبکه نتوانند آن را مشاهده کنند. دانلود VPNRice.

فهرست اقدامات فنی برای مدیران سرور

برای محافظت از سرورها و زیرساخت‌های هاستینگ، اقدامات زیر را فوراً انجام دهید:

۱. ارتقای بسته‌ها و تطبیق با اعلانات امنیتی توزیع

چنانچه سرور شما از مخازن رسمی توزیع‌های لینوکس (مانند Debian یا Ubuntu) استفاده می‌کند، نگه‌دارندگان توزیع‌ها وصله‌های امنیتی را مستقیماً به بسته‌های پایدار موجود بک‌پورت (backport) می‌کنند بدون اینکه شماره نسخه پایه نرم‌افزار افزایش یابد (به عنوان مثال، حتی پس از اعمال وصله ممکن است نسخه پایه PHP همچنان به صورت 8.2.26 یا 8.4.15 نمایش داده شود).

ابتدا مخازن را به‌روز کرده و بسته‌های فعال PHP را ارتقا دهید (نام بسته‌های زیر جنبه نمونه دارند و باید با نسخه PHP مخزن شما مطابقت داده شوند):

sudo apt-get update
sudo apt-get --only-upgrade install php8.4-fpm php8.4-cli php8.4-common

سپس نسخه بسته نصب‌شده را با هشدارهای امنیتی رسمی منتشرشده توسط توزیع خود (مانند هشدارهای DSA در دبیان یا USN در اوبونتو) تطبیق دهید:

apt-cache policy php8.4-fpm

گزارش تغییرات بسته را برای اطمینان از گنجانده شدن وصله‌ها بررسی کنید:

apt-get changelog php8.4-fpm | head -n 20

تنها در صورتی که مستقیماً از سورس اصلی php.net اقدام به کامپایل نمایید، از مخزن PPA متعلق به Ondřej Surý استفاده کنید، یا ایمیج‌های رسمی داکر PHP را به کار گیرید، خروجی دستور php -v مستقیماً با شماره نسخه‌های 8.2.35، 8.3.36، 8.4.27 یا 8.5.12 تطابق خواهد داشت.

۲. بازسازی ایمیج‌های کانتینر

به‌روزرسانی سیستم‌عامل میزبان تغییری در کانتینرهای بسته‌بندی‌شده ایجاد نمی‌کند. در صورت استفاده از Docker، فایل Dockerfile را به نسخه امن جدید به‌روزرسانی کنید:

FROM php:8.4.27-fpm-alpine

ایمیج‌ها را با پارامتر --no-cache مجدداً بسازید تا لایه‌های قدیمی حذف شوند:

docker build --no-cache -t web-app:latest .

۳. اعمال پالایش ترافیک در لبه شبکه

تا پیش از تکمیل فرآیند ارتقای تمام سرورها، ترافیک ورودی را در فایروال یا پروکسی معکوس بررسی کنید. طول هدرهای درخواست را محدود کرده، ارسال فایل‌های چندبخشی را کنترل نمایید و ارتباطات غیرمعمول را قبل از رسیدن به پردازنده‌های PHP مسدود سازید.

ارتقای به موقع بسته‌های نرم‌افزاری و محافظت هوشمندانه از دسترسی‌ها، امن‌ترین راهکار در برابر آسیب‌پذیری‌های وب است.