کشف دو آسیبپذیری بحرانی در PHP با شناسه PHP2Shell
دو آسیبپذیری امنیتی بحرانی در هسته زبان برنامهنویسی PHP شناسایی شدهاند که میتوانند در شرایط مشخص، امکان اجرای کد از راه دور (RCE) بدون نیاز به احراز هویت یا افشای اطلاعات حساس حافظه پردازش را فراهم کنند. این آسیبپذیریها با شناسههای CVE-2026-109618 و CVE-2026-109619 ثبت شدهاند و هر دو بر اساس استاندارد CVSS نسخه ۴، امتیاز شدت ۹.۲ از ۱۰ را دریافت کردهاند.
این مجموعه آسیبپذیریها با نام PHP2Shell شناخته میشود. اهمیت این رخداد در آن است که منشأ مشکل، هسته PHP است؛ بنابراین، امنیت کد اختصاصی یک وبسایت یا استفاده از سیستم مدیریت محتوای بهروز، بهتنهایی مانع بروز این آسیبپذیری نمیشود. هر وبسایتی که از نسخه آسیبپذیر PHP استفاده میکند، باید وضعیت امنیتی محیط اجرای خود را بررسی کند.
بر اساس گزارش رسمی پژوهشگران Wiz، این آسیبپذیریها در ۲۱ اکتبر ۲۰۲۶ بهصورت عمومی افشا شدند و تیم PHP نیز در همین تاریخ نسخههای اصلاحشده را منتشر کرد. گزارش پژوهشی Wiz نشان میدهد که بهرهبرداری از این ضعفها میتواند پیامدهایی فراتر از اختلال در عملکرد وبسایت داشته باشد و امنیت اطلاعات پردازششده در سرور را نیز تحت تأثیر قرار دهد.
آیا وبسایت شما در معرض خطر PHP2Shell است؟
اگر وبسایت شما با PHP اجرا میشود، بررسی نسخه فعال PHP و وضعیت نصب اصلاحیه امنیتی باید در اولویت قرار گیرد. برای ارزیابی اولیه، موارد زیر را بررسی کنید:
- نسخه PHP: مشخص کنید وبسایت از کدام نسخه PHP استفاده میکند و آیا نسخه نصبشده در محدوده آسیبپذیر قرار دارد.
- نسخه اصلاحشده: بررسی کنید که نسخه PHP حداقل به یکی از نسخههای اصلاحشده متناسب با شاخه مورد استفاده ارتقا یافته باشد.
- محیط اجرای واقعی: نسخه PHP فعال در وبسرور، PHP-FPM یا کانتینر را بررسی کنید؛ نسخه نمایشدادهشده در خط فرمان ممکن است با نسخه فعال وبسایت متفاوت باشد.
- نسخههای قدیمی: اگر از شاخههای پایانیافته از نظر پشتیبانی استفاده میکنید، وضعیت اصلاحیههای ارائهدهنده سیستمعامل یا شرکت میزبان را بررسی کنید.
توصیه امنیتی: اگر درباره نسخه فعال یا وضعیت اصلاحیه اطمینان ندارید، از شرکت میزبان یا مدیر سرور بخواهید وضعیت PHP را بررسی و نتیجه را اعلام کند. صرف بهروزرسانی سیستم مدیریت محتوا یا افزونههای آن، این آسیبپذیری را برطرف نمیکند.
آسیبپذیری PHP2Shell چگونه عمل میکند؟
این دو آسیبپذیری به ضعفهایی در مدیریت حافظه و وضعیت داخلی PHP هنگام پردازش درخواستها مربوط هستند. مشکل اصلی این است که در شرایط خاص، یک خطای بحرانی یا آزادشدن حافظه میتواند وضعیت داخلی پردازش را به شکلی نامعتبر باقی بگذارد و زمینه استفاده از دادههای نامعتبر را در ادامه پردازش فراهم کند.
جزئیات دو آسیبپذیری یکسان نیست:
- CVE-2026-109618: به مدیریت خطای کمبود حافظه (Out of Memory) و باقیماندن دادههای داخلی با وضعیت ناقص مربوط است. پاکسازی درخواست پس از بروز این خطا ممکن است از دادههای نامعتبر استفاده کند و شرایط لازم برای فساد حافظه یا اجرای کد را فراهم سازد.
- CVE-2026-109619: به باقیماندن وضعیت داخلی مربوط به درخواست پس از آزادشدن حافظه آن مربوط است. اگر پردازش بعدی در همان Worker از این وضعیت قدیمی استفاده کند، امکان فساد حافظه و بهرهبرداری امنیتی ایجاد میشود.
پیامد بهرهبرداری موفق میتواند اجرای کد با سطح دسترسی فرایند PHP، دسترسی غیرمجاز به اطلاعات حساس حافظه یا اختلال در عملکرد سرویس باشد. اطلاعاتی مانند گذرواژهها، توکنهای احراز هویت و کلیدهای API نیز ممکن است در صورت وجود در حافظه پردازش در معرض افشا قرار گیرند.
بر اساس آزمایشهای منتشرشده توسط Wiz، اجرای کد از راه دور پیش از احراز هویت در محیطهای آزمایشی مبتنی بر WordPress، Drupal و Joomla نشان داده شده است. این نتیجه به معنای وجود یک آسیبپذیری اختصاصی در تمام نسخههای این سامانهها نیست؛ مشکل در هسته PHP قرار دارد و هر برنامه مبتنی بر نسخه آسیبپذیر، بسته به محیط اجرا و شرایط بهرهبرداری، ممکن است در معرض خطر باشد.
کدام نسخههای PHP آسیبپذیر هستند؟
بر اساس اطلاعیه رسمی تیم PHP، نسخههای PHP از 5.4 تا 8.5.11 در محدوده نسخههای آسیبپذیر گزارش شدهاند. برای شاخههای پشتیبانیشده، نسخههای اصلاحشده زیر منتشر شدهاند:
| شاخه 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.4.27 یا بالاتر در شاخه 8.4، در صورتی که بسته نصبشده شامل اصلاحیه رسمی باشد، این دو آسیبپذیری را برطرف میکند. صرف استفاده از یک شماره نسخه جدیدتر بدون بررسی اصلاحیه واقعی بسته، بهویژه در توزیعهای سفارشی یا نسخههای ارائهشده توسط شرکتهای میزبان، کافی نیست.
وضعیت نسخههای قدیمی: PHP 8.1 و نسخههای قدیمیتر دیگر از سوی پروژه اصلی PHP بهصورت عادی پشتیبانی نمیشوند. تیم PHP برای برخی شاخههای قدیمیتر، از جمله PHP 7.4، PHP 8.0 و PHP 8.1، اصلاحیههای محدود منبع نیز ارائه کرده است؛ بااینحال، دسترسی به این اصلاحیهها به روش نصب و نگهداری محیط بستگی دارد. برخی توزیعهای لینوکس و ارائهدهندگان پشتیبانی بلندمدت نیز ممکن است اصلاحیههای اختصاصی خود را منتشر کنند.
نکته مهم: اگر وبسایت روی نسخه قدیمی و بدون پشتیبانی اجرا میشود، تنها به بررسی وجود یک وصله اکتفا نکنید. وضعیت بسته نصبشده را از منبع رسمی یا ارائهدهنده بررسی و در صورت امکان، مهاجرت به یک شاخه پشتیبانیشده را برنامهریزی کنید.
چگونه خطر آسیبپذیری PHP را کاهش دهیم؟
با توجه به شدت این آسیبپذیریها، مدیران سرور، تیمهای توسعه و مسئولان امنیت زیرساخت باید اقدامات زیر را در اولویت قرار دهند:
-
شناسایی نسخه فعال PHP: نسخه PHP را در تمام سرورها، کانتینرها و محیطهای میزبانی بررسی کنید. توجه داشته باشید که نسخه خط فرمان الزاماً همان نسخهای نیست که درخواستهای وب را پردازش میکند.
-
نصب اصلاحیه امنیتی: PHP را به نسخه اصلاحشده متناسب با شاخه مورد استفاده ارتقا دهید یا بسته اصلاحشده معتبر ارائهدهنده سیستمعامل را نصب کنید. پس از بهروزرسانی، سرویسها و Workerهای مرتبط را طبق روش استقرار خود بازراهاندازی یا بازنشر کنید تا نسخه جدید واقعاً فعال شود.
-
بررسی همه محیطهای اجرا: نسخه PHP در وبسرور، PHP-FPM، کانتینرها، ایمیجهای استقرار و سرویسهای جانبی را جداگانه بررسی کنید. بهروزرسانی PHP روی میزبان، لزوماً نسخه موجود در تمام کانتینرها یا ایمیجهای برنامه را اصلاح نمیکند.
-
رسیدگی به سامانههای قدیمی: اگر از نسخههای پایانیافته از نظر پشتیبانی استفاده میکنید، دریافت اصلاحیه معتبر از ارائهدهنده یا ارتقا به نسخه پشتیبانیشده را در اولویت قرار دهید.
-
پایش نشانههای بهرهبرداری: گزارشهای وبسرور، خطاهای PHP، رخدادهای غیرعادی و درخواستهای مشکوک را بررسی کنید. اگر احتمال نفوذ وجود دارد، علاوه بر اصلاح نسخه، بررسی رخداد امنیتی و ارزیابی احتمال افشای اطلاعات حساس را انجام دهید.
در صورتی که نصب فوری اصلاحیه امکانپذیر نیست، راهکارهای موقت اعلامشده در اطلاعیه رسمی PHP میتوانند برخی مسیرهای مشخص بهرهبرداری را محدود کنند. بااینحال، اثربخشی این اقدامات به نوع آسیبپذیری و پیکربندی محیط بستگی دارد و هیچکدام جایگزین کامل بهروزرسانی امنیتی نیستند. تغییر تنظیمات حافظه، بارگذاری فایل یا پردازش نشستها نیز باید با درنظرگرفتن تأثیر آن بر عملکرد برنامه انجام شود.
پرسشهای متداول درباره آسیبپذیری PHP2Shell
آیا وبسایتهای وردپرسی در معرض آسیبپذیری PHP2Shell هستند؟
وبسایتهای وردپرسی نیز در صورت استفاده از نسخه آسیبپذیر PHP و وجود شرایط لازم برای بهرهبرداری ممکن است در معرض خطر باشند. بهروزرسانی وردپرس بهتنهایی این مشکل را رفع نمیکند و نسخه PHP محیط اجرا نیز باید اصلاح شود.
آیا بهروزرسانی افزونهها و قالبهای سایت برای رفع این آسیبپذیری کافی است؟
خیر. منشأ PHP2Shell در هسته PHP است؛ بنابراین، اقدام اصلی باید اصلاح نسخه PHP یا نصب بسته امنیتی معتبر ارائهدهنده آن باشد. بهروزرسانی افزونهها و قالبها همچنان برای امنیت کلی سایت ضروری است، اما جایگزین وصله PHP نیست.
اگر نسخه PHP وبسایت قدیمی باشد، چه اقدامی باید انجام داد؟
ابتدا باید مشخص شود نسخه مورد استفاده از سوی پروژه PHP یا ارائهدهنده سیستمعامل پشتیبانی میشود یا خیر. در صورت نبود اصلاحیه معتبر، ارتقا به یک شاخه پشتیبانیشده و مهاجرت کنترلشده برنامه، راهکار مناسبتری برای کاهش ریسک است.
جمعبندی
آسیبپذیری PHP2Shell نشان میدهد که امنیت یک وبسایت تنها به کیفیت کدنویسی، سیستم مدیریت محتوا یا افزونههای نصبشده وابسته نیست. لایه زیرساخت و نسخه زبان برنامهنویسی نیز میتواند منشأ یک خطر جدی باشد. دو آسیبپذیری CVE-2026-109618 و CVE-2026-109619 با شدت ۹.۲ از ۱۰، اهمیت شناسایی نسخههای فعال، نصب اصلاحیه معتبر و بررسی مستمر امنیت محیط اجرا را برجسته میکنند.
تحلیل انارسیستم
از نگاه انارسیستم، آسیبپذیری PHP2Shell یادآور این نکته است که امنیت سامانههای سازمانی به نگهداری مستمر زیرساخت، مدیریت نسخههای نرمافزاری و پایش امنیتی وابسته است؛ رویکردی پیشگیرانه که میتواند احتمال تبدیل یک ضعف فنی به اختلال عملیاتی یا افشای اطلاعات را کاهش دهد.
منابع رسمی و گزارشهای فنی
-
اطلاعیه رسمی تیم PHP: هشدار امنیتی PHP درباره آسیبپذیریهای بحرانی و نسخههای اصلاحشده
-
گزارش پژوهشی Wiz Research: PHP2Shell؛ بررسی فنی آسیبپذیریهای اجرای کد از راه دور در PHP
-
راهنمای امنیتی Google Cloud: راهنمای بررسی و مقابله با آسیبپذیریهای CVE-2026-109618 و CVE-2026-109619